diff --git a/.gitattributes b/.gitattributes index ac756d3c..5f8e282e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -25,3 +25,6 @@ docs/validation/context-workflows/** -text -whitespace # Preserve command handoff evidence and native capture bytes. docs/validation/command-handoff/** -text -whitespace + +# Preserve paste-copy evidence and native capture bytes. +docs/validation/paste-copy/** -text -whitespace diff --git a/app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt b/app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt new file mode 100644 index 00000000..349ecd69 --- /dev/null +++ b/app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt @@ -0,0 +1,526 @@ +package dev.tinycast.android + +import android.app.Dialog +import android.view.KeyEvent +import android.widget.TextView +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import java.util.concurrent.atomic.AtomicInteger +import android.content.ClipData +import android.content.ClipboardManager +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.view.View +import android.view.ViewGroup +import android.view.inspector.WindowInspector +import android.webkit.WebView +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.semantics.SemanticsActions +import androidx.compose.ui.test.* +import androidx.compose.ui.test.junit4.createEmptyComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry +import androidx.test.runner.lifecycle.Stage +import androidx.test.uiautomator.By +import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.Until +import dev.tinycast.android.extensions.* +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 +import java.io.File +import java.nio.file.Files +import java.nio.file.LinkOption +import java.security.MessageDigest +import java.util.UUID +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference + +/** Owned real-runtime protocol probes. These are not Store/service workflows. */ +@RunWith(AndroidJUnit4::class) +class ExtensionPasteCopyDeviceTest { + @get:Rule val compose = createEmptyComposeRule() + @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, "reviewed-text-evidence").apply { mkdirs() } + private val catalog get() = activity().store.extensions + private val sentinel = "Owned paste copy clipboard sentinel" + private val caller = "owned-paste-copy-caller" + private val ownedText = "café é 日本 🌱\n\"owned\"" + private val notifications = AtomicInteger(0) + private var listener: ClipboardManager.OnPrimaryClipChangedListener? = null + private val dialogs = mutableListOf() + private val retainedEngines = mutableListOf() + private var id: String? = null + private var prepared = false + private var sentinelInstalled = false + private var palette = emptyMap() + private var preserved = emptyList() + private var fingerprints = emptyList>() + private var originalDirectories = emptySet() + private val record = JSONObject().put("scope", "Owned JavaScript/native paste/Copy protocols; no service, physical-typing or broad parity credit") + + private fun hash(data: ByteArray) = MessageDigest.getInstance("SHA-256").digest(data).joinToString("") { "%02x".format(it) } + private fun fingerprint(file: File): Map = if (!file.exists()) emptyMap() else file.walkTopDown().associate { + it.relativeTo(file).path to if (it.isDirectory) "directory" else hash(it.readBytes()) + } + private fun lease(): JSONObject { + val args = InstrumentationRegistry.getArguments() + val value = JSONObject(File(context.filesDir, "reviewed-text-fixture-lease/owners.json").readText()) + assertEquals("reviewed-text-device-test-v1", value.getString("fixture_kind")) + assertEquals(args.getString("expectedTextInputLeaseOwner"), value.getString("owner_nonce")) + assertEquals(args.getString("expectedClipboardRecoveryOwner"), value.getString("owner_nonce")) + return value + } + private fun currentActivity(): MainActivity? { + var value: MainActivity? = null + instrumentation.runOnMainSync { + value = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED) + .filterIsInstance().singleOrNull { it.window.decorView.hasWindowFocus() && !it.isFinishing } + } + return value + } + private fun activity(): MainActivity { + if (android.os.Looper.myLooper() == android.os.Looper.getMainLooper()) return ActivityLifecycleMonitorRegistry.getInstance() + .getActivitiesInStage(Stage.RESUMED).filterIsInstance().single { it.window.decorView.hasWindowFocus() && !it.isFinishing } + return requireNotNull(currentActivity()) + } + private fun extension() = catalog.installed.single { it.listing.id == id } + private fun command(value: String) = extension().commands.single { it.name == value } + private fun clipboard(): String? { + val value = AtomicReference() + instrumentation.runOnMainSync { value.set(context.getSystemService(ClipboardManager::class.java).primaryClip?.getItemAt(0)?.text?.toString()) } + return value.get() + } + @Before fun prepare() { + val args = InstrumentationRegistry.getArguments() + assumeTrue("Use the guarded input runner", args.getString("reviewedTextFixture") == "true") + assertEquals("Tinycast_Tablet_API_36", args.getString("dedicatedAvd")) + lease() + val root = File(context.filesDir, "extensions") + originalDirectories = root.listFiles().orEmpty().map { it.name }.toSet() + preserved = root.listFiles().orEmpty().flatMap { directory -> listOf(directory, + File(context.filesDir, "extension-data/${directory.name}"), File(context.applicationInfo.dataDir, "shared_prefs/extension-${directory.name}.xml")) } + fingerprints = preserved.map(::fingerprint) + palette = context.getSharedPreferences("palette", Context.MODE_PRIVATE).all.toMap() + prepared = true + val next = "reviewed-text-" + UUID.randomUUID().toString().replace("-", "") + listOf(File(root, next), File(context.cacheDir, next), File(context.filesDir, "extension-data/$next"), + File(context.applicationInfo.dataDir, "shared_prefs/extension-$next.xml"), File(context.applicationInfo.dataDir, "shared_prefs/extension-$next.xml.bak")).forEach { + assertFalse(Files.exists(it.toPath(), LinkOption.NOFOLLOW_LINKS)) + } + val lease = lease(); lease.getJSONArray("owned_extension_ids").put(next) + val file = File(context.filesDir, "reviewed-text-fixture-lease/owners.json") + val temporary = File(file.path + ".tmp"); assertFalse(temporary.exists()) + temporary.writeText(lease.toString()); assertTrue(temporary.renameTo(file)); id = next + val directory = File(root, next).apply { assertTrue(mkdir()) } + val parent = """ + const React=require('react'),api=require('@raycast/api'); + const output=${JSONObject.quote(ownedText)}; + globalThis.__ownedPasteProbe={attempted:0,rejected:0,resolved:0}; + module.exports.default=function(){ + const [count,setCount]=React.useState(0); + if(!globalThis.__ownedRawInstalled){ + globalThis.__ownedRawInstalled=true; + const bridge=globalThis.__tinycast,host=globalThis.__tinycastHost,settle=bridge.settle,invoke=host.invoke; + const waiting=new Set();let next=0; + globalThis.__ownedPasteProbe.nativeInputs=[]; + host.invoke=function(id,kind,method,raw){ + if(kind==='clipboard'&&method==='paste'){ + const value=JSON.parse(raw)[0],rows=globalThis.__ownedPasteProbe.nativeInputs; + if(rows.length<32)rows.push({kind:value===null?'null':Array.isArray(value)?'array':typeof value, + textType:typeof value?.text,textLength:typeof value?.text==='string'?value.text.length:null}); + } + return Reflect.apply(invoke,this,arguments); + }; + bridge.settle=function(id,ok,encoded){ + if(waiting.delete(String(id))){const probe=globalThis.__ownedPasteProbe; + if(ok)probe.resolved++;else{probe.rejected++;probe.lastError=String(encoded);setCount(probe.rejected)}return;} + return Reflect.apply(settle,this,arguments); + }; + globalThis.__ownedTryRawPaste=value=>{const id='owned-paste-raw-'+(++next);waiting.add(id); + globalThis.__ownedPasteProbe.attempted++;host.invoke(id,'clipboard','paste',JSON.stringify([value]));}; + } + globalThis.__ownedTryPaste=(value=output,options)=>{ + const probe=globalThis.__ownedPasteProbe;probe.attempted++; + api.Clipboard.paste(value,options).then(()=>probe.resolved++,error=>{ + probe.rejected++;probe.lastError=String(error.message);setCount(probe.rejected)}); + }; + const actions=React.createElement(api.ActionPanel,null,React.createElement(api.Action,{title:'Try owned paste',onAction:()=>globalThis.__ownedTryPaste()})); + if(api.environment.commandName==='editor')return React.createElement(api.Form,{actions}, + React.createElement(api.Form.TextField,{id:'owned-input',title:'Owned input',defaultValue:'Owned editor text'})); + return React.createElement(api.Detail,{markdown:'Owned paste ready\n\nOwned rejection '+count,actions}); + }; + """.trimIndent() + val crash = """ + const api=require('@raycast/api'); + globalThis.__ownedPasteProbe={attempted:0,rejected:0,resolved:0}; + module.exports.default=async()=>{globalThis.__ownedPasteProbe.attempted++; + await api.Clipboard.paste(${JSONObject.quote(ownedText)});globalThis.__ownedPasteProbe.resolved++}; + """.trimIndent() + val manifest = JSONObject("""{"name":"owned-paste-copy","commands":[ + {"name":"parent","title":"Owned paste parent","mode":"view"}, + {"name":"steady","title":"Owned replacement parent","mode":"view"}, + {"name":"editor","title":"Owned input parent","mode":"view"}, + {"name":"crash","title":"Owned uncaught paste","mode":"no-view"}]}""") + File(directory,"package.json").writeText(manifest.toString()) + for(value in listOf("parent","steady","editor"))File(directory,"$value.js").writeText(parent) + File(directory,"crash.js").writeText(crash) + File(directory,".tinycast-store.json").writeText(StoreExtension(next,"owned-paste-copy","Owned paste Copy probe","","Droidcast tests","test","","","",4).json().toString()) + record.put("owned_extension_id",next).put("fixture_parent_sha256",hash(parent.toByteArray())) + .put("fixture_crash_sha256",hash(crash.toByteArray())).put("fixture_manifest_sha256",hash(manifest.toString().toByteArray())) + context.startActivity(Intent().setComponent(ComponentName(context.packageName, MainActivity::class.java.name)).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) + assertTrue(device.wait(Until.hasObject(By.pkg(context.packageName).depth(0)), 10000)) + compose.waitUntil(15000) { currentActivity()?.store?.loading == false } + assertTrue(catalog.installed.any { it.listing.id == next }) + dismissClipboardForEvidence() + instrumentation.runOnMainSync { + context.getSystemService(ClipboardManager::class.java).setPrimaryClip(ClipData.newPlainText("Owned handoff fixture", sentinel)) + activity().store.reset(); activity().store.search(caller) + } + sentinelInstalled = true + dismissClipboardForEvidence(requireAction = true) + record.put("font_scale", context.resources.configuration.fontScale).put("width_dp", context.resources.configuration.screenWidthDp) + .put("height_dp", context.resources.configuration.screenHeightDp) + instrumentation.waitForIdleSync() + listener = ClipboardManager.OnPrimaryClipChangedListener { notifications.incrementAndGet() } + instrumentation.runOnMainSync { context.getSystemService(ClipboardManager::class.java).addPrimaryClipChangedListener(requireNotNull(listener)) } + launch("parent") + } + private fun launch(value:String) { + instrumentation.runOnMainSync { activity().store.openExtension(extension(),command(value)) } + if(value=="crash"){ + compose.waitUntil(20000){catalog.runtimeError!=null && catalog.pasteCopyOffer!=null} + }else{ + compose.waitUntil(20000){activeRoot(catalog.runtimeTree)?.let { if(value=="editor")it.optString("type")=="Form" else it.props().optString("markdown").contains("Owned paste ready") }==true} + assertNull(catalog.runtimeError,catalog.runtimeError) + } + compose.waitForIdle() + } + private fun engine():WebView { + val values=mutableListOf() + instrumentation.runOnMainSync { + fun visit(view:View){if(view is WebView)values+=view;if(view is ViewGroup)repeat(view.childCount){visit(view.getChildAt(it))}} + WindowInspector.getGlobalWindowViews().forEach(::visit) + } + return values.single() + } + private fun evaluate(script:String):String { + var value:String?=null;val done=CountDownLatch(1) + val web=engine() + instrumentation.runOnMainSync { web.evaluateJavascript(script){value=it;done.countDown()} } + assertTrue(done.await(5,TimeUnit.SECONDS));return requireNotNull(value) + } + private fun probe():JSONObject=JSONObject(JSONArray("[${evaluate("JSON.stringify(globalThis.__ownedPasteProbe)")}]").getString(0)) + private fun rejected(count:Int){ + compose.waitUntil(15000){probe().optInt("rejected")==count && activeRoot(catalog.runtimeTree)?.props()?.optString("markdown")?.contains("Owned rejection $count")==true} + } + private fun pending():ExtensionCatalog.PasteCopyOffer { + tap("extension-primary") + compose.waitUntil(15000){catalog.pasteCopyOffer!=null && probe().optInt("rejected")==1} + compose.onNodeWithTag("extension-paste-copy").assertExists() + assertEquals(sentinel,clipboard());assertEquals(0,probe().getInt("resolved")) + return requireNotNull(catalog.pasteCopyOffer) + } + private fun oldCopy():()->Boolean=requireNotNull(compose.onNodeWithTag("extension-paste-copy").fetchSemanticsNode().config[SemanticsActions.OnClick].action) + private fun copyExpected(expected:String=ownedText){ + tap("extension-paste-copy") + compose.waitUntil(10000){clipboard()==expected} + assertArrayEquals(expected.toByteArray(Charsets.UTF_8),requireNotNull(clipboard()).toByteArray(Charsets.UTF_8)) + compose.onNodeWithTag("extension-paste-title").assertTextEquals("Result copied") + compose.onNodeWithTag("extension-paste-copy").assertDoesNotExist() + dismissClipboardForEvidence(requireAction=true) + record.put("copy_exact",true).put("owned_output_sha256",hash(expected.toByteArray())).put("clipboard_notifications",notifications.get()) + } + private fun finish(){ + tap("extension-paste-return");assertNull(catalog.running);assertNull(activity().store.dialog);assertEquals(caller,activity().store.query) + record.put("passed",true).put("launcher_query_preserved",true);capture("caller-return") + } + private fun capture(phase: String) { + compose.waitForIdle() + val stem = "pastecopy-" + name.methodName.lowercase(java.util.Locale.ROOT) + "-" + phase + device.dumpWindowHierarchy(File(evidence, "$stem.xml")); assertTrue(device.takeScreenshot(File(evidence, "$stem.png"))) + File(evidence, "$stem-frame.json").writeText(JSONObject().put("phase", phase).put("scope", record.getString("scope")) + .put("font_scale", context.resources.configuration.fontScale).put("launch_epoch", catalog.launchEpoch) + .put("synchronization", "Compose idle; hierarchy before PNG").toString(2)) + } + private fun tap(tag: String) { + val node = compose.onNodeWithTag(tag); val minimum = context.resources.displayMetrics.density * 48f + val legacy = InstrumentationRegistry.getArguments().getString("pasteCopyLegacyReveal") == "true" + var steps = 0 + while (node.fetchSemanticsNode().boundsInRoot.let { it.width + 1 < minimum || it.height + 1 < minimum } && steps++ < 30) { + val surface = compose.onNodeWithTag("palette-content-scroll").fetchSemanticsNode() + val panel = compose.onNodeWithTag("extension-palette").fetchSemanticsNode().boundsInRoot + val origin = compose.runOnUiThread { surface.positionInRoot } + // The old four-pixel gutter may lie outside the rounded palette + // when the IME leaves only a short viewport. Use its interior. + val x = if (legacy) 4f else minOf(surface.size.width / 2f, minimum) + val start = Offset(x, surface.size.height * if (tag.endsWith("back")) .2f else .8f) + val end = Offset(x, surface.size.height * if (tag.endsWith("back")) .8f else .2f) + val radius = minOf(PaletteTheme.radius.value * context.resources.displayMetrics.density, panel.width / 2f, panel.height / 2f) + fun insideRoundedPanel(point: Offset): Boolean { + if (point.x < panel.left || point.x > panel.right || point.y < panel.top || point.y > panel.bottom) return false + val dx = maxOf(panel.left + radius - point.x, 0f, point.x - (panel.right - radius)) + val dy = maxOf(panel.top + radius - point.y, 0f, point.y - (panel.bottom - radius)) + return dx * dx + dy * dy <= radius * radius + } + val paths = record.optJSONArray("reveal_paths") ?: JSONArray().also { record.put("reveal_paths", it) } + val path = JSONObject().put("tag", tag).put("step", steps).put("legacy_four_pixel_gutter", legacy) + .put("panel_bounds", JSONArray(listOf(panel.left, panel.top, panel.right, panel.bottom))) + .put("scroll_origin", JSONArray(listOf(origin.x, origin.y))) + .put("scroll_size", JSONArray(listOf(surface.size.width, surface.size.height))) + .put("start_in_root", JSONArray(listOf(origin.x + start.x, origin.y + start.y))) + .put("end_in_root", JSONArray(listOf(origin.x + end.x, origin.y + end.y))) + .put("rounded_panel_radius_px", radius) + .put("start_inside_rounded_panel", insideRoundedPanel(origin + start)) + .put("legacy_start_inside_rounded_panel", insideRoundedPanel(origin + Offset(4f, start.y))) + .put("dialog_before", activity().store.dialog).put("command_before", catalog.running?.second?.name) + paths.put(path) + if (name.methodName == "keyboardCopyHidesImeAndEscapeReturns") capture("reveal-$steps-before") + compose.onNodeWithTag("palette-content-scroll").performTouchInput { + swipe(start, end, 300) + } + path.put("dialog_after", activity().store.dialog ?: JSONObject.NULL) + .put("command_after", catalog.running?.second?.name ?: JSONObject.NULL) + if (name.methodName == "keyboardCopyHidesImeAndEscapeReturns") capture("reveal-$steps-after") + } + val bounds = node.fetchSemanticsNode().boundsInRoot + assertTrue("$tag requires a complete 48dp target", bounds.width + 1 >= minimum && bounds.height + 1 >= minimum) + node.assertIsDisplayed().assertIsEnabled().performTouchInput { click(center) } + val taps = record.optJSONArray("pointer_taps") ?: JSONArray().also { record.put("pointer_taps", it) } + taps.put(JSONObject().put("tag", tag).put("bounds", JSONArray(listOf(bounds.left, bounds.top, bounds.right, bounds.bottom))).put("minimum_px", minimum).put("reveal_gestures", steps)) + } + @After fun restore() { + if (!prepared) return + try { if (sentinelInstalled && !record.optBoolean("passed") && currentActivity() != null) capture("failure") } + catch (failure: Throwable) { record.put("failure_capture_error_type", failure.javaClass.simpleName) } + finally { + compose.mainClock.autoAdvance = true + instrumentation.runOnMainSync { + listener?.let { context.getSystemService(ClipboardManager::class.java).removePrimaryClipChangedListener(it) };listener=null + dialogs.forEach { it.dismiss() };retainedEngines.forEach { it.close() } + } + record.put("clipboard_notifications",notifications.get()) + instrumentation.runOnMainSync { + val monitor = ActivityLifecycleMonitorRegistry.getInstance() + listOf(Stage.CREATED, Stage.STARTED, Stage.RESUMED, Stage.PAUSED, Stage.STOPPED).flatMap { monitor.getActivitiesInStage(it) } + .filterIsInstance().distinct().forEach { it.store.extensions.close(); it.store.dialog = null; it.finish() } + } + val deadline = android.os.SystemClock.uptimeMillis() + 10000 + var remaining = true + while (remaining && android.os.SystemClock.uptimeMillis() < deadline) { + instrumentation.waitForIdleSync() + instrumentation.runOnMainSync { remaining = listOf(Stage.CREATED, Stage.STARTED, Stage.RESUMED, Stage.PAUSED, Stage.STOPPED) + .flatMap { ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(it) }.any { it is MainActivity } } + if (remaining) android.os.SystemClock.sleep(50) + } + assertFalse("Owned activities must close before restoring files", remaining) + restorePalettePreferences(context, palette) + id?.let { value -> + assertTrue(lease().getJSONArray("owned_extension_ids").let { ids -> (0 until ids.length()).any { ids.getString(it) == value } }) + listOf(File(context.filesDir, "extensions/$value"), File(context.cacheDir, value), File(context.filesDir, "extension-data/$value")).forEach { it.deleteRecursively(); assertFalse(it.exists()) } + context.deleteSharedPreferences("extension-$value") + listOf(".xml", ".xml.bak").forEach { suffix -> + assertFalse(Files.exists(File(context.applicationInfo.dataDir, "shared_prefs/extension-$value$suffix").toPath(), LinkOption.NOFOLLOW_LINKS)) + } + } + assertEquals(originalDirectories, File(context.filesDir, "extensions").listFiles().orEmpty().map { it.name }.toSet()) + assertEquals(fingerprints, preserved.map(::fingerprint)) + record.put("owned_data_removed", true).put("preexisting_installations_and_data_preserved", true) + .put("clipboard_restoration_scope", "Independent host/test-UID durable recovery; this class does not retain or publish the original clipboard") + File(evidence, "pastecopy-${name.methodName.lowercase(java.util.Locale.ROOT)}-record.json").writeText(record.toString(2)) + } + } + + @Test fun pointerCopyIsExactOnceAndReturns() { + val held=pending();val obsolete=oldCopy();capture("pending-before-copy") + copyExpected();assertFalse(requireNotNull(held.output).available) + capture("unicode-exact-copy") + val afterCopySentinel="Owned fresh sentinel after real Unicode Copy" + instrumentation.runOnMainSync { + context.getSystemService(ClipboardManager::class.java).setPrimaryClip(ClipData.newPlainText("Owned duplicate probe",afterCopySentinel)) + } + dismissClipboardForEvidence(requireAction=true) + instrumentation.runOnMainSync { obsolete();obsolete() } + instrumentation.waitForIdleSync();assertEquals(afterCopySentinel,clipboard()) + record.put("duplicate_after_copy_rejected",true) + .put("duplicate_probe_setup","After the real exact Copy, a separate owned sentinel is written; retained callbacks must leave it unchanged. Listener notifications are diagnostics, not native write counts.") + capture("duplicate-sentinel-preserved");finish() + } + @Test fun returnAndEscapeCancelWithoutCopy() { + val held=pending();val obsolete=oldCopy();capture("pending-before-return") + tap("extension-paste-return");assertNull(catalog.running);assertEquals(caller,activity().store.query) + instrumentation.runOnMainSync { obsolete() };assertFalse(requireNotNull(held.output).available) + assertEquals(sentinel,clipboard()) + launch("parent");val second=pending();val oldSecond=oldCopy() + instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_ESCAPE) + compose.waitUntil(10000){activity().store.dialog==null} + instrumentation.runOnMainSync { oldSecond() };assertFalse(requireNotNull(second.output).available) + assertNull(catalog.running);assertEquals(sentinel,clipboard()) + record.put("return_and_escape_cancelled_without_copy",true).put("passed",true);capture("cancelled-caller") + } + @Test fun replacementRejectsQueuedCopyBeforeRecomposition() { + val held=pending();val obsolete=oldCopy();val before=catalog.launchEpoch + compose.mainClock.autoAdvance=false + try { + instrumentation.runOnMainSync { catalog.launch(extension(),command("steady"));obsolete() } + assertEquals(before+1,catalog.launchEpoch);assertFalse(requireNotNull(held.output).available) + assertEquals(sentinel,clipboard()) + } finally { compose.mainClock.autoAdvance=true } + compose.waitUntil(20000){activeRoot(catalog.runtimeTree)?.props()?.optString("markdown")?.contains("Owned paste ready")==true} + compose.onNodeWithTag("extension-paste-copy").assertDoesNotExist() + pending();copyExpected();record.put("queued_replaced_copy_rejected",true);capture("fresh-replacement-copy");finish() + } + @Test fun sameSessionReplacementCannotCopyThePriorOutput() { + val held=pending();val obsolete=oldCopy();val newer="Owned newer output β é 🦊" + val epoch=catalog.launchEpoch + compose.mainClock.autoAdvance=false + try { + evaluate("globalThis.__ownedTryPaste(${JSONObject.quote(newer)});true") + val deadline=android.os.SystemClock.uptimeMillis()+15000 + while(probe().optInt("rejected")<2 && android.os.SystemClock.uptimeMillis()(true,JSONObject.NULL,JSONArray().put("owned"),JSONObject().put("file","/owned/not-opened"), + JSONObject().put("html","owned without plain alternative"),"x".repeat(65537),"界".repeat(45000)) + for((index,value) in values.withIndex()) { + val encoded=JSONArray().put(value).toString().drop(1).dropLast(1) + evaluate("globalThis.__ownedTryRawPaste($encoded);true");rejected(index+2) + compose.onNodeWithText("Owned rejection ${index+2}",substring=true,useUnmergedTree=true).assertIsDisplayed() + compose.onNodeWithTag("extension-paste-copy").assertDoesNotExist() + instrumentation.runOnMainSync { obsolete() } + assertEquals(sentinel,clipboard());assertFalse(requireNotNull(held.output).available) + } + assertEquals(0,probe().getInt("resolved"));assertNull(catalog.pasteCopyOffer) + record.put("invalid_request_count",values.size).put("old_capability_cleared",true) + .put("negative_input_scope","Owned direct host-boundary requests bypass portable Clipboard argument normalization; actual bridge/React/native publication follows");capture("rejections-without-copy") + tap("extension-back");assertNull(catalog.running);record.put("passed",true);capture("cancelled-caller") + } + @Test fun preferencesDisposalAndHiddenRequestsCannotCopy() { + val held=pending();val obsolete=oldCopy() + instrumentation.runOnMainSync { activity().store.extensionSetupFromRun=true;activity().store.dialog="extension-setup" } + compose.onNodeWithTag("extension-configuration").assertExists();assertNull(catalog.pasteCopyOffer) + assertFalse(requireNotNull(held.output).available) + evaluate("globalThis.__ownedTryPaste();true") + val deadline=android.os.SystemClock.uptimeMillis()+10000 + while(probe().optInt("rejected")<2 && android.os.SystemClock.uptimeMillis() + val full = fullBounds(target) + visible.height + 1 < full.height || visible.width + 1 < full.width + } && attempts++ < 30) { + compose.onNodeWithTag("palette-content-scroll").performTouchInput { + swipe(Offset(4f, height * .8f), Offset(4f, height * .2f), 300) + } + } + val label = compose.onNodeWithText(expectedLabel, useUnmergedTree = true).fetchSemanticsNode() + val layouts = mutableListOf() + instrumentation.runOnMainSync { assertTrue(requireNotNull(label.config[SemanticsActions.GetTextLayoutResult].action)(layouts)) } + val layout = layouts.single(); assertEquals(expectedLabel, layout.layoutInput.text.text) + assertTrue(label.size.height + 1 >= layout.multiParagraph.height) + val origin = compose.runOnUiThread { label.positionInRoot }; val visible = label.boundsInRoot + val lines = JSONArray() + for (line in 0 until layout.lineCount) { + assertFalse(layout.isLineEllipsized(line)) + val left = origin.x + layout.getLineLeft(line); val right = origin.x + layout.getLineRight(line) + val top = origin.y + layout.getLineTop(line); val bottom = origin.y + layout.getLineBottom(line) + assertTrue(left >= visible.left - 1 && right <= visible.right + 1 && top >= visible.top - 1 && bottom <= visible.bottom + 1) + lines.put(JSONArray(listOf(left, top, right, bottom))) + } + val witnesses = record.optJSONArray("paste_fallback_label_witnesses") ?: JSONArray().also { record.put("paste_fallback_label_witnesses", it) } + witnesses.put(JSONObject().put("tag", tag).put("label", expectedLabel).put("line_bounds", lines).put("reveal_gestures", attempts)) + touchContextAction(tag) + } private fun observeContextTranslation(commandName: String) { val catalog = foregroundActivity().store.extensions + val expectPasteCopy = InstrumentationRegistry.getArguments().getString("expectPasteCopyFallback") == "true" + assertTrue("Explicit Copy expectation belongs only to the paste variant", !expectPasteCopy || commandName == "instant-translate-paste") + var usedPasteReturn = false val view = commandName in setOf("translate", "quick-translate", "quick-translate-view") compose.waitUntil(30000) { catalog.runtimeError != null || (if (view) activeRoot(catalog.runtimeTree)?.optString("type") == "List" else contextEngine() != null) } @@ -626,6 +658,22 @@ class ReviewedTextDeviceTest { } else if (commandName == "instant-translate-paste" && expected.isNotBlank() && paste == expected && observed.getBoolean("pasteRejected")) { assertEquals(sentinel, clipboardText()); capture("translation-paste-unavailable") record.put("copy_exact", false).put("observed_phase_outcome", "partial-paste-unsupported").put("owned_service_output_matched_paste_attempt", true) + if (expectPasteCopy) { + val deadline = android.os.SystemClock.uptimeMillis() + 10000 + while (compose.onAllNodesWithTag("extension-paste-copy").fetchSemanticsNodes().isEmpty() && + android.os.SystemClock.uptimeMillis() < deadline) { compose.waitForIdle(); android.os.SystemClock.sleep(50) } + assertEquals("A rejected paste with owned output must offer Copy result instead", 1, + compose.onAllNodesWithTag("extension-paste-copy").fetchSemanticsNodes().size) + assertEquals(sentinel, clipboardText()); capture("paste-fallback-before-copy") + touchPasteFallback("extension-paste-copy", "Copy result instead") + compose.waitUntil(10000) { clipboardText() == expected } + compose.onNodeWithTag("extension-paste-title").assertTextEquals("Result copied") + compose.onNodeWithTag("extension-paste-copy").assertDoesNotExist() + dismissClipboardForEvidence(requireAction = true); capture("paste-fallback-exact-copy") + record.put("copy_exact", true).put("native_copy_was_explicit", true) + .put("observed_phase_outcome", "partial-paste-explicit-copy-fallback") + touchPasteFallback("extension-paste-return", "Return"); usedPasteReturn = true + } } else if (commandName == "instant-translate-view" && expected.isNotBlank() && catalog.runtimeReady && catalog.runtimeStatus == expected) { assertEquals(sentinel, clipboardText()); capture("translation-visible-feedback") record.put("copy_exact", false).put("observed_phase_outcome", "working-display-observed-path") @@ -642,7 +690,9 @@ class ReviewedTextDeviceTest { record.put("native_detail_returned_to_results", true).put("edited_query_preserved_on_native_back", true) capture("translation-results-return") } - touchContextAction("extension-back"); awaitCaller() + if (expectPasteCopy) assertTrue("A witnessed explicit native Copy fallback is required", usedPasteReturn) + if (!usedPasteReturn) touchContextAction("extension-back") + awaitCaller() assertEquals("hello", device.findObject(By.res("android:id/edit")).text) assertEquals("Selection 0 to 5", device.findObject(By.res("android:id/text2")).text) record.put("workflow_outcome", record.getString("observed_phase_outcome")) diff --git a/app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt b/app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt index bb8da203..cfe7a0a8 100644 --- a/app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt +++ b/app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt @@ -84,7 +84,7 @@ class ExtensionCatalog(private val context: Context) { var runtimeError: String? get() = runtimeErrorState set(value) { - if (value != null) revokeReviewedText() + if (value != null) revokeReviewedText(preservePasteCopy = true) runtimeErrorState = value } var runtimeStatus by mutableStateOf("") @@ -100,6 +100,12 @@ class ExtensionCatalog(private val context: Context) { private var invocationLaunchProperties = ordinaryLaunchProperties(emptyMap()) private var commandHandoffDepth = 0 private var preparedCommandLaunch: PreparedCommandLaunch? = null + internal enum class PasteCopyStatus { READY, COPIED, FAILED } + internal class PasteCopyOffer( + val producer: Any, val epoch: Int, val extension: InstalledExtension, val command: ExtensionCommand, + val output: ExtensionPasteCopy?, val status: PasteCopyStatus = PasteCopyStatus.READY, + ) + internal var pasteCopyOffer by mutableStateOf(null); private set private class PreparedText(val preview: TextInputPreview, val target: TextInputTarget, val epoch: Int) private var preparedText: PreparedText? = null internal class RuntimeText(val owner: Any, val target: TextInputTarget, val input: CommandTextInput?, val launchProperties: String) @@ -177,6 +183,7 @@ class ExtensionCatalog(private val context: Context) { private fun ordinaryLaunchProperties(args: Map) = JSONObject().put("arguments", JSONObject(args)).put("launchType", "userInitiated").toString() private fun begin(extension: InstalledExtension, command: ExtensionCommand, args: Map, owner: Any, input: CommandTextInput?, launchProperties: String = ordinaryLaunchProperties(args), handoffDepth: Int = 0) { + clearPasteCopy() stopRuntime(owner) preparedCommandLaunch = null commandText?.let(reviewedText::release) @@ -276,12 +283,42 @@ class ExtensionCatalog(private val context: Context) { invocationOwner === owner && running?.first === extension && running?.second === command internal fun attachRuntime(owner: Any, extension: InstalledExtension, command: ExtensionCommand, stop: () -> Unit): Any? { if (!ownsRuntime(owner, extension, command)) return null + clearPasteCopy() runtimeStop?.second?.invoke() val registration = Any() runtimeStop = registration to stop return registration } - internal fun detachRuntime(registration: Any?) { if (registration != null && runtimeStop?.first === registration) runtimeStop = null } + internal fun detachRuntime(registration: Any?) { + if (registration == null) return + clearPasteCopy(producer = registration) + if (runtimeStop?.first === registration) runtimeStop = null + } + internal fun clearPasteCopy(expected: PasteCopyOffer? = null, producer: Any? = null) { + val current = pasteCopyOffer ?: return + if (expected != null && current !== expected || producer != null && current.producer !== producer) return + current.output?.clear(); pasteCopyOffer = null + } + internal fun offerPasteCopy(registration: Any, owner: Any, extension: InstalledExtension, + command: ExtensionCommand, output: ExtensionPasteCopy): Boolean { + if (runtimeStop?.first !== registration || !ownsRuntime(owner, extension, command) || runtimeError != null) { + output.clear(); return false + } + clearPasteCopy() + pasteCopyOffer = PasteCopyOffer(registration, launchEpoch, extension, command, output) + return true + } + internal fun isCurrentPasteCopy(offer: PasteCopyOffer): Boolean = pasteCopyOffer === offer && + launchEpoch == offer.epoch && running?.first === offer.extension && running?.second === offer.command + internal fun copyPasteResult(offer: PasteCopyOffer, copy: (String) -> Unit): Boolean { + if (!isCurrentPasteCopy(offer) || offer.status != PasteCopyStatus.READY) return false + val text = offer.output?.take() ?: return false + val status = try { copy(text); PasteCopyStatus.COPIED } catch (_: RuntimeException) { PasteCopyStatus.FAILED } + if (isCurrentPasteCopy(offer)) { + pasteCopyOffer = PasteCopyOffer(offer.producer, offer.epoch, offer.extension, offer.command, null, status) + } + return status == PasteCopyStatus.COPIED + } private fun stopRuntime(nextOwner: Any) { invocationOwner = nextOwner val stop = runtimeStop?.second @@ -291,7 +328,8 @@ class ExtensionCatalog(private val context: Context) { internal fun releaseText(owner: Any) { if (invocationOwner === owner) { commandText?.let(reviewedText::release); commandText = null } } - private fun revokeReviewedText() { + private fun revokeReviewedText(preservePasteCopy: Boolean = false) { + if (!preservePasteCopy) clearPasteCopy() stopRuntime(Any()) reviewedText.invalidate(); commandText = null; preparedText = null preparedCommandLaunch = null; invocationLaunchProperties = ordinaryLaunchProperties(emptyMap()); commandHandoffDepth = 0 diff --git a/app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt b/app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt new file mode 100644 index 00000000..ba0914ac --- /dev/null +++ b/app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt @@ -0,0 +1,143 @@ +package dev.tinycast.android.extensions + +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject + +/** Plain output held once in memory. This object never formats its contents for logging. */ +internal class ExtensionPasteCopy private constructor(text: String) { + private var value: String? = text + val available: Boolean get() = value != null + + fun take(): String? = value.also { value = null } + fun clear() { value = null } + + companion object { + internal const val MAX_TEXT_UNITS = 64 * 1024 + internal const val MAX_TEXT_BYTES = 128 * 1024 + internal const val MAX_REQUEST_UNITS = 512 * 1024 + internal const val MAX_REQUEST_BYTES = 512 * 1024 + + fun parse(raw: String): ExtensionPasteCopy { + require(raw.length <= MAX_REQUEST_UNITS && raw.toByteArray(Charsets.UTF_8).size <= MAX_REQUEST_BYTES) { + "This paste result exceeds the Android size limit" + } + boundedNesting(raw) + val args = try { JSONArray(raw) } catch (_: JSONException) { + throw IllegalArgumentException("Paste requires valid content parameters") + } + require(args.length() in 1..2) { "Paste requires content and optional options" } + if (args.length() == 2 && !args.isNull(1)) { + val options = args.optJSONObject(1) + require(options != null && options.keys().asSequence().all { it == "closeMainWindow" } && + (!options.has("closeMainWindow") || options.opt("closeMainWindow") is Boolean)) { + "These paste options are unavailable on Android" + } + } + val text = when (val content = args.opt(0)) { + is String -> content + is Number -> { + require(content.toDouble().isFinite()) { "Paste requires finite text content" } + // The portable API serializes numbers with JSON.stringify. Keep + // that exact representation, including small/large exponents. + raw.substringAfter('[').trimStart().substringBefore(',').substringBefore(']').trim() + } + is JSONObject -> { + require(content.keys().asSequence().all { it in setOf("text", "html") } && + content.opt("text") is String && (!content.has("html") || content.opt("html") is String)) { + "Only a plain text result can be offered for Copy on Android" + } + content.getString("text") + } + else -> throw IllegalArgumentException("Only a plain text result can be offered for Copy on Android") + } + require(text.length <= MAX_TEXT_UNITS) { "This paste result exceeds the Android text limit" } + var index = 0 + while (index < text.length) { + val character = text[index++] + if (Character.isHighSurrogate(character)) { + require(index < text.length && Character.isLowSurrogate(text[index++])) { "Paste requires valid Unicode text" } + } else require(!Character.isLowSurrogate(character)) { "Paste requires valid Unicode text" } + } + require(text.toByteArray(Charsets.UTF_8).size <= MAX_TEXT_BYTES) { "This paste result exceeds the Android text limit" } + return ExtensionPasteCopy(text) + } + + private fun boundedNesting(raw: String) { + var at = 0 + fun invalid(): Nothing = throw IllegalArgumentException("Paste requires valid JSON content parameters") + fun space() { while (at < raw.length && raw[at] in " \t\r\n") at++ } + fun token(character: Char) { space(); if (at >= raw.length || raw[at++] != character) invalid() } + fun string() { + token('"') + while (at < raw.length) { + val character = raw[at++] + if (character == '"') return + if (character < ' ') invalid() + if (character == '\\') { + if (at >= raw.length) invalid() + when (raw[at++]) { + '"', '\\', '/', 'b', 'f', 'n', 'r', 't' -> Unit + 'u' -> repeat(4) { + if (at >= raw.length || raw[at++] !in "0123456789abcdefABCDEF") invalid() + } + else -> invalid() + } + } + } + invalid() + } + fun number() { + val start = at + if (raw[at] == '-') at++ + if (at >= raw.length) invalid() + if (raw[at] == '0') at++ else { + if (raw[at] !in '1'..'9') invalid() + while (at < raw.length && raw[at] in '0'..'9') at++ + } + if (at < raw.length && raw[at] == '.') { + at++; val digits = at + while (at < raw.length && raw[at] in '0'..'9') at++ + if (at == digits) invalid() + } + if (at < raw.length && raw[at] in "eE") { + at++; if (at < raw.length && raw[at] in "+-") at++ + val digits = at + while (at < raw.length && raw[at] in '0'..'9') at++ + if (at == digits) invalid() + } + if (raw.substring(start, at).toDoubleOrNull()?.isFinite() != true) invalid() + } + fun value(depth: Int) { + require(depth <= 4) { "Paste content is too deeply nested" } + space(); if (at >= raw.length) invalid() + when (raw[at]) { + '"' -> string() + '[' -> { + at++; space() + if (at < raw.length && raw[at] == ']') { at++; return } + while (true) { + value(depth + 1); space(); if (at >= raw.length) invalid() + when (raw[at++]) { ']' -> return; ',' -> Unit; else -> invalid() } + } + } + '{' -> { + at++; space() + if (at < raw.length && raw[at] == '}') { at++; return } + while (true) { + string(); token(':'); value(depth + 1); space(); if (at >= raw.length) invalid() + when (raw[at++]) { '}' -> return; ',' -> Unit; else -> invalid() } + } + } + '-', in '0'..'9' -> number() + else -> { + val literal = listOf("true", "false", "null").firstOrNull { raw.startsWith(it, at) } ?: invalid() + at += literal.length + } + } + } + space(); if (at >= raw.length || raw[at] != '[') invalid() + value(0); space(); if (at != raw.length) invalid() + } + } +} diff --git a/app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt b/app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt index 6dba58de..775710d9 100644 --- a/app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt +++ b/app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt @@ -25,7 +25,7 @@ import dev.tinycast.android.TextInputRejected @SuppressLint("SetJavaScriptEnabled") class ExtensionRuntime(private val context: Context, private val catalog: ExtensionCatalog, private val extension: InstalledExtension, private val command: ExtensionCommand, - private val canLaunchCommand: () -> Boolean) { + private val canUseForegroundActions: () -> Boolean) { constructor(context: Context, catalog: ExtensionCatalog, extension: InstalledExtension, command: ExtensionCommand) : this(context, catalog, extension, command, { false }) private val textContext = catalog.captureText(extension,command) @@ -125,6 +125,7 @@ class ExtensionRuntime(private val context: Context, private val catalog: Extens private fun destroyEngine() { if (engineDestroyed) return engineDestroyed = true + runtimeRegistration?.let { catalog.clearPasteCopy(producer = it) } acknowledgementTimeout?.let(cleanupHandler::removeCallbacks); acknowledgementTimeout = null; pendingLaunchAcknowledgement = null webView.stopLoading(); webView.removeJavascriptInterface("AndroidHost") (webView.parent as? android.view.ViewGroup)?.removeView(webView); webView.destroy() @@ -136,12 +137,12 @@ class ExtensionRuntime(private val context: Context, private val catalog: Extens if (destroyed) destroyEngine() } private fun launchCommand(id: String, raw: String) { - check(canLaunchCommand() && webView.isAttachedToWindow && webView.hasWindowFocus()) { + check(canUseForegroundActions() && webView.isAttachedToWindow && webView.hasWindowFocus()) { "Command handoff needs the current command screen in the foreground" } val request = ExtensionCommandLaunch.parse(raw) val prepared = catalog.prepareCommandLaunch(textContext.owner, extension, command, request) - check(canLaunchCommand() && webView.hasWindowFocus()) { "This command screen is no longer current" } + check(canUseForegroundActions() && webView.hasWindowFocus()) { "This command screen is no longer current" } val token = Any() check(pendingLaunchAcknowledgement == null) { "A command handoff is already pending" } pendingLaunchAcknowledgement = token @@ -162,6 +163,16 @@ class ExtensionRuntime(private val context: Context, private val catalog: Extens } catch (_: RuntimeException) { acknowledgeCommandLaunch(token) } } private fun ready() { catalog.runtimeReady = true; watchdog?.cancel() } + private fun rejectPasteWithCopyOffer(raw: String): Nothing { + check(canUseForegroundActions() && webView.isAttachedToWindow && webView.hasWindowFocus()) { + "Clipboard paste needs the current command screen in the foreground" + } + val registration = checkNotNull(runtimeRegistration) { "This command session has ended" } + catalog.clearPasteCopy(producer = registration) + val output = ExtensionPasteCopy.parse(raw) + check(catalog.offerPasteCopy(registration, textContext.owner, extension, command, output)) { "This command session has ended" } + error("Clipboard paste into another app is unavailable on Android. Use Copy result instead in Droidcast.") + } private fun quote(s: String) = JSONObject.quote(s) private fun post(block: () -> Unit) { if (active()) scope.launch { if (active()) block() } } inner class Bridge { @@ -178,6 +189,7 @@ class ExtensionRuntime(private val context: Context, private val catalog: Extens launchCommand(id, raw) return@launch } + if (api == "clipboard" && method == "paste") rejectPasteWithCopyOffer(raw) val result = asyncCall(api, method, JSONArray(raw)) if(!active())return@launch val encoded = JSONArray().put(result ?: JSONObject.NULL).toString().drop(1).dropLast(1) diff --git a/app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt b/app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt index b31c520b..c3b1a436 100644 --- a/app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt +++ b/app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt @@ -31,6 +31,8 @@ import androidx.compose.ui.semantics.selected import androidx.compose.ui.semantics.error import androidx.compose.ui.semantics.stateDescription import androidx.compose.ui.platform.LocalWindowInfo +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.key.* @@ -450,6 +452,75 @@ internal fun activeRoot(tree:JSONObject?):JSONObject? { private class CommandChromeLifetime { var active = true } +private class PasteCopyLifetime { var active = true; var consumed = false } + +@Composable +private fun ColumnScope.PasteCopyFallback(catalog: ExtensionCatalog, offer: ExtensionCatalog.PasteCopyOffer, + isCurrent: () -> Boolean, close: () -> Unit) { + val lifetime = remember(offer) { PasteCopyLifetime() } + val context = LocalContext.current + val window = LocalWindowInfo.current + val view = LocalView.current + val focus = LocalFocusManager.current + val keyboard = LocalSoftwareKeyboardController.current + DisposableEffect(offer) { onDispose { lifetime.active = false; catalog.clearPasteCopy(expected = offer) } } + LaunchedEffect(offer) { + if (window.isWindowFocused && isCurrent()) { focus.clearFocus(force = true); keyboard?.hide() } + } + fun current(): Boolean = lifetime.active && !lifetime.consumed && window.isWindowFocused && + view.isAttachedToWindow && view.hasWindowFocus() && + isCurrent() && catalog.isCurrentPasteCopy(offer) + val title = when (offer.status) { + ExtensionCatalog.PasteCopyStatus.READY -> "Paste is unavailable" + ExtensionCatalog.PasteCopyStatus.COPIED -> "Result copied" + ExtensionCatalog.PasteCopyStatus.FAILED -> "Couldn’t copy this result" + } + val message = when (offer.status) { + ExtensionCatalog.PasteCopyStatus.READY -> "Copy the result, then return to your app and paste it yourself." + ExtensionCatalog.PasteCopyStatus.COPIED -> "Return to your app and paste it yourself." + ExtensionCatalog.PasteCopyStatus.FAILED -> "Return to your app. You can run the command again to try another copy." + } + Column(Modifier.weight(1f).fillMaxWidth().testTag("extension-paste-fallback")) { + Column(Modifier.weight(1f).fillMaxWidth().verticalScroll(rememberScrollState()).padding(24.dp), + verticalArrangement = Arrangement.spacedBy(14.dp)) { + Text(title, fontSize = 18.sp, lineHeight = 26.sp, color = ink, modifier = Modifier.testTag("extension-paste-title")) + Text(message, fontSize = 14.sp, lineHeight = 22.sp, color = muted, modifier = Modifier.testTag("extension-paste-message")) + } + val copyButton: @Composable (Modifier) -> Unit = { modifier -> + Button(onClick = { + if (current()) { + lifetime.consumed = true + catalog.copyPasteResult(offer) { text -> + context.getSystemService(android.content.ClipboardManager::class.java) + .setPrimaryClip(android.content.ClipData.newPlainText(offer.extension.listing.title, text)) + } + } + }, enabled = current(), shape = RoundedCornerShape(10.dp), + modifier = modifier.heightIn(min = 48.dp).testTag("extension-paste-copy")) { + Text("Copy result instead", fontSize = 14.sp, lineHeight = 20.sp) + } + } + val returnButton: @Composable (Modifier) -> Unit = { modifier -> + OutlinedButton(onClick = { if (current()) { lifetime.consumed = true; close() } }, enabled = current(), shape = RoundedCornerShape(10.dp), + modifier = modifier.heightIn(min = 48.dp).testTag("extension-paste-return")) { + Text("Return", fontSize = 14.sp, lineHeight = 20.sp) + } + } + val ready = offer.status == ExtensionCatalog.PasteCopyStatus.READY + if (dev.tinycast.android.LocalPaletteWide.current) { + Row(Modifier.fillMaxWidth().paletteFooterSurface().padding(20.dp), horizontalArrangement = Arrangement.spacedBy(12.dp)) { + if (ready) copyButton(Modifier.weight(1f)) + returnButton(Modifier.weight(1f)) + } + } else { + Column(Modifier.fillMaxWidth().paletteFooterSurface().padding(20.dp), verticalArrangement = Arrangement.spacedBy(12.dp)) { + if (ready) copyButton(Modifier.fillMaxWidth()) + returnButton(Modifier.fillMaxWidth()) + } + } + } +} + @Composable private fun CommandRunner(store:PaletteStore,extension:InstalledExtension,command:ExtensionCommand, runtime:ExtensionRuntime,gridImages:ExtensionGridImages,detailImages:ExtensionDetailImages,gridStates:MutableMap, @@ -462,7 +533,7 @@ private fun CommandRunner(store:PaletteStore,extension:InstalledExtension,comman catalog.launchEpoch == launchEpoch && catalog.running?.first === extension && catalog.running?.second === command val close: () -> Unit = { if (currentChrome()) closeRoute() } fun configure() { - if (currentChrome() && runtime.isCurrentInvocation()) { + if (currentChrome() && catalog.pasteCopyOffer == null && runtime.isCurrentInvocation()) { store.extensionSetupFromRun=true;store.dialog="extension-setup" } } @@ -472,17 +543,18 @@ private fun CommandRunner(store:PaletteStore,extension:InstalledExtension,comman } fun canReturnCompletedCommand(): Boolean { val running = catalog.running - return command.mode == "no-view" && currentChrome() && + return command.mode == "no-view" && currentChrome() && catalog.pasteCopyOffer == null && catalog.launchEpoch == launchEpoch && running != null && running.first === extension && running.second === command && catalog.runtimeReady && catalog.runtimeError == null && activeRoot(catalog.runtimeTree) == null && runtime.isCurrentInvocation() } fun liveRoot():JSONObject? { val running=catalog.running - if(!currentChrome() || running?.first!==extension || running?.second!==command || catalog.runtimeError!=null) return null + if(!currentChrome() || catalog.pasteCopyOffer != null || running?.first!==extension || running?.second!==command || catalog.runtimeError!=null) return null return activeRoot(catalog.runtimeTree) } val context=LocalContext.current val root=activeRoot(catalog.runtimeTree) + val pasteCopy = catalog.pasteCopyOffer?.takeIf { catalog.isCurrentPasteCopy(it) } val failed=catalog.runtimeError!=null val formSubmission = remember(runtime, root?.optString("id")) { FormSubmitPreparation() } val listState = listStates.getOrPut(root?.optString("id").orEmpty()) { ExtensionListState() } @@ -555,6 +627,7 @@ private fun CommandRunner(store:PaletteStore,extension:InstalledExtension,comman } fun back() { if (!currentChrome()) return + if (catalog.pasteCopyOffer != null) { close(); return } if (root?.optString("type") == "List" && listState.detailOnly) { listState.detailRowId = null listState.detailOnly = false @@ -565,7 +638,7 @@ private fun CommandRunner(store:PaletteStore,extension:InstalledExtension,comman if (!failed) notifyCurrentSelection() } fun defaultKeys(event: KeyEvent): Boolean = with(event) { - if(!currentChrome() || catalog.runtimeError!=null || root?.optString("type")=="Grid" || type!=KeyEventType.KeyDown)false else { + if(!currentChrome() || catalog.pasteCopyOffer!=null || catalog.runtimeError!=null || root?.optString("type")=="Grid" || type!=KeyEventType.KeyDown)false else { val eventRows=if(key in listOf(Key.DirectionDown,Key.DirectionUp)) liveRows() else emptyList() when{ key==Key.K&&isCtrlPressed->{menu=true;true} @@ -576,20 +649,22 @@ private fun CommandRunner(store:PaletteStore,extension:InstalledExtension,comman } } } - ExtensionWindow((root?.props()?.opt("navigationTitle") as? String)?.takeIf { it.isNotBlank() } ?: command.title,extension.listing.title,close, - compact=true,onEscape=::back,headerless=!failed && root?.optString("type") in listOf("Grid","List"), + ExtensionWindow((if(pasteCopy==null)root?.props()?.opt("navigationTitle") as? String else null)?.takeIf { it.isNotBlank() } ?: command.title,extension.listing.title,close, + compact=true,onEscape=::back,headerless=pasteCopy==null && !failed && root?.optString("type") in listOf("Grid","List"), keys={ event, frameFocused -> // Descendant buttons and links own their normal Enter/arrow keys. // Search receives the same list navigation explicitly below. if (frameFocused || (event.key == Key.K && event.isCtrlPressed)) defaultKeys(event) else false },headerActions={ - if(failed)TextButton(onClick=close,modifier=Modifier.testTag("extension-error-close")){Text("Close",fontSize=11.sp)} + if(failed || pasteCopy!=null)TextButton(onClick=close,modifier=Modifier.testTag("extension-error-close")){Text("Close",fontSize=11.sp)} else { if(catalog.navigationDepth>1)TextButton(onClick={if(currentChrome())runtime.back()}){Text("Back",fontSize=11.sp)} TextButton(onClick=::configure, modifier=Modifier.testTag("extension-preferences")){Text("Preferences",fontSize=11.sp)} } }){ - if(catalog.runtimeError!=null){ + if(pasteCopy!=null){ + PasteCopyFallback(catalog,pasteCopy,{ currentChrome() && !store.backupBusy },close) + }else if(catalog.runtimeError!=null){ Column(Modifier.weight(1f).padding(24.dp).verticalScroll(rememberScrollState())){Text("This command stopped",fontSize=17.sp,color=ink);Text(catalog.runtimeError!!,color=muted,fontSize=12.sp,lineHeight=19.sp,modifier=Modifier.padding(top=15.dp).testTag("extension-error"))} }else if(root==null){ Column(Modifier.weight(1f).fillMaxWidth().testTag("extension-completion")) { @@ -639,7 +714,7 @@ private fun CommandRunner(store:PaletteStore,extension:InstalledExtension,comman { runtime.formFileStorage() }, Modifier.weight(1f)) else->Text("Unsupported extension view",modifier=Modifier.weight(1f).padding(20.dp)) } - if (!failed && root?.optString("type") != "Grid") { + if (pasteCopy==null && !failed && root?.optString("type") != "Grid") { HorizontalDivider(color=line) dev.tinycast.android.PaletteFooter(metadata={ modifier -> Column(modifier) { diff --git a/app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt b/app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt new file mode 100644 index 00000000..af271824 --- /dev/null +++ b/app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt @@ -0,0 +1,68 @@ +package dev.tinycast.android + +import dev.tinycast.android.extensions.ExtensionPasteCopy +import org.json.JSONArray +import org.json.JSONObject +import org.junit.Assert.* +import org.junit.Test + +class ExtensionPasteCopyTest { + private fun request(value: Any) = ExtensionPasteCopy.parse(JSONArray().put(value).toString()) + private fun rejected(block: () -> Unit) = assertThrows(IllegalArgumentException::class.java) { block() } + + @Test fun exactUnicodeNewlinesAndEscapesCanBeConsumedOnlyOnce() { + val text = "café é 日本 🌱\n\"quoted\"\\path" + val output = request(text) + assertTrue(output.available); assertEquals(text, output.take()) + assertFalse(output.available); assertNull(output.take()) + } + @Test fun clearingDropsOutputEvenWhenTheOldCapabilityIsRetained() { + val output = request("Owned obsolete output") + output.clear(); assertFalse(output.available); assertNull(output.take()) + output.clear(); assertNull(output.take()) + } + @Test fun plainAlternativeTextDoesNotBecomeHtmlOrAFileName() { + val input = JSONObject().put("text", "Owned plain text").put("html", "not rendered") + val output = request(input); input.put("text", "later mutation") + assertEquals("Owned plain text", output.take()) + rejected { request(JSONObject().put("html", "no alternative text")) } + rejected { request(JSONObject().put("file", "/owned/not-opened")) } + rejected { request(JSONObject().put("text", "owned").put("file", "/owned/not-opened")) } + } + @Test fun numericTextAndEmptyTextHaveExplicitSupportedRepresentations() { + assertEquals("7", request(7).take()); assertEquals("1.25", request(1.25).take()) + assertEquals("1e-7", ExtensionPasteCopy.parse("[1e-7]").take()) + assertEquals("1e+21", ExtensionPasteCopy.parse("[1e+21]").take()) + assertEquals("", request("").take()) + rejected { request(JSONObject.NULL) }; rejected { request(true) }; rejected { request(JSONArray().put("not text")) } + } + @Test fun optionalWindowPreferenceDoesNotGrantAutomaticPasteOrCopy() { + for (raw in listOf("[\"owned\"]", "[\"owned\",null]", "[\"owned\",{}]", "[\"owned\",{\"closeMainWindow\":false}]")) { + val output = ExtensionPasteCopy.parse(raw); assertTrue(output.available); assertEquals("owned", output.take()) + } + rejected { ExtensionPasteCopy.parse("[\"owned\",{\"closeMainWindow\":\"yes\"}]") } + rejected { ExtensionPasteCopy.parse("[\"owned\",{\"unsupported\":true}]") } + rejected { ExtensionPasteCopy.parse("[\"owned\",{},{}]") } + } + @Test fun textAndRawRequestBoundsAreSeparateAndCheckedBeforeAllocation() { + assertEquals(ExtensionPasteCopy.MAX_TEXT_UNITS, request("x".repeat(ExtensionPasteCopy.MAX_TEXT_UNITS)).take()!!.length) + rejected { request("x".repeat(ExtensionPasteCopy.MAX_TEXT_UNITS + 1)) } + rejected { request("界".repeat(45000)) } + rejected { ExtensionPasteCopy.parse(" ".repeat(ExtensionPasteCopy.MAX_REQUEST_UNITS + 1)) } + rejected { ExtensionPasteCopy.parse("[".repeat(10000) + "]".repeat(10000)) } + } + @Test fun malformedParametersDoNotLeakRawValuesIntoErrors() { + for (raw in listOf("[{", "[/* private marker */true]", "['private marker']", "[]", "[] []", + "[unquoted]", "[{text:\"owned\"}]", "[NaN]", "[1e999]", "[01]", "[1,]")) { + val error = assertThrows(IllegalArgumentException::class.java) { ExtensionPasteCopy.parse(raw) } + assertFalse(error.message.orEmpty().contains("private marker")) + } + } + @Test fun utf8RequestBytesAreBoundedEvenWhenThePlainAlternativeIsSmall() { + rejected { request(JSONObject().put("text", "owned").put("html", "界".repeat(180000))) } + } + @Test fun unpairedSurrogatesAreRejectedWithoutChangingCombiningText() { + rejected { request("\uD800") }; rejected { request("\uDC00") } + assertEquals("é", request("é").take()) + } +} diff --git a/docs/EXTENSION-PASTE-COPY.md b/docs/EXTENSION-PASTE-COPY.md new file mode 100644 index 00000000..47bbe42a --- /dev/null +++ b/docs/EXTENSION-PASTE-COPY.md @@ -0,0 +1,88 @@ +# Explicit Copy when extension paste is unavailable + +Issue [#101](https://github.com/moikdev/droidcast/issues/101), following merged [command handoff #103](https://github.com/moikdev/droidcast/pull/103). A rejected foreground paste request now offers **Copy result instead** and **Return** in the existing palette. Nothing is copied automatically. The extension's paste Promise stays rejected, and arbitrary cross-app insertion remains unsupported. + +## Product behavior and ownership + +The native surface explains that insertion is unavailable and that the user can copy, return, and paste in their app. It takes precedence over generic extension status/error feedback. An actual Copy action consumes the private output before clipboard access, then shows **Result copied**. A system write exception produces a generic failure state without retaining output or reporting successful paste. The write-exception branch is source-covered; no induced Android clipboard-write failure is claimed here. + +The buffer is bounded, single-use memory. Its identity includes the producing runtime registration, launch epoch, extension and command. Replacement, source replacement, return, cancellation, UI disposal and actual runtime-engine disposal clear it. Old callbacks cannot consume a newer offer. A caught or uncaught extension error may leave its current native offer available while revoking the raw reviewed-input grant; this does not reauthorize the stopped JavaScript runtime. Actual disposal removes the offer. Native Copy additionally requires the current route/lifetime, attached focused window and inactive backup operation. + +Copy and Return have natural-height labels, at least 48 dp targets and 10 dp corners. Wide layouts place them side by side; narrow layouts stack them. The message scrolls separately. Enter on a focused Copy button is an explicit user action; Return, header cancellation and Escape keep their ordinary cancellation/return roles. The fallback hides the preceding editor keyboard. + +## Supported content and limits + +The [Raycast Clipboard API](https://developers.raycast.com/api-reference/clipboard) defines insertion into the frontmost application and supports string, numeric and structured content. Droidcast's fallback accepts plain strings, finite numeric text, and a plain `text` alternative in a content object. HTML is not rendered/copied as markup. HTML-only, files, arrays, booleans, raw null, unknown properties/options and malformed content are rejected without an offer. Optional `closeMainWindow` booleans grant neither automatic Copy nor insertion/dismissal. + +The raw request is limited to 512 Ki UTF-16 units / 512 KiB UTF-8, strict JSON and nesting depth four before JSON allocation. Retained text is limited to 64 Ki UTF-16 units / 128 KiB UTF-8 with valid surrogate pairs. Combining marks, emoji, quotes and newlines stay exact. Output is not persisted, logged, previewed or placed in generic exceptions. There is no new Accessibility/IME authority. All ten packaged assets, including the generated upstream runtime and notices, remain byte-identical to the prior app. + +The unchanged portable API normalizes JavaScript null into an empty plain-text object before the native boundary. A separate diagnostic witnesses `{kind: object, textType: string, textLength: 0}` without selecting Copy. Native raw-null rejection is tested through an explicitly labeled owned direct-host request. These are different protocols; no full Clipboard API conformance is inferred. + +## Device and workflow evidence + +All native runs use the dedicated **Tinycast_Tablet_API_36**, Android 16 / API 36, unprivileged app/adbd. Phone and landscape are display overrides on that emulator, not separate physical devices. + +| Profile | Physical pixels / density | App configuration | Font scales | +| --- | --- | --- | --- | +| Tablet | 1920 × 1200 / 240 dpi | 1280 × 800 dp | 100%, 200% | +| Phone | 1080 × 2340 / 420 dpi | 411 × 891 dp | 100%, 200% | +| Short landscape | 2340 × 1080 / 420 dpi | 891 × 411 dp | 100%, 200% | + +The unchanged frozen `instant-translate-paste` command reaches its real service with owned `hello` input and requests paste with text matching the observed response. The fresh sentinel remains until a pointer activates Copy. Clipboard bytes then equal that output; pointer Return restores the separate test-APK source and selection `0..5`, with source text unchanged. All six profiles pass. Each Copy/Return label has natural-height, non-ellipsized full-line witnesses and a complete 48 dp pointer target. The classification is **`partial-paste-explicit-copy-fallback`**, not successful insertion or translation-quality certification. The network observer excludes requests before attachment. + +| Phase | Tablet 100% | Phone 100% | Phone 200% | Short landscape 200% | +| --- | --- | --- | --- | --- | +| Old generic paste failure | ![Old tablet failure](screenshots/paste-copy/tablet100-before.png) | ![Old phone failure](screenshots/paste-copy/phone100-before.png) | — | — | +| Explicit pending Copy | ![Tablet pending Copy](screenshots/paste-copy/tablet100-pending.png) | ![Phone pending Copy](screenshots/paste-copy/phone100-pending.png) | ![Phone 200% pending Copy](screenshots/paste-copy/phone200-pending.png) | ![Landscape 200% pending Copy](screenshots/paste-copy/landscape200-pending.png) | +| Actual Copy destination | ![Tablet copied](screenshots/paste-copy/tablet100-copied.png) | ![Phone copied](screenshots/paste-copy/phone100-copied.png) | ![Phone 200% copied](screenshots/paste-copy/phone200-copied.png) | ![Landscape 200% copied](screenshots/paste-copy/landscape200-copied.png) | +| Original source return | ![Tablet source return](screenshots/paste-copy/tablet100-source-return.png) | ![Phone source return](screenshots/paste-copy/phone100-source-return.png) | ![Phone 200% source return](screenshots/paste-copy/phone200-source-return.png) | ![Landscape 200% source return](screenshots/paste-copy/landscape200-source-return.png) | + +The old controls use the identical `6bd62608…` instrumentation on the prior app. Both fail the intended missing **Copy result instead** assertion after independently witnessing a successful service response and matching paste attempt. They have zero JUnit passes and successful restoration. The app's old generic “Translation failed” text is not evidence of a service failure. + +## Owned protocols and affected regressions + +The `5f8875b2` harness passes thirteen owned cases on tablet and thirteen on phone: exact Unicode Copy, fresh-sentinel duplicate rejection, command/same-session replacement, new source, runtime owner isolation, window-focus loss, Return/Escape, Preferences disposal/hidden requests, uncaught paste rejection, actual IME/keyboard, recreation, invalid raw requests and portable normalization. Five enlarged-text cases remain on that exact APK; the short-landscape keyboard continuation uses the separately frozen `51de2cab` harness. These receive their own source and binary bindings. + +The Unicode output is owned fixture data, `café é 日本 🌱` plus newline and quoted text. After the actual exact Copy capture, the duplicate probe writes a separate owned sentinel and invokes retained callbacks twice. The later sentinel capture proves rejection of those retained callbacks; it is not another capture of the initial Copy. Notification counts are diagnostics only. + +Queued callback probes use retained semantics callbacks and, where recorded, a paused Compose clock. Runtime ownership isolation includes a controlled native registration/offer publication. Preferences/source changes include explicit native setup. Window-focus loss uses a real owned modal dialog, not another-app background certification. Keyboard cases pointer-focus a real editor with an open IME, reveal and activate its action, then use injected Tab, explicit RequestFocus semantics, actual Enter and Escape key pairs. They establish no physical typing or complete Tab-navigation claim. + +Forty affected regression executions in four whole cohorts exercise existing Form configuration, no-view Return, validated Unicode submit, List → Detail → exact Copy → caller return, Detail recreation, reviewed JSON/ordinary command isolation, raw-input revocation, stale-runtime/registration guards, async/sync host rejection and all eight command-handoff cases, on tablet and phone at 100%. These are owned caller regressions, not new Store certifications. The enlarged profiles remain functional/label evidence, not a complete typography/accessibility audit. + +### Short-landscape reveal diagnosis + +The original `5f8875b2` keyboard case failed before requesting paste while its old helper swiped four pixels from the rounded palette edge. Its actual failure remains retained. The original ten-cohort pipeline stopped after five passing focused cohorts and this failure; its four later regression cohorts were unrun. A separate continuation completes the required remainder. + +A matched replay uses the **same `0dc614d4…` test APK and `a5b1ccb1…` app** on both sides. At 200% with the real IME open, the palette rectangle is `[186,95,2155,313]`, corner radius `68.25 px`. The old start `[190,269.4]` lies outside the rounded shape; its swipe changes the route from `extension-run/editor` to the launcher and fails the missing-primary assertion, zero JUnit passes. The interior start `[312,269.4]` lies inside the same shape and preserves that route through four reveals, then passes actual paste/IME/Enter Copy/Escape return. Pre/post frames and route receipts accompany both. This isolates a test-gesture/backdrop interaction in the paired replay. The helper correction earns no application-repair credit, and the original unwitnessed attempt is not relabeled a pass. + +### Other historical failures + +- The first owned Unicode run copied exact bytes, then failed a one-notification assertion: **0/1**, restoration passed. Android's [clipboard service](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/android16-release/services/core/java/com/android/server/clipboard/ClipboardService.java) also broadcasts classification updates. This source mechanism does not isolate the particular observed pair's cause. Fresh sentinels replace the unsound notification-count assertion. +- The `d29139e6` cohort remains **9/11 failed** as a whole and earns zero final credit. One failure constructed an Android Dialog outside the UI thread. The other failed to observe a rejection marker; it did not retain the failing input iteration. Later source inspection established portable null normalization and motivated distinct raw-boundary/normalization protocols. It does not establish which original input caused the failed marker observation. +- The `235fe997` intermediate app has one smoke pass without selecting Copy. It earns no final-production credit. The first benchmark command omitted the project's benchmark test-build property and failed task selection before building; its failed log remains separate from the corrected successful checks. + +## Identities, accounting and preservation + +| Cohort | Production source / app SHA-256 | Instrumentation source / SHA-256 | +| --- | --- | --- | +| Six frozen workflows and two old-app controls | Current `08210fa2` / `a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b`; old `56134f31` / `2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d` | `08210fa2` / `6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86` | +| Owned full cohorts and five enlarged cases | Same current app | `5f8875b2` / `e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71` | +| Interior keyboard continuation, paired gesture control, affected regressions | Same current app | `51de2cab` / `0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f` | + +The installed current app's manifest stamp is `08210fa24674be924a6ebc93ce09b4fd170dfbc5`. Later benchmark build checks use the explicit default `local` stamp and are identified by source manifest and binary hashes, without device execution. Instrumentation APKs are distinct: the `5f8875b2` → `51de2cab` ZIP payload differences are `classes3.dex` and `classes4.dex`. No stamp-only equivalence is assumed. Production/build/JVM sources remain equal to `08210fa2`; the final three source changes are confined to the owned test, guarded Python runner and its guard tests. + +| Evidence group | Whole cohorts | Executions | JUnit passes | JUnit failures | Successful restoration checks | +| --- | ---: | ---: | ---: | ---: | ---: | +| Final current-app positives | 18 | 78 | 78 | 0 | 346 | +| Matched old-app intended negatives | 2 | 2 | 0 | 2 | 38 | +| Matched legacy gesture intended negative | 1 | 1 | 0 | 1 | 20 | +| Historical / excluded from final credit | 4 | 14 | 10 | 4 | 74 | +| All retained attempts | 25 | 95 | 88 | 7 | 478 | + +The [checkpoint](validation/paste-copy/checkpoint.json) binds **360 indexed public files plus the checkpoint, 40 actual capture triplets and 875 retained capture hashes**, historical/current source manifests and declared publication transformations. All raw XML bytes retain CRLF. Public lint XML uses XML-safe host-path redaction. Runner records use documented allowlists; private clipboard snapshots/fingerprints, preference backups, tar archives, credentials and unrelated data are excluded. The redacted collector copies document executed protocols; their placeholder paths are not executable local configuration. + +Each run retains lease ownership through independent clipboard restoration, fixture removal, preference/font/settings/geometry verification and final release. The outer same-boot checks verify **12 original durable files and 528 pre-existing evidence files**. Private originals remain local; the public report does not certify unseen data independently of those guarded receipts. No reboot/cross-boot preservation or privileged app operation is claimed. + +Local receipts support **298 JVM cases**, zero failures/errors/skips, on the frozen `08210fa2` production/JVM sources; later use is explicitly unchanged-source reuse. The current guarded Python sources pass **115 cases per normal/optimized mode**, retaining earlier 114-case receipts separately. The original debug app/test and benchmark builds pass; final instrumentation compiles both variants, with current lint **0 errors/55 warnings per variant**. No fresh Node or benchmark-device execution is claimed; all ten packaged asset bytes are independently compared with the previous app. + +Actual exact-head hosted CI, successful local status, two independent **gpt-6.1-sol/high** audits and expected-head verification remain PR merge gates. This report alone grants none of them. Cross-app insertion, arbitrary-app selection, file/rich clipboard parity, whole Store/Raycast coverage, physical/OEM, TalkBack, full keyboard navigation, production signing/migration and the unresolved #89 observation remain open. diff --git a/docs/PARITY-TRACKER.md b/docs/PARITY-TRACKER.md index 91e2f4be..7c7ddaaa 100644 --- a/docs/PARITY-TRACKER.md +++ b/docs/PARITY-TRACKER.md @@ -177,3 +177,11 @@ The [remaining frozen command observations](CONTEXT-COMMAND-WORKFLOWS.md) now gi The remaining-command observation slice merged in [PR #102](https://github.com/moikdev/droidcast/pull/102) as `517a650ddb4d1eb8509ce887b6979a06b774b625`, with the identical tree reviewed at `729f22b5`. Both independent full-change gpt-6.1-sol/high audits cleared that head; root verified exact-head Android run 41871032578 and local/android success, used the expected-head merge guard, confirmed both parents/tree equality and stopped the watch. #95/#72 remain open. The next #100 implementation begins bounded foreground same-extension launch/context and owner transfer; its new Android behavior is not yet verified. [Bounded foreground command handoff #100](EXTENSION-COMMAND-HANDOFF.md) now reaches the frozen Quick Translate child with explicit copied context and no inherited raw reviewed-input grant. The repaired `56134f31` app has 44 final positive executions across 34 whole cohorts and 654 successful restoration checks: owned lifecycle/data probes, selected 200%/landscape smoke, four configured real Quick Translate paths and affected caller regressions. Matched stale-Back/Preferences controls fail before the chrome-lifetime fix; the ordinary-setup timeout and an unexecuted legacy-evidence preflight remain distinct from their continuations. The checkpoint binds 49 real capture sets, 220 current source hashes, exact binaries and declared projections. JVM289 and Python111/mode receipts, builds and fresh lint0 errors/55 warnings support the scoped change. Hosted CI, both independent sol/high audits and expected-head merge remain gates. This clears neither full launch API/Store parity nor #95/#72; #101, #89, accessibility/OEM and signing/migration remain open. + +The bounded command-handoff slice merged in [PR #103](https://github.com/moikdev/droidcast/pull/103) as `987b78a7256e7fa3c6356f6699afc23d1f451a74`, with the identical tree independently reviewed at `ac08c700`. Root verified actual exact-head Android run 41891290088 and separate local/android success, recorded both gpt-6.1-sol/high scoped no-findings audits, merged with the expected-head guard and confirmed parents/tree equality. The watch is stopped. + +### Explicit Copy for rejected extension paste + +[Issue #101](EXTENSION-PASTE-COPY.md) now offers a bounded, invocation-owned **Copy result instead** and **Return** while keeping native paste rejected. The frozen `08210fa2` app has **78 positive executions / 18 whole cohorts / 346 successful restoration checks**: six real Translate workflows across tablet/phone/short-landscape at 100%/200%, owned Unicode/lifecycle/IME protocols and forty affected caller regressions. Two identical-instrumentation old-app controls fail at the intended missing Copy assertion. A separate common-APK replay isolates a four-pixel test gesture outside the rounded palette; its interior continuation passes without changing the app. The original failed pipeline, notification-count failure, dialog-thread failure and ambiguous invalid-input marker failure remain retained and excluded. All **95 retained attempts / 88 passes / seven failures / 478 restoration checks** keep their distinct identities. + +The checkpoint binds **360 indexed public files plus checkpoint, forty real triplets, 875 retained capture hashes and 223 current source hashes**. JVM298 uses the frozen unchanged production/JVM sources; current Python115/mode, both build variants and lint0 errors/55 warnings pass. All ten packaged assets/notices remain unchanged. Exact-head hosted CI, local status, both independent sol/high audits and an expected-head merge remain gates. `Clipboard.paste` remains partial with an explicit Copy fallback; arbitrary insertion, broader Store/platform/accessibility/OEM coverage, #89 and production signing/migration remain open. diff --git a/docs/screenshots/paste-copy/landscape100-copied.png b/docs/screenshots/paste-copy/landscape100-copied.png new file mode 100644 index 00000000..41d68fe1 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape100-copied.png differ diff --git a/docs/screenshots/paste-copy/landscape100-pending.png b/docs/screenshots/paste-copy/landscape100-pending.png new file mode 100644 index 00000000..a5bc4f57 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape100-pending.png differ diff --git a/docs/screenshots/paste-copy/landscape100-source-return.png b/docs/screenshots/paste-copy/landscape100-source-return.png new file mode 100644 index 00000000..35720db1 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape100-source-return.png differ diff --git a/docs/screenshots/paste-copy/landscape200-copied.png b/docs/screenshots/paste-copy/landscape200-copied.png new file mode 100644 index 00000000..7f06a5d9 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-copied.png differ diff --git a/docs/screenshots/paste-copy/landscape200-interior-reveal-after.png b/docs/screenshots/paste-copy/landscape200-interior-reveal-after.png new file mode 100644 index 00000000..14b83e72 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-interior-reveal-after.png differ diff --git a/docs/screenshots/paste-copy/landscape200-interior-reveal-before.png b/docs/screenshots/paste-copy/landscape200-interior-reveal-before.png new file mode 100644 index 00000000..cb9578f3 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-interior-reveal-before.png differ diff --git a/docs/screenshots/paste-copy/landscape200-keyboard-focus.png b/docs/screenshots/paste-copy/landscape200-keyboard-focus.png new file mode 100644 index 00000000..f97c1a23 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-keyboard-focus.png differ diff --git a/docs/screenshots/paste-copy/landscape200-legacy-reveal-after.png b/docs/screenshots/paste-copy/landscape200-legacy-reveal-after.png new file mode 100644 index 00000000..0852cdbf Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-legacy-reveal-after.png differ diff --git a/docs/screenshots/paste-copy/landscape200-legacy-reveal-before.png b/docs/screenshots/paste-copy/landscape200-legacy-reveal-before.png new file mode 100644 index 00000000..c57c9b8e Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-legacy-reveal-before.png differ diff --git a/docs/screenshots/paste-copy/landscape200-original-keyboard-failure.png b/docs/screenshots/paste-copy/landscape200-original-keyboard-failure.png new file mode 100644 index 00000000..e0765408 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-original-keyboard-failure.png differ diff --git a/docs/screenshots/paste-copy/landscape200-pending.png b/docs/screenshots/paste-copy/landscape200-pending.png new file mode 100644 index 00000000..b2504fcd Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-pending.png differ diff --git a/docs/screenshots/paste-copy/landscape200-source-return.png b/docs/screenshots/paste-copy/landscape200-source-return.png new file mode 100644 index 00000000..0a3804b9 Binary files /dev/null and b/docs/screenshots/paste-copy/landscape200-source-return.png differ diff --git a/docs/screenshots/paste-copy/phone100-before.png b/docs/screenshots/paste-copy/phone100-before.png new file mode 100644 index 00000000..066ed289 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-before.png differ diff --git a/docs/screenshots/paste-copy/phone100-copied.png b/docs/screenshots/paste-copy/phone100-copied.png new file mode 100644 index 00000000..4f82f10c Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-copied.png differ diff --git a/docs/screenshots/paste-copy/phone100-detail-regression.png b/docs/screenshots/paste-copy/phone100-detail-regression.png new file mode 100644 index 00000000..ad08d831 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-detail-regression.png differ diff --git a/docs/screenshots/paste-copy/phone100-form-regression.png b/docs/screenshots/paste-copy/phone100-form-regression.png new file mode 100644 index 00000000..8b960253 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-form-regression.png differ diff --git a/docs/screenshots/paste-copy/phone100-handoff-regression.png b/docs/screenshots/paste-copy/phone100-handoff-regression.png new file mode 100644 index 00000000..98aa36aa Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-handoff-regression.png differ diff --git a/docs/screenshots/paste-copy/phone100-parent-restored.png b/docs/screenshots/paste-copy/phone100-parent-restored.png new file mode 100644 index 00000000..5d3d8a1c Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-parent-restored.png differ diff --git a/docs/screenshots/paste-copy/phone100-pending.png b/docs/screenshots/paste-copy/phone100-pending.png new file mode 100644 index 00000000..78c9849d Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-pending.png differ diff --git a/docs/screenshots/paste-copy/phone100-post-copy-sentinel-probe.png b/docs/screenshots/paste-copy/phone100-post-copy-sentinel-probe.png new file mode 100644 index 00000000..5c582bb0 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-post-copy-sentinel-probe.png differ diff --git a/docs/screenshots/paste-copy/phone100-recreated.png b/docs/screenshots/paste-copy/phone100-recreated.png new file mode 100644 index 00000000..02e96793 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-recreated.png differ diff --git a/docs/screenshots/paste-copy/phone100-source-before.png b/docs/screenshots/paste-copy/phone100-source-before.png new file mode 100644 index 00000000..2ba6bff2 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-source-before.png differ diff --git a/docs/screenshots/paste-copy/phone100-source-return.png b/docs/screenshots/paste-copy/phone100-source-return.png new file mode 100644 index 00000000..2ba6bff2 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-source-return.png differ diff --git a/docs/screenshots/paste-copy/phone100-unicode-copy.png b/docs/screenshots/paste-copy/phone100-unicode-copy.png new file mode 100644 index 00000000..5c582bb0 Binary files /dev/null and b/docs/screenshots/paste-copy/phone100-unicode-copy.png differ diff --git a/docs/screenshots/paste-copy/phone200-copied.png b/docs/screenshots/paste-copy/phone200-copied.png new file mode 100644 index 00000000..6d98bc07 Binary files /dev/null and b/docs/screenshots/paste-copy/phone200-copied.png differ diff --git a/docs/screenshots/paste-copy/phone200-keyboard-focus.png b/docs/screenshots/paste-copy/phone200-keyboard-focus.png new file mode 100644 index 00000000..0354f095 Binary files /dev/null and b/docs/screenshots/paste-copy/phone200-keyboard-focus.png differ diff --git a/docs/screenshots/paste-copy/phone200-pending.png b/docs/screenshots/paste-copy/phone200-pending.png new file mode 100644 index 00000000..384a47f4 Binary files /dev/null and b/docs/screenshots/paste-copy/phone200-pending.png differ diff --git a/docs/screenshots/paste-copy/phone200-source-return.png b/docs/screenshots/paste-copy/phone200-source-return.png new file mode 100644 index 00000000..0a17dac0 Binary files /dev/null and b/docs/screenshots/paste-copy/phone200-source-return.png differ diff --git a/docs/screenshots/paste-copy/tablet100-before.png b/docs/screenshots/paste-copy/tablet100-before.png new file mode 100644 index 00000000..5d63c9cf Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-before.png differ diff --git a/docs/screenshots/paste-copy/tablet100-copied.png b/docs/screenshots/paste-copy/tablet100-copied.png new file mode 100644 index 00000000..652608cd Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-copied.png differ diff --git a/docs/screenshots/paste-copy/tablet100-new-source.png b/docs/screenshots/paste-copy/tablet100-new-source.png new file mode 100644 index 00000000..cd43b406 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-new-source.png differ diff --git a/docs/screenshots/paste-copy/tablet100-pending.png b/docs/screenshots/paste-copy/tablet100-pending.png new file mode 100644 index 00000000..ddc475b3 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-pending.png differ diff --git a/docs/screenshots/paste-copy/tablet100-source-return.png b/docs/screenshots/paste-copy/tablet100-source-return.png new file mode 100644 index 00000000..2e066dc1 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-source-return.png differ diff --git a/docs/screenshots/paste-copy/tablet100-uncaught-copy.png b/docs/screenshots/paste-copy/tablet100-uncaught-copy.png new file mode 100644 index 00000000..85e6582e Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-uncaught-copy.png differ diff --git a/docs/screenshots/paste-copy/tablet100-uncaught-offer.png b/docs/screenshots/paste-copy/tablet100-uncaught-offer.png new file mode 100644 index 00000000..608e6475 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-uncaught-offer.png differ diff --git a/docs/screenshots/paste-copy/tablet100-unicode-copy.png b/docs/screenshots/paste-copy/tablet100-unicode-copy.png new file mode 100644 index 00000000..9da545aa Binary files /dev/null and b/docs/screenshots/paste-copy/tablet100-unicode-copy.png differ diff --git a/docs/screenshots/paste-copy/tablet200-copied.png b/docs/screenshots/paste-copy/tablet200-copied.png new file mode 100644 index 00000000..d8b0f042 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet200-copied.png differ diff --git a/docs/screenshots/paste-copy/tablet200-keyboard-focus.png b/docs/screenshots/paste-copy/tablet200-keyboard-focus.png new file mode 100644 index 00000000..fdaeb333 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet200-keyboard-focus.png differ diff --git a/docs/screenshots/paste-copy/tablet200-pending.png b/docs/screenshots/paste-copy/tablet200-pending.png new file mode 100644 index 00000000..8f7a4e89 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet200-pending.png differ diff --git a/docs/screenshots/paste-copy/tablet200-source-return.png b/docs/screenshots/paste-copy/tablet200-source-return.png new file mode 100644 index 00000000..825f4790 Binary files /dev/null and b/docs/screenshots/paste-copy/tablet200-source-return.png differ diff --git a/docs/validation/paste-copy/cases/frozen-copy-landscape100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/frozen-copy-landscape100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..9566549f --- /dev/null +++ b/docs/validation/paste-copy/cases/frozen-copy-landscape100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,121 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-8d2102f0b34641768e7fc8541fca264d", + "reviewed-text-fe62152e727d4c3b918943064b65d9db", + "reviewed-text-19f30d12832b440ab8f394a0f2d2af8c" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 891, + "height_dp": 411, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": true, + "observed_phase_outcome": "partial-paste-explicit-copy-fallback", + "owned_service_output_matched_paste_attempt": true, + "paste_fallback_label_witnesses": [ + { + "tag": "extension-paste-copy", + "label": "Copy result instead", + "line_bounds": [ + [ + 539, + 844, + 853.1051, + 897 + ] + ], + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "label": "Return", + "line_bounds": [ + [ + 1116, + 844, + 1224.2856, + 897 + ] + ], + "reveal_gestures": 0 + } + ], + "context_pointer_targets": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 239, + 807, + 1154, + 933 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 239, + 807, + 2102, + 933 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + } + ], + "native_copy_was_explicit": true, + "owned_provider_output_sha256": "125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c", + "owned_provider_output_characters": 5, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "observation_collector_passed": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/frozen-copy-landscape200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/frozen-copy-landscape200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..c2c3ce54 --- /dev/null +++ b/docs/validation/paste-copy/cases/frozen-copy-landscape200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,130 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-6f169ae53761423ab228fb78f97e234f", + "reviewed-text-8142eb0eb4194578a111b680d2ce18e9", + "reviewed-text-ef8a92cd6ef14fe5ada26208504fad2c" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 2, + "width_dp": 891, + "height_dp": 411, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "other-redacted", + "ownedInputQuery": false, + "ownedJapaneseTarget": false, + "completed": true, + "transportSucceeded": true, + "status": 200 + }, + { + "sequence": 2, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": true, + "observed_phase_outcome": "partial-paste-explicit-copy-fallback", + "owned_service_output_matched_paste_attempt": true, + "paste_fallback_label_witnesses": [ + { + "tag": "extension-paste-copy", + "label": "Copy result instead", + "line_bounds": [ + [ + 399, + 842, + 992.4232, + 940 + ] + ], + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "label": "Return", + "line_bounds": [ + [ + 1068, + 842, + 1272.6154, + 940 + ] + ], + "reveal_gestures": 0 + } + ], + "context_pointer_targets": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 239, + 821, + 1154, + 961 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 239, + 821, + 2102, + 961 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + } + ], + "native_copy_was_explicit": true, + "owned_provider_output_sha256": "125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c", + "owned_provider_output_characters": 5, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "observation_collector_passed": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/frozen-copy-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/frozen-copy-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..9ff922a9 --- /dev/null +++ b/docs/validation/paste-copy/cases/frozen-copy-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,130 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-d08b7e7f194c487d8f48552402c46a7a", + "reviewed-text-b8069186816a42dea95d5bd57bc1c42a", + "reviewed-text-2a28065a2dc94359b067468d0ef0e6a5" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "other-redacted", + "ownedInputQuery": false, + "ownedJapaneseTarget": false, + "completed": true, + "transportSucceeded": true, + "status": 200 + }, + { + "sequence": 2, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": true, + "observed_phase_outcome": "partial-paste-explicit-copy-fallback", + "owned_service_output_matched_paste_attempt": true, + "paste_fallback_label_witnesses": [ + { + "tag": "extension-paste-copy", + "label": "Copy result instead", + "line_bounds": [ + [ + 382, + 1042, + 696.1051, + 1095 + ] + ], + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "label": "Return", + "line_bounds": [ + [ + 485, + 1200, + 593.2857, + 1253 + ] + ], + "reveal_gestures": 0 + } + ], + "context_pointer_targets": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + } + ], + "native_copy_was_explicit": true, + "owned_provider_output_sha256": "125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c", + "owned_provider_output_characters": 5, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "observation_collector_passed": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/frozen-copy-phone200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/frozen-copy-phone200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..a84cc656 --- /dev/null +++ b/docs/validation/paste-copy/cases/frozen-copy-phone200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,121 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-7de7855ef60b4e71a9053664dd7eb581", + "reviewed-text-e7648701db8249bca66ab428eb609969", + "reviewed-text-88885c114db14a17a4a434a0da7615c2" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 2, + "width_dp": 411, + "height_dp": 891, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": true, + "observed_phase_outcome": "partial-paste-explicit-copy-fallback", + "owned_service_output_matched_paste_attempt": true, + "paste_fallback_label_witnesses": [ + { + "tag": "extension-paste-copy", + "label": "Copy result instead", + "line_bounds": [ + [ + 243, + 1621, + 836.4232, + 1719 + ] + ], + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "label": "Return", + "line_bounds": [ + [ + 437, + 1793, + 641.61536, + 1891 + ] + ], + "reveal_gestures": 0 + } + ], + "context_pointer_targets": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1600, + 995, + 1740 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1772, + 995, + 1912 + ], + "minimum_px": 126, + "pointer_reveal_gestures": 0 + } + ], + "native_copy_was_explicit": true, + "owned_provider_output_sha256": "125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c", + "owned_provider_output_characters": 5, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "observation_collector_passed": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/frozen-copy-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/frozen-copy-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..0a70d50d --- /dev/null +++ b/docs/validation/paste-copy/cases/frozen-copy-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,130 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-a87a189e48b344aa894b78ecbd72f805", + "reviewed-text-a2e35153d09b49d2af7cf06575b3d2be", + "reviewed-text-df71a5e949d04ee2b47bb916b02b4c8a" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "other-redacted", + "ownedInputQuery": false, + "ownedJapaneseTarget": false, + "completed": true, + "transportSucceeded": true, + "status": 200 + }, + { + "sequence": 2, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": true, + "observed_phase_outcome": "partial-paste-explicit-copy-fallback", + "owned_service_output_matched_paste_attempt": true, + "paste_fallback_label_witnesses": [ + { + "tag": "extension-paste-copy", + "label": "Copy result instead", + "line_bounds": [ + [ + 598, + 869, + 780.3914, + 899 + ] + ], + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "label": "Return", + "line_bounds": [ + [ + 929, + 869, + 991.75, + 899 + ] + ], + "reveal_gestures": 0 + } + ], + "context_pointer_targets": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "pointer_reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "pointer_reveal_gestures": 0 + } + ], + "native_copy_was_explicit": true, + "owned_provider_output_sha256": "125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c", + "owned_provider_output_characters": 5, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "observation_collector_passed": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/frozen-copy-tablet200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/frozen-copy-tablet200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..37da0841 --- /dev/null +++ b/docs/validation/paste-copy/cases/frozen-copy-tablet200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,130 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-3069d45623a84c04b1cd9b1928bae062", + "reviewed-text-58ee6069563e4b0883c525de7d772230", + "reviewed-text-82a7c89d2fff40e4994ae082da689db8" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 2, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "other-redacted", + "ownedInputQuery": false, + "ownedJapaneseTarget": false, + "completed": true, + "transportSucceeded": true, + "status": 200 + }, + { + "sequence": 2, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": true, + "observed_phase_outcome": "partial-paste-explicit-copy-fallback", + "owned_service_output_matched_paste_attempt": true, + "paste_fallback_label_witnesses": [ + { + "tag": "extension-paste-copy", + "label": "Copy result instead", + "line_bounds": [ + [ + 518, + 1036, + 859.8258, + 1092 + ] + ], + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "label": "Return", + "line_bounds": [ + [ + 901, + 1036, + 1019.5, + 1092 + ] + ], + "reveal_gestures": 0 + } + ], + "context_pointer_targets": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 1024, + 951, + 1104 + ], + "minimum_px": 72, + "pointer_reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 1024, + 1493, + 1104 + ], + "minimum_px": 72, + "pointer_reveal_gestures": 0 + } + ], + "native_copy_was_explicit": true, + "owned_provider_output_sha256": "125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c", + "owned_provider_output_characters": 5, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "observation_collector_passed": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/matched-legacy-reveal-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/matched-legacy-reveal-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..cc1fa1da --- /dev/null +++ b/docs/validation/paste-copy/cases/matched-legacy-reveal-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,64 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-d73d6e427267481091bfe0aecbb62662", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 891, + "height_dp": 411, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 239, + 434, + 2102, + 629 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "actual_ime_open_before_paste": true, + "reveal_paths": [ + { + "tag": "extension-primary", + "step": 1, + "legacy_four_pixel_gutter": true, + "panel_bounds": [ + 186, + 95, + 2155, + 313 + ], + "scroll_origin": [ + 186, + 95 + ], + "scroll_size": [ + 1969, + 218 + ], + "start_in_root": [ + 190, + 269.40002 + ], + "end_in_root": [ + 190, + 138.6 + ], + "rounded_panel_radius_px": 68.25, + "start_inside_rounded_panel": false, + "legacy_start_inside_rounded_panel": false, + "dialog_before": "extension-run", + "command_before": "editor", + "dialog_after": null, + "command_after": null + } + ], + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/matched-old-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/matched-old-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..654edb76 --- /dev/null +++ b/docs/validation/paste-copy/cases/matched-old-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,74 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-4fce61e7189443c08b5b2efedb9b76b6", + "reviewed-text-a86cbf9090b84d5da583624bfae11f9b", + "reviewed-text-bb1ff6d5a1e24175a74c8bd28385a3d2" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "installed_build_commit": "56134f31f74211d7ec4d8faaf18ef5f84658242e", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "other-redacted", + "ownedInputQuery": false, + "ownedJapaneseTarget": false, + "completed": true, + "transportSucceeded": true, + "status": 200 + }, + { + "sequence": 2, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": false, + "observed_phase_outcome": "partial-paste-unsupported", + "owned_service_output_matched_paste_attempt": true, + "failure_route": "extension-run", + "failure_runtime_tree": null, + "failure_runtime_error": null, + "failure_runtime_status": "Translation failed. Please try again.", + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/matched-old-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/matched-old-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..d5ad32c6 --- /dev/null +++ b/docs/validation/paste-copy/cases/matched-old-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,74 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-da945ccdaa174743bf41a5b47113d6e0", + "reviewed-text-6d42057d321d4fe3b3433197d2c13d7f", + "reviewed-text-1d7f449b423945c7afe5800d29271b5a" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "56134f31f74211d7ec4d8faaf18ef5f84658242e", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "other-redacted", + "ownedInputQuery": false, + "ownedJapaneseTarget": false, + "completed": true, + "transportSucceeded": true, + "status": 200 + }, + { + "sequence": 2, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": false, + "observed_phase_outcome": "partial-paste-unsupported", + "owned_service_output_matched_paste_attempt": true, + "failure_route": "extension-run", + "failure_runtime_tree": null, + "failure_runtime_error": null, + "failure_runtime_status": "Translation failed. Please try again.", + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json new file mode 100644 index 00000000..5c723f07 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json @@ -0,0 +1,44 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-a3481b3e57374296b8eacc20a62ae146", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "foreign_and_unregistered_engine_disposal_rejected": true, + "publication_scope": "Controlled native owner\/offer publication with an owned buffer; not a JavaScript producer workflow", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json new file mode 100644 index 00000000..5a22c98e --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json @@ -0,0 +1,42 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-00c47ac61c9f4bd2be0c864e8cacc21b", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "invalid_request_count": 7, + "old_capability_cleared": true, + "negative_input_scope": "Owned direct host-boundary requests bypass portable Clipboard argument normalization; actual bridge\/React\/native publication follows", + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..17d55293 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-8cf6fc54902242418aa37f6038587490", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 85, + 368, + 995, + 515 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "actual_ime_open_before_paste": true, + "actual_ime_hidden_for_fallback": true, + "focused_enter_copied_exactly": true, + "focus_setup": "Instrumentation Tab enters keyboard mode, then RequestFocus semantics; Enter\/Escape are actual injected key pairs, not physical typing", + "passed": true, + "clipboard_notifications": 2, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json new file mode 100644 index 00000000..42939c83 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-7d02bfecbe394b4d819c11b6ca65c26b", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "unfocused_retained_copy_rejected": true, + "focus_scope": "Real owned modal window removes command-window focus; this is not another-app background certification", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-pointercopyisexactonceandreturns-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-pointercopyisexactonceandreturns-record.json new file mode 100644 index 00000000..723fd42e --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-pointercopyisexactonceandreturns-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-9dc5f5273e274bc98f016039e7ab971c", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 4, + "duplicate_after_copy_rejected": true, + "duplicate_probe_setup": "After the real exact Copy, a separate owned sentinel is written; retained callbacks must leave it unchanged. Listener notifications are diagnostics, not native write counts.", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json new file mode 100644 index 00000000..e134ac46 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json @@ -0,0 +1,45 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-e183b77b7ac142b0931aa10df85ab71c", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "portable_null_native_metadata": { + "kind": "object", + "textType": "string", + "textLength": 0 + }, + "normalization_scope": "Untouched portable API normalizes null to an empty plain text object before native validation; no Copy is selected and no full API conformance is certified", + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json new file mode 100644 index 00000000..e94aaa5d --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json @@ -0,0 +1,78 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-3589e98b78604ff987ca3d0006440bca", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "hidden_route_rejected": true, + "disposed_old_copy_rejected_after_route_return": true, + "route_setup": "Controlled native Preferences route replaces pending body; no pointer-navigation claim for that transition", + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json new file mode 100644 index 00000000..4cf602fd --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json @@ -0,0 +1,66 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-cd1f35f63447422c89b33e37fc1127d4", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "new_native_publication_after_recreation": true, + "old_buffer_cleared": true, + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json new file mode 100644 index 00000000..1a384e62 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json @@ -0,0 +1,65 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-cd3df1db619c46419bd0b02223a2211a", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "queued_replaced_copy_rejected": true, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json new file mode 100644 index 00000000..0a9557cc --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json @@ -0,0 +1,51 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-2684015d96ee4963b6c2b38c54fe6773", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "return_and_escape_cancelled_without_copy": true, + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json new file mode 100644 index 00000000..a82747b3 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-c5babafff5584c06b155fc76f0ddadd1", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "13d5dff5ab881ada3888d97969035b60702e4073f849b097436758fd46bbd5bb", + "clipboard_notifications": 2, + "same_session_old_output_rejected": true, + "protocol_setup": "Compose clock paused for replacement\/old-callback assertions; actual current pointer Copy follows", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json new file mode 100644 index 00000000..cc88c156 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json @@ -0,0 +1,29 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-e3ef78bdd5c146d3865c81be3b51f1c6", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "new_source_cleared_old_buffer": true, + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json new file mode 100644 index 00000000..b2c3e46b --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-0c92ebee455c4113870a09c8f8fab672", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1005, + 995, + 1131 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "paste_promise_never_resolved": true, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-closingotherenginescannotclearthecurrentowner-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-closingotherenginescannotclearthecurrentowner-record.json new file mode 100644 index 00000000..b70533a3 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-closingotherenginescannotclearthecurrentowner-record.json @@ -0,0 +1,44 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-a85a64f64a3b4cdb88b1735298294205", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "foreign_and_unregistered_engine_disposal_rejected": true, + "publication_scope": "Controlled native owner\/offer publication with an owned buffer; not a JavaScript producer workflow", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json new file mode 100644 index 00000000..313ac82b --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json @@ -0,0 +1,27 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-534f7a81b37a4c36acd269d5a398a19a", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..e7b1b3e1 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-32d684bbb2e440edb835c08feca2f790", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 428, + 392, + 1493, + 476 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 552, + 1322, + 624 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "actual_ime_open_before_paste": true, + "actual_ime_hidden_for_fallback": true, + "focused_enter_copied_exactly": true, + "focus_setup": "Instrumentation Tab enters keyboard mode, then RequestFocus semantics; Enter\/Escape are actual injected key pairs, not physical typing", + "passed": true, + "clipboard_notifications": 2, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-losingwindowfocusrejectsretainedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-losingwindowfocusrejectsretainedcopy-record.json new file mode 100644 index 00000000..dab28cb0 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-losingwindowfocusrejectsretainedcopy-record.json @@ -0,0 +1,27 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-4c2070941a4845c7a88c7d48496b0f7b", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-pointercopyisexactonceandreturns-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-pointercopyisexactonceandreturns-record.json new file mode 100644 index 00000000..a2e1788a --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-pointercopyisexactonceandreturns-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-b367d4ca8d0749ffa4fce32f5825718f", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 4, + "duplicate_after_copy_rejected": true, + "duplicate_probe_setup": "After the real exact Copy, a separate owned sentinel is written; retained callbacks must leave it unchanged. Listener notifications are diagnostics, not native write counts.", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json new file mode 100644 index 00000000..6ebaa9a5 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json @@ -0,0 +1,78 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-6398a49e408143da98eb318d5fdd080a", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "hidden_route_rejected": true, + "disposed_old_copy_rejected_after_route_return": true, + "route_setup": "Controlled native Preferences route replaces pending body; no pointer-navigation claim for that transition", + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-recreationclearsthebufferanddisposedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-recreationclearsthebufferanddisposedcopy-record.json new file mode 100644 index 00000000..1060d60d --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-recreationclearsthebufferanddisposedcopy-record.json @@ -0,0 +1,66 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-6de80683236e45779513dd03c0ea8d69", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "new_native_publication_after_recreation": true, + "old_buffer_cleared": true, + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json new file mode 100644 index 00000000..55e070c0 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json @@ -0,0 +1,65 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-9eecc1972e2248b9a2fbaa624ecd03fb", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "queued_replaced_copy_rejected": true, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-returnandescapecancelwithoutcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-returnandescapecancelwithoutcopy-record.json new file mode 100644 index 00000000..69ad2502 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-returnandescapecancelwithoutcopy-record.json @@ -0,0 +1,51 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-c5f04d360e314a569dd156eac45fab4d", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 969, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "return_and_escape_cancelled_without_copy": true, + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json new file mode 100644 index 00000000..dbb05c6b --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-788d99c80e9a4e95b6482be7be42b489", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "13d5dff5ab881ada3888d97969035b60702e4073f849b097436758fd46bbd5bb", + "clipboard_notifications": 2, + "same_session_old_output_rejected": true, + "protocol_setup": "Compose clock paused for replacement\/old-callback assertions; actual current pointer Copy follows", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json new file mode 100644 index 00000000..2c7e768b --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-212a148919c84452bf98f15b1bca0243", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "paste_promise_never_resolved": true, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json new file mode 100644 index 00000000..7fb1ae8d --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json @@ -0,0 +1,44 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-2398d6a516fd4ddcb28896c20c3074f6", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "foreign_and_unregistered_engine_disposal_rejected": true, + "publication_scope": "Controlled native owner\/offer publication with an owned buffer; not a JavaScript producer workflow", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json new file mode 100644 index 00000000..83970e00 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json @@ -0,0 +1,42 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-b06d2da7d8d6423baa2efebdcdc1c671", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "invalid_request_count": 7, + "old_capability_cleared": true, + "negative_input_scope": "Owned direct host-boundary requests bypass portable Clipboard argument normalization; actual bridge\/React\/native publication follows", + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..d0fb04e9 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-b74cadb85ebe433c9471bbaaa567e2a2", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 428, + 392, + 1493, + 476 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 552, + 1322, + 624 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "actual_ime_open_before_paste": true, + "actual_ime_hidden_for_fallback": true, + "focused_enter_copied_exactly": true, + "focus_setup": "Instrumentation Tab enters keyboard mode, then RequestFocus semantics; Enter\/Escape are actual injected key pairs, not physical typing", + "passed": true, + "clipboard_notifications": 2, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json new file mode 100644 index 00000000..6051b27a --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-3fb4333e88b242be951e9a4f618c95b2", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "unfocused_retained_copy_rejected": true, + "focus_scope": "Real owned modal window removes command-window focus; this is not another-app background certification", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-pointercopyisexactonceandreturns-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-pointercopyisexactonceandreturns-record.json new file mode 100644 index 00000000..e69de179 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-pointercopyisexactonceandreturns-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-eb89269cdd6040a6aa52e0c866010857", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 4, + "duplicate_after_copy_rejected": true, + "duplicate_probe_setup": "After the real exact Copy, a separate owned sentinel is written; retained callbacks must leave it unchanged. Listener notifications are diagnostics, not native write counts.", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json new file mode 100644 index 00000000..706450d1 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json @@ -0,0 +1,45 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-bdc94c64a7dc4039b23110e6f321b383", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 969, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "portable_null_native_metadata": { + "kind": "object", + "textType": "string", + "textLength": 0 + }, + "normalization_scope": "Untouched portable API normalizes null to an empty plain text object before native validation; no Copy is selected and no full API conformance is certified", + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json new file mode 100644 index 00000000..efda02e4 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json @@ -0,0 +1,78 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-0b17fb5a3753494fac60b650dc5718bb", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "hidden_route_rejected": true, + "disposed_old_copy_rejected_after_route_return": true, + "route_setup": "Controlled native Preferences route replaces pending body; no pointer-navigation claim for that transition", + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json new file mode 100644 index 00000000..dd22e606 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json @@ -0,0 +1,66 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-8809d849d5b14f26a3ad1b590baa1f0f", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "new_native_publication_after_recreation": true, + "old_buffer_cleared": true, + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json new file mode 100644 index 00000000..d396fb02 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json @@ -0,0 +1,65 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-439fc45d52974c3d9d8e04805df4b4fa", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "queued_replaced_copy_rejected": true, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json new file mode 100644 index 00000000..6a44730d --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json @@ -0,0 +1,51 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-16e05762cdeb460da08c6ff8d527f660", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 969, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "return_and_escape_cancelled_without_copy": true, + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json new file mode 100644 index 00000000..6714c1a5 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-5d6b840fc63b4e428243dc9b728474af", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "13d5dff5ab881ada3888d97969035b60702e4073f849b097436758fd46bbd5bb", + "clipboard_notifications": 2, + "same_session_old_output_rejected": true, + "protocol_setup": "Compose clock paused for replacement\/old-callback assertions; actual current pointer Copy follows", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json new file mode 100644 index 00000000..5cd72a2f --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json @@ -0,0 +1,29 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-45e1b5c2606e40e49e67948fde485546", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "new_source_cleared_old_buffer": true, + "passed": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json new file mode 100644 index 00000000..0fd1f09e --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-e33b8e5657054755be4db264ad2fdb42", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 2, + "paste_promise_never_resolved": true, + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-keyboard-landscape200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/owned-keyboard-landscape200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..a8eb9630 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-keyboard-landscape200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,28 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-57209c5afbe84b2486b205bbac14c460", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 891, + "height_dp": 411, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 239, + 434, + 2102, + 629 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "actual_ime_open_before_paste": true, + "clipboard_notifications": 0, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-keyboard-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/owned-keyboard-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..c9f6d081 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-keyboard-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,181 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-2b36225dc35c4f3f839a9fb836b131e0", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 891, + "height_dp": 411, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 239, + 434, + 2102, + 629 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1031, + 144, + 1820, + 297 + ], + "minimum_px": 126, + "reveal_gestures": 4 + } + ], + "actual_ime_open_before_paste": true, + "reveal_paths": [ + { + "tag": "extension-primary", + "step": 1, + "legacy_four_pixel_gutter": false, + "panel_bounds": [ + 186, + 95, + 2155, + 313 + ], + "scroll_origin": [ + 186, + 95 + ], + "scroll_size": [ + 1969, + 218 + ], + "start_in_root": [ + 312, + 269.40002 + ], + "end_in_root": [ + 312, + 138.6 + ], + "rounded_panel_radius_px": 68.25, + "start_inside_rounded_panel": true, + "legacy_start_inside_rounded_panel": false, + "dialog_before": "extension-run", + "command_before": "editor", + "dialog_after": "extension-run", + "command_after": "editor" + }, + { + "tag": "extension-primary", + "step": 2, + "legacy_four_pixel_gutter": false, + "panel_bounds": [ + 186, + 95, + 2155, + 313 + ], + "scroll_origin": [ + 186, + 95 + ], + "scroll_size": [ + 1969, + 218 + ], + "start_in_root": [ + 312, + 269.40002 + ], + "end_in_root": [ + 312, + 138.6 + ], + "rounded_panel_radius_px": 68.25, + "start_inside_rounded_panel": true, + "legacy_start_inside_rounded_panel": false, + "dialog_before": "extension-run", + "command_before": "editor", + "dialog_after": "extension-run", + "command_after": "editor" + }, + { + "tag": "extension-primary", + "step": 3, + "legacy_four_pixel_gutter": false, + "panel_bounds": [ + 186, + 95, + 2155, + 313 + ], + "scroll_origin": [ + 186, + 95 + ], + "scroll_size": [ + 1969, + 218 + ], + "start_in_root": [ + 312, + 269.40002 + ], + "end_in_root": [ + 312, + 138.6 + ], + "rounded_panel_radius_px": 68.25, + "start_inside_rounded_panel": true, + "legacy_start_inside_rounded_panel": false, + "dialog_before": "extension-run", + "command_before": "editor", + "dialog_after": "extension-run", + "command_after": "editor" + }, + { + "tag": "extension-primary", + "step": 4, + "legacy_four_pixel_gutter": false, + "panel_bounds": [ + 186, + 95, + 2155, + 313 + ], + "scroll_origin": [ + 186, + 95 + ], + "scroll_size": [ + 1969, + 218 + ], + "start_in_root": [ + 312, + 269.40002 + ], + "end_in_root": [ + 312, + 138.6 + ], + "rounded_panel_radius_px": 68.25, + "start_inside_rounded_panel": true, + "legacy_start_inside_rounded_panel": false, + "dialog_before": "extension-run", + "command_before": "editor", + "dialog_after": "extension-run", + "command_after": "editor" + } + ], + "actual_ime_hidden_for_fallback": true, + "focused_enter_copied_exactly": true, + "focus_setup": "Instrumentation Tab enters keyboard mode, then RequestFocus semantics; Enter\/Escape are actual injected key pairs, not physical typing", + "passed": true, + "clipboard_notifications": 2, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-keyboard-phone200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/owned-keyboard-phone200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..d60c446c --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-keyboard-phone200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-87b96bbd030d4f89b7003b4ecf283117", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 85, + 434, + 995, + 629 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 53, + 1174, + 713, + 1327 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "actual_ime_open_before_paste": true, + "actual_ime_hidden_for_fallback": true, + "focused_enter_copied_exactly": true, + "focus_setup": "Instrumentation Tab enters keyboard mode, then RequestFocus semantics; Enter\/Escape are actual injected key pairs, not physical typing", + "passed": true, + "clipboard_notifications": 2, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-keyboard-tablet200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json b/docs/validation/paste-copy/cases/owned-keyboard-tablet200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json new file mode 100644 index 00000000..3c586188 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-keyboard-tablet200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json @@ -0,0 +1,43 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-dcdf9da04334426a9f4d7f46c183a742", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-field-owned-input", + "bounds": [ + 428, + 430, + 1493, + 541 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 881, + 533, + 1333, + 621 + ], + "minimum_px": 72, + "reveal_gestures": 1 + } + ], + "actual_ime_open_before_paste": true, + "actual_ime_hidden_for_fallback": true, + "focused_enter_copied_exactly": true, + "focus_setup": "Instrumentation Tab enters keyboard mode, then RequestFocus semantics; Enter\/Escape are actual injected key pairs, not physical typing", + "passed": true, + "clipboard_notifications": 2, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-unicode-landscape200-v6/pastecopy-pointercopyisexactonceandreturns-record.json b/docs/validation/paste-copy/cases/owned-unicode-landscape200-v6/pastecopy-pointercopyisexactonceandreturns-record.json new file mode 100644 index 00000000..b17f4cd4 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-unicode-landscape200-v6/pastecopy-pointercopyisexactonceandreturns-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-9c1710c055bf44469ba87c2d7edbb80b", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 891, + "height_dp": 411, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1031, + 817, + 1820, + 970 + ], + "minimum_px": 126, + "reveal_gestures": 1 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 239, + 793, + 1154, + 933 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 239, + 793, + 2102, + 933 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 4, + "duplicate_after_copy_rejected": true, + "duplicate_probe_setup": "After the real exact Copy, a separate owned sentinel is written; retained callbacks must leave it unchanged. Listener notifications are diagnostics, not native write counts.", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-unicode-phone200-v6/pastecopy-pointercopyisexactonceandreturns-record.json b/docs/validation/paste-copy/cases/owned-unicode-phone200-v6/pastecopy-pointercopyisexactonceandreturns-record.json new file mode 100644 index 00000000..877f7959 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-unicode-phone200-v6/pastecopy-pointercopyisexactonceandreturns-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-f9b4a1a6b47c4cde9d8a5559f932fc4c", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1796, + 713, + 1949 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 85, + 1600, + 995, + 1740 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 85, + 1772, + 995, + 1912 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 4, + "duplicate_after_copy_rejected": true, + "duplicate_probe_setup": "After the real exact Copy, a separate owned sentinel is written; retained callbacks must leave it unchanged. Listener notifications are diagnostics, not native write counts.", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-unicode-tablet100-v3/pastecopy-pointercopyisexactonceandreturns-record.json b/docs/validation/paste-copy/cases/owned-unicode-tablet100-v3/pastecopy-pointercopyisexactonceandreturns-record.json new file mode 100644 index 00000000..a457496c --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-unicode-tablet100-v3/pastecopy-pointercopyisexactonceandreturns-record.json @@ -0,0 +1,38 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-ed0a5ec5ba084f988275392a7699755e", + "fixture_parent_sha256": "c769353e6e4da8cbe4d9c1927f81a5a97f531b5c73415ce87c92f2e1a0f61847", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1084, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 848, + 951, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "clipboard_writes": 2, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/owned-unicode-tablet200-v6/pastecopy-pointercopyisexactonceandreturns-record.json b/docs/validation/paste-copy/cases/owned-unicode-tablet200-v6/pastecopy-pointercopyisexactonceandreturns-record.json new file mode 100644 index 00000000..e711e359 --- /dev/null +++ b/docs/validation/paste-copy/cases/owned-unicode-tablet200-v6/pastecopy-pointercopyisexactonceandreturns-record.json @@ -0,0 +1,55 @@ +{ + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-bd46f2f35ffc42d7aa7fa8cd6d6ab1df", + "fixture_parent_sha256": "9017ee80e4139cbbe46890b1f1bd1292b3b1c9bf3bce4512151f8898337293b8", + "fixture_crash_sha256": "993152e72f9fcbe602713ebf5e157406d8b3b9c67d2bb52f0811bf45d73702f8", + "fixture_manifest_sha256": "31eaca8f22c4b4072b6070709585431958fe125d322eeec1dab3c4c6d7d06ab2", + "font_scale": 2, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 881, + 1037, + 1333, + 1125 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-copy", + "bounds": [ + 428, + 1024, + 951, + 1104 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-paste-return", + "bounds": [ + 428, + 1024, + 1493, + 1104 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "copy_exact": true, + "owned_output_sha256": "e79de81ff75f01cb25c057e7760b32e44d1d54e74d404a045a488959aa1d075f", + "clipboard_notifications": 4, + "duplicate_after_copy_rejected": true, + "duplicate_probe_setup": "After the real exact Copy, a separate owned sentinel is written; retained callbacks must leave it unchanged. Listener notifications are diagnostics, not native write counts.", + "passed": true, + "launcher_query_preserved": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/paste-pending-tablet100-v1/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json b/docs/validation/paste-copy/cases/paste-pending-tablet100-v1/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json new file mode 100644 index 00000000..762267ca --- /dev/null +++ b/docs/validation/paste-copy/cases/paste-pending-tablet100-v1/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json @@ -0,0 +1,90 @@ +{ + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-7903a320a30b40a8bd827c672ca013d0", + "reviewed-text-a51b6730a05748e08bb0ea4f0d421947", + "reviewed-text-a6c63a16b3464044ac2877be3511e0be" + ], + "executed_command": "instant-translate-paste", + "translation_archive_sha256": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2", + "translation_command_sha256": "0ff7fcfdd0c6d1adb8b229b038ffe9fc9b26b47fb4b30543a6b4cf48892688dd", + "translation_preferences": { + "langFrom": "en", + "lang1": "ja", + "lang2": "en", + "autoInput": false, + "defaultAction": "copy", + "prioritizeCrossLanguage": false, + "proxy": "" + }, + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "235fe997aa5a0d07a3b535abc3d406ef93c52d44", + "preview_no_execution_and_clipboard_unchanged": true, + "startup_gate": "Compose-driven wait for native List, JavaScript engine or runtime error", + "network_observation": { + "errors": 0, + "overflow": 0, + "decodeErrors": 0, + "requests": [ + { + "sequence": 1, + "endpoint": "other-redacted", + "ownedInputQuery": false, + "ownedJapaneseTarget": false, + "completed": true, + "transportSucceeded": true, + "status": 200 + }, + { + "sequence": 2, + "endpoint": "google-translate", + "ownedInputQuery": true, + "ownedJapaneseTarget": true, + "completed": true, + "transportSucceeded": true, + "status": 200 + } + ], + "pasteRejected": true + }, + "network_observer_scope": "Only subsequent requests; known owned response translation decoded for native output\/Copy equality; unrelated payloads, queries, headers and bodies are not retained", + "observation_deadline_reached": false, + "runtime_status": "Translation failed. Please try again.", + "copy_exact": false, + "observed_phase_outcome": "partial-paste-unsupported", + "owned_service_output_matched_paste_attempt": true, + "owned_provider_output_sha256": "125aeadf27b0459b8760c13a3d80912dfa8a81a68261906f60d87f4a0268646c", + "owned_provider_output_characters": 5, + "context_pointer_targets": [ + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "pointer_reveal_gestures": 0 + } + ], + "workflow_outcome": "partial-paste-unsupported", + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "observation_collector_passed": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json new file mode 100644 index 00000000..fe0ee715 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json @@ -0,0 +1,94 @@ +{ + "scope": "Owned React Markdown\/metadata through the real runtime and native UI; not Store or service certification", + "clipboard-before-owned-sentinel": { + "observations": [ + "12ms query_ms=11 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "80ms query_ms=18 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "134ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "189ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "283ms query_ms=43 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "340ms query_ms=6 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "395ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "457ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "516ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "581ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "640ms query_ms=6 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "703ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "771ms query_ms=18 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]" + ], + "actions": [] + }, + "clipboard-owned-sentinel": { + "observations": [ + "233ms query_ms=232 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "330ms query_ms=32 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "397ms query_ms=16 mode=0 flags=65618 windows=[(8113, 3), (8082, 3)] systemui_roots=[8113] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=false actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "533ms query_ms=70 mode=0 flags=65618 windows=[(8113, 3), (8082, 3)] systemui_roots=[8082] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=false actions=1 nodes=[]", + "590ms query_ms=6 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "664ms query_ms=24 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "723ms query_ms=8 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "798ms query_ms=12 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "853ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]" + ], + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ] + }, + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "list", + "fixture_command_sha256": "7682a7e605e5da169bc4809047f490da7f87b3ebb30b4378b74ded04302dc790", + "fixture_manifest_sha256": "f8f5c5f83969cb94f57edd76779ac5ad976d465f06acdb607befefac885d10e6", + "owned_extension_id": "reviewed-text-91033c91e90240b3a5da2cd1ef7f5f75", + "owned_png_sha256": "9d6eb0bb52ca2b690f4d60646c909d3f54e18e7ce4ea7181a774c898e56ef5f0", + "owned_svg_sha256": "3995c224db43ff143e50bf2b81db937d947678d54a7650a5e02b7c86c4301489", + "publication_witnesses": [ + { + "phase": "initial", + "counter": 0, + "root_id": "31", + "root_type": "List", + "composed_marker_text": "Detail publication 0", + "semantics_id": 1103 + } + ], + "axis_aware_scrolls": [], + "list_search_actual_ime_open": true, + "primary_ime_geometry": { + "bottom": 1326, + "visible_frame_bottom": 1374 + }, + "ime_toggle_contract_started": true, + "last_native_text_wait": "Owned value beta A", + "clipboard-exact-copy": { + "observations": [ + "159ms query_ms=158 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "287ms query_ms=66 mode=0 flags=65618 windows=[(8114, 3), (8082, 3)] systemui_roots=[8114] queries=10 roots=1 children=9 walked=8 prefetch=36 complete=false require_action=false actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "397ms query_ms=6 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "452ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "509ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "563ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "617ms query_ms=3 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "672ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "730ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "799ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]" + ], + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ] + }, + "exact_copy": "Owned exact copy beta café é 日本 🌱", + "query_selection_and_caller_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "image_history_process_property_restored": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json new file mode 100644 index 00000000..e9723026 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json @@ -0,0 +1,104 @@ +{ + "scope": "Owned React Markdown\/metadata through the real runtime and native UI; not Store or service certification", + "clipboard-before-owned-sentinel": { + "observations": [ + "38ms query_ms=27 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "95ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "162ms query_ms=16 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "231ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "286ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "345ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "400ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "461ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "520ms query_ms=8 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "580ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "635ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "690ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "748ms query_ms=3 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "807ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]" + ], + "actions": [] + }, + "clipboard-owned-sentinel": { + "observations": [ + "130ms query_ms=130 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "193ms query_ms=13 mode=0 flags=65618 windows=[(8118, 3), (8082, 3)] systemui_roots=[8118] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=false actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "271ms query_ms=23 mode=0 flags=65618 windows=[(8118, 3), (8082, 3)] systemui_roots=[8082] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=false actions=1 nodes=[]", + "329ms query_ms=8 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "396ms query_ms=15 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "458ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "522ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "577ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "632ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "687ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "741ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "797ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]" + ], + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ] + }, + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "detail", + "fixture_command_sha256": "ff7e24a4c563b94aa4a73404d9bc89c80cb81afe37e89c76e19df55507f84082", + "fixture_manifest_sha256": "f8f5c5f83969cb94f57edd76779ac5ad976d465f06acdb607befefac885d10e6", + "owned_extension_id": "reviewed-text-19925bb3f12c48459d8297ccd0c02186", + "owned_png_sha256": "9d6eb0bb52ca2b690f4d60646c909d3f54e18e7ce4ea7181a774c898e56ef5f0", + "owned_svg_sha256": "3995c224db43ff143e50bf2b81db937d947678d54a7650a5e02b7c86c4301489", + "publication_witnesses": [ + { + "phase": "initial", + "counter": 0, + "root_id": "13", + "root_type": "Detail", + "composed_marker_text": "Detail publication 0", + "semantics_id": 1297 + }, + { + "phase": "recreated", + "counter": 0, + "root_id": "13", + "root_type": "Detail", + "composed_marker_text": "Detail publication 0", + "semantics_id": 1382 + }, + { + "phase": "fresh-owner-activation", + "counter": 1, + "root_id": "13", + "root_type": "Detail", + "composed_marker_text": "Detail publication 1", + "semantics_id": 1382 + } + ], + "last_native_text_wait": "Owned tag standalone", + "axis_aware_scrolls": [], + "queued_callbacks": [ + { + "phase": "activity-recreation", + "before": { + "revision": 0, + "tagCalls": 0, + "selected": null, + "unexpectedLink": false + }, + "after": { + "revision": 0, + "tagCalls": 0, + "selected": null, + "unexpectedLink": false + }, + "dispatch_rejected": true + } + ], + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "image_history_process_property_restored": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json new file mode 100644 index 00000000..3705e9d5 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json @@ -0,0 +1,118 @@ +{ + "scope": "Owned React Form through the real runtime and Android controls; not Store\/service certification", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "window_soft_input_mode": 16, + "window_soft_input_state": 0, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "submit-validation", + "fixture_command_sha256": "1061be9daf9e9410263d56cad887e5d72ae9115f804e4499c26423312fa7b0dd", + "fixture_manifest_sha256": "fbf51abc5c67fe0ed96200fe6b60c2313965a3e18052688af83f784bfb29b4a0", + "owned_extension_id": "reviewed-text-ec1cf335218846308a58d6f0dbadd313", + "settled_ime_geometry": [ + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 2277 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 1, + 966, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 1374 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 1, + 966, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 1374 + ], + "stable_for_at_least_ms": 100, + "settled": true + } + ], + "viewport_reveal_gestures": [], + "pointer_taps": [ + { + "tag": "extension-field-name", + "viewport": "extension-form", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 824, + "visible_bounds": [ + 85, + 368, + 995, + 515 + ], + "control_size": [ + 910, + 147 + ], + "point": [ + 540, + 441.5 + ] + }, + { + "tag": "extension-primary", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 824, + "visible_bounds": [ + 53, + 1200, + 826, + 1326 + ], + "control_size": [ + 773, + 126 + ], + "point": [ + 439.5, + 1263 + ] + } + ], + "exact_valid_unicode_once": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json new file mode 100644 index 00000000..101bec47 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json @@ -0,0 +1,691 @@ +{ + "scope": "Owned React Form through the real runtime and Android controls; not Store\/service certification", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "window_soft_input_mode": 16, + "window_soft_input_state": 0, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "configuration", + "fixture_command_sha256": "e08bae2f6447a8b88fbf631a2e5e6dabb9b546fff529839fd5ed450f419667d0", + "fixture_manifest_sha256": "ff2d7e3a9e7cd92c0afc8bd1b3bc30081085347d57852267be44529ae5e89c6d", + "owned_extension_id": "reviewed-text-98d810edd9944a66be4d8565855af2f1", + "settled_ime_geometry": [ + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 2277 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 1, + 966, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 1374 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": false, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 0, + 0, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 2277 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 2277 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 1, + 966, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 1374 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 1, + 966, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 1374 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 1, + 966, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 1374 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 2277 + ], + "stable_for_at_least_ms": 100, + "settled": true + } + ], + "viewport_reveal_gestures": [], + "pointer_taps": [ + { + "tag": "preference-secret", + "viewport": "extension-configuration", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 85, + 963, + 995, + 1110 + ], + "control_size": [ + 910, + 147 + ], + "point": [ + 540, + 1036.5 + ] + }, + { + "tag": "run-extension-setup", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 85, + 1163, + 995, + 1289 + ], + "control_size": [ + 910, + 126 + ], + "point": [ + 540, + 1226 + ] + }, + { + "tag": "extension-back", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 32, + 106, + 158, + 232 + ], + "control_size": [ + 126, + 126 + ], + "point": [ + 95, + 169 + ] + }, + { + "tag": "preference-choice-layout", + "viewport": "extension-configuration", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 85, + 984, + 995, + 1110 + ], + "control_size": [ + 910, + 126 + ], + "point": [ + 540, + 1047 + ] + }, + { + "tag": "run-extension-setup", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 85, + 1163, + 995, + 1289 + ], + "control_size": [ + 910, + 126 + ], + "point": [ + 540, + 1226 + ] + }, + { + "tag": "extension-back", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 32, + 106, + 158, + 232 + ], + "control_size": [ + 126, + 126 + ], + "point": [ + 95, + 169 + ] + } + ], + "hidden_ime_window_absence_confirmed": true, + "password_editor_metadata": [ + { + "tag": "preference-secret", + "input_type": 129, + "ime_options": 33554438, + "scope": "Actual focused editor InputConnection metadata before any password is entered" + } + ], + "pointer_scrolls": [ + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 32, + 246, + 1048, + 1110 + ], + "start": [ + 21, + 432 + ], + "end": [ + 21, + 648 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 32, + 246, + 1048, + 1110 + ], + "start": [ + 21, + 432 + ], + "end": [ + 21, + 648 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 32, + 246, + 1048, + 1110 + ], + "start": [ + 21, + 432 + ], + "end": [ + 21, + 648 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 32, + 246, + 1048, + 1110 + ], + "start": [ + 21, + 432 + ], + "end": [ + 21, + 216 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 32, + 246, + 1048, + 1110 + ], + "start": [ + 21, + 432 + ], + "end": [ + 21, + 216 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 32, + 246, + 1048, + 1110 + ], + "start": [ + 21, + 432 + ], + "end": [ + 21, + 216 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 32, + 246, + 1048, + 1110 + ], + "start": [ + 21, + 432 + ], + "end": [ + 21, + 216 + ] + } + ], + "configuration-required_line_probe": { + "ime_visible": false, + "line_counts": [ + 1, + 1, + 1, + 1, + 2, + 1 + ], + "all_lines_reached": true, + "pointer_steps": [ + { + "viewport": [ + 32, + 246, + 1048, + 1110 + ], + "text_0": [ + 85, + 299, + 995, + 352 + ], + "text_0_lines_seen": 1, + "text_1": [ + 85, + 626, + 995, + 679 + ], + "text_1_lines_seen": 1, + "text_2": [ + 85, + 531, + 995, + 584 + ], + "text_2_lines_seen": 1, + "text_3": [ + 85, + 858, + 995, + 911 + ], + "text_3_lines_seen": 1, + "text_4": [ + 85, + 927, + 995, + 1033 + ], + "text_4_lines_seen": 2, + "text_5": [ + 85, + 1809, + 917, + 1862 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 32, + 246, + 1048, + 1110 + ], + "text_0": [ + 85, + 104, + 995, + 157 + ], + "text_0_lines_seen": 1, + "text_1": [ + 85, + 431, + 995, + 484 + ], + "text_1_lines_seen": 1, + "text_2": [ + 85, + 336, + 995, + 389 + ], + "text_2_lines_seen": 1, + "text_3": [ + 85, + 663, + 995, + 716 + ], + "text_3_lines_seen": 1, + "text_4": [ + 85, + 732, + 995, + 838 + ], + "text_4_lines_seen": 2, + "text_5": [ + 85, + 1614, + 917, + 1667 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 32, + 246, + 1048, + 1110 + ], + "text_0": [ + 85, + -91, + 995, + -38 + ], + "text_0_lines_seen": 1, + "text_1": [ + 85, + 236, + 995, + 289 + ], + "text_1_lines_seen": 1, + "text_2": [ + 85, + 141, + 995, + 194 + ], + "text_2_lines_seen": 1, + "text_3": [ + 85, + 468, + 995, + 521 + ], + "text_3_lines_seen": 1, + "text_4": [ + 85, + 537, + 995, + 643 + ], + "text_4_lines_seen": 2, + "text_5": [ + 85, + 1419, + 917, + 1472 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 32, + 246, + 1048, + 1110 + ], + "text_0": [ + 85, + -286, + 995, + -233 + ], + "text_0_lines_seen": 1, + "text_1": [ + 85, + 41, + 995, + 94 + ], + "text_1_lines_seen": 1, + "text_2": [ + 85, + -54, + 995, + -1 + ], + "text_2_lines_seen": 1, + "text_3": [ + 85, + 273, + 995, + 326 + ], + "text_3_lines_seen": 1, + "text_4": [ + 85, + 342, + 995, + 448 + ], + "text_4_lines_seen": 2, + "text_5": [ + 85, + 1224, + 917, + 1277 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 32, + 246, + 1048, + 1110 + ], + "text_0": [ + 85, + -481, + 995, + -428 + ], + "text_0_lines_seen": 1, + "text_1": [ + 85, + -154, + 995, + -101 + ], + "text_1_lines_seen": 1, + "text_2": [ + 85, + -249, + 995, + -196 + ], + "text_2_lines_seen": 1, + "text_3": [ + 85, + 78, + 995, + 131 + ], + "text_3_lines_seen": 1, + "text_4": [ + 85, + 147, + 995, + 253 + ], + "text_4_lines_seen": 2, + "text_5": [ + 85, + 1029, + 917, + 1082 + ], + "text_5_lines_seen": 1 + } + ] + }, + "configuration_method": "Native required errors, actual argument\/preference edits, label tap and menu choice; Cancel discards, explicit Run persists and starts the exact owned values", + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json new file mode 100644 index 00000000..b2d99dcb --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json @@ -0,0 +1,86 @@ +{ + "scope": "Owned no-view completion\/cancellation and native callback lifetime; no Store certification", + "clipboard-owned-sentinel": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 164, + "observations": [ + "101ms query_ms=100 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "160ms query_ms=8 mode=0 flags=65618 windows=[(8102, 3), (8082, 3)] systemui_roots=[8102] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "235ms query_ms=13 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "293ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "349ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "404ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "466ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "534ms query_ms=17 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "591ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "646ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "701ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "756ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 758 + }, + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "window_soft_input_mode": 16, + "window_soft_input_state": 0, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "owned_extension_id": "reviewed-text-62d79cd8f73d403f8c2742dd3aa1e2da", + "fixture_pending": false, + "fixture_command_sha256": "caa437a0c2690326903b1c2a010484d12ff5b16b186a488937a0243d94f56ecc", + "fixture_manifest_sha256": "5f0791158ea7dac3bf8aebb5b286df6d3465c1dfbcfa3a0caf50367d79221f7b", + "clipboard-owned-completion": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 287, + "observations": [ + "89ms query_ms=87 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "248ms query_ms=105 mode=0 flags=65618 windows=[(8104, 3), (8082, 3)] systemui_roots=[8104] queries=10 roots=1 children=9 walked=8 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "349ms query_ms=12 mode=0 flags=65618 windows=[(8104, 3), (8082, 3)] systemui_roots=[8082] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "406ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "463ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "518ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "575ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "632ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "690ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "751ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 752 + }, + "completion_return_line_bounds": [ + [ + 485, + 1081, + 593.2857, + 1134 + ] + ], + "completion_return_visible_target": [ + 393, + 1044, + 687, + 1170 + ], + "focus_setup_touch_mode_before_tab": true, + "focus_setup_touch_mode_after_tab": false, + "focus_setup": "Instrumentation Tab enters keyboard mode, then native RequestFocus semantics; no pointer-focus claim", + "input_execution": "Instrumentation key down\/up: Enter on focused Return; Escape on fresh invocation", + "enter_and_escape_preserved_copy_query": true, + "owned_runs": 2, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json new file mode 100644 index 00000000..85d8cae2 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json @@ -0,0 +1,171 @@ +{ + "scope": "Owned no-view completion\/cancellation and native callback lifetime; no Store certification", + "clipboard-owned-sentinel": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 269, + "observations": [ + "196ms query_ms=195 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "259ms query_ms=12 mode=0 flags=65618 windows=[(8095, 3), (8082, 3)] systemui_roots=[8095] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "332ms query_ms=11 mode=0 flags=65618 windows=[(8095, 3), (8082, 3)] systemui_roots=[8082] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "390ms query_ms=6 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "447ms query_ms=6 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "501ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "558ms query_ms=5 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "615ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "672ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "736ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "791ms query_ms=4 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 793 + }, + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "window_soft_input_mode": 16, + "window_soft_input_state": 0, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "owned_extension_id": "reviewed-text-ccfed78bc7674ab1a1597804edde5402", + "fixture_pending": false, + "fixture_command_sha256": "caa437a0c2690326903b1c2a010484d12ff5b16b186a488937a0243d94f56ecc", + "fixture_manifest_sha256": "5f0791158ea7dac3bf8aebb5b286df6d3465c1dfbcfa3a0caf50367d79221f7b", + "clipboard-owned-completion": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 310, + "observations": [ + "143ms query_ms=142 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "247ms query_ms=53 mode=0 flags=65618 windows=[(8098, 3), (8082, 3)] systemui_roots=[8098] queries=10 roots=1 children=9 walked=8 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "426ms query_ms=64 mode=0 flags=65618 windows=[(8098, 3), (8082, 3)] systemui_roots=[8082] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "484ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "559ms query_ms=20 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "623ms query_ms=12 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "680ms query_ms=7 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "751ms query_ms=15 mode=0 flags=65618 windows=[(8082, 3)] systemui_roots=[8082] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 752 + }, + "settled_ime_geometry": [ + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 0, + 0, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 2277 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1080, + 2340, + 0, + 0, + 0, + 63, + 1080, + 2277 + ], + "stable_for_at_least_ms": 100, + "settled": true + } + ], + "pointer_taps": [ + { + "tag": "extension-back", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 344, + "visible_bounds": [ + 32, + 106, + 158, + 232 + ], + "control_size": [ + 126, + 126 + ], + "point": [ + 95, + 169 + ] + }, + { + "tag": "extension-completion-return", + "viewport": "extension-completion", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 344, + "visible_bounds": [ + 393, + 1044, + 687, + 1170 + ], + "control_size": [ + 294, + 126 + ], + "point": [ + 540, + 1107 + ] + } + ], + "viewport_reveal_gestures": [], + "completion_return_line_bounds": [ + [ + 485, + 1081, + 593.2857, + 1134 + ] + ], + "completion_return_visible_target": [ + 393, + 1044, + 687, + 1170 + ], + "queued_callback_guards": [ + "Preferences hidden", + "Preferences reopened", + "native root ABA", + "same-command replacement before disposal", + "replacement composed", + "closed before disposal", + "closed invocation replaced", + "duplicate after pointer return" + ], + "guard_observation": "Route, epoch, live owner, exact clipboard and owned invocation counter; callback Boolean is not an execution receipt", + "owned_runs": 3, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json new file mode 100644 index 00000000..8c010233 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json @@ -0,0 +1,10 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-00d6e70bac4a4268bdb3c704768affc9", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "async_and_sync_host_api_rejections_released_input": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json new file mode 100644 index 00000000..f8fe8304 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json @@ -0,0 +1,10 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-56a1fab58d1e4f329fc51e16d9640e3e", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "four_revocation_boundaries_verified": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json new file mode 100644 index 00000000..b9ffb92e --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json @@ -0,0 +1,10 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-2ab87c147cb94e9891bbec9c44797213", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "old_cancellation_registration_did_not_detach_new_runtime": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json new file mode 100644 index 00000000..70bdeb10 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json @@ -0,0 +1,11 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-774f71979cce4aefa983c3bf11712a3a", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "live_write_and_publication_controls_succeeded": true, + "stale_write_render_error_depth_and_close_blocked": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json new file mode 100644 index 00000000..9325c28f --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json @@ -0,0 +1,25 @@ +{ + "scope": "Owned external Android caller and frozen JSON formatter; probe commands are separately identified", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-ad3564c04b3e4243abff916eff7556b9", + "reviewed-text-3afc2a763ef8461fb18c7ddf4a45c4d6" + ], + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "ordinary_session_specific_unavailable_error": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json new file mode 100644 index 00000000..9e74e7dc --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json @@ -0,0 +1,35 @@ +{ + "scope": "Owned external Android caller and frozen JSON formatter; probe commands are separately identified", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-c6b04ed2a97e42bb84b3efaee6169135", + "reviewed-text-476b48beadb8407b9e153039a09ca721" + ], + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "executed_command": "formatSelectionAndShow", + "native_format_contract_started": true, + "native_code_exact_output_sha256": "97aebb62251401c70af03542248f7a0e4a320e7801c5d35ede8a2b3461b87ab3", + "native_code_monospace": true, + "exact_input_sha256": "875cb6f6b27c42e85b02505c4938305fdd0603b7a76d3ff5bf2e8d2b2316209b", + "exact_output_sha256": "328d7f3c82072c2fbe0565257f692e9a25d828b02ea4287544237f3b4bd79a51", + "clipboard_unchanged_until_copy": true, + "exact_unicode_output_copied": true, + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json new file mode 100644 index 00000000..647680a9 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json @@ -0,0 +1,91 @@ +{ + "scope": "Owned React Markdown\/metadata through the real runtime and native UI; not Store or service certification", + "clipboard-before-owned-sentinel": { + "observations": [ + "34ms query_ms=13 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "115ms query_ms=31 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "321ms query_ms=146 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "420ms query_ms=43 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "490ms query_ms=13 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "552ms query_ms=7 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "617ms query_ms=8 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "685ms query_ms=17 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "753ms query_ms=17 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]" + ], + "actions": [] + }, + "clipboard-owned-sentinel": { + "observations": [ + "580ms query_ms=576 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "699ms query_ms=28 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "761ms query_ms=8 mode=0 flags=65618 windows=[(8019, 3), (7993, 3)] systemui_roots=[8019] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=false actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "878ms query_ms=25 mode=0 flags=65618 windows=[(8019, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=false actions=1 nodes=[]", + "969ms query_ms=38 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "1031ms query_ms=11 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "1088ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "1146ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "1213ms query_ms=14 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "1288ms query_ms=23 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]" + ], + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ] + }, + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "list", + "fixture_command_sha256": "7682a7e605e5da169bc4809047f490da7f87b3ebb30b4378b74ded04302dc790", + "fixture_manifest_sha256": "f8f5c5f83969cb94f57edd76779ac5ad976d465f06acdb607befefac885d10e6", + "owned_extension_id": "reviewed-text-2fc5cb44d4d24366976169ba7d05b047", + "owned_png_sha256": "9d6eb0bb52ca2b690f4d60646c909d3f54e18e7ce4ea7181a774c898e56ef5f0", + "owned_svg_sha256": "3995c224db43ff143e50bf2b81db937d947678d54a7650a5e02b7c86c4301489", + "publication_witnesses": [ + { + "phase": "initial", + "counter": 0, + "root_id": "31", + "root_type": "List", + "composed_marker_text": "Detail publication 0", + "semantics_id": 1178 + } + ], + "axis_aware_scrolls": [], + "list_search_actual_ime_open": true, + "primary_ime_geometry": { + "bottom": 624, + "visible_frame_bottom": 648 + }, + "ime_toggle_contract_started": true, + "last_native_text_wait": "Owned value beta A", + "clipboard-exact-copy": { + "observations": [ + "328ms query_ms=326 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "523ms query_ms=132 mode=0 flags=65618 windows=[(8020, 3), (7993, 3)] systemui_roots=[8020] queries=10 roots=1 children=9 walked=8 prefetch=36 complete=false require_action=false actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "657ms query_ms=14 mode=0 flags=65618 windows=[(8020, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=false actions=1 nodes=[]", + "746ms query_ms=34 mode=0 flags=65618 windows=[(8020, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=false actions=1 nodes=[]", + "815ms query_ms=16 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "871ms query_ms=4 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "927ms query_ms=4 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "983ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "1038ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "1102ms query_ms=6 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]" + ], + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ] + }, + "exact_copy": "Owned exact copy beta café é 日本 🌱", + "query_selection_and_caller_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "image_history_process_property_restored": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json new file mode 100644 index 00000000..98cb3647 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json @@ -0,0 +1,97 @@ +{ + "scope": "Owned React Markdown\/metadata through the real runtime and native UI; not Store or service certification", + "clipboard-before-owned-sentinel": { + "observations": [ + "14ms query_ms=13 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "186ms query_ms=107 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "253ms query_ms=15 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "359ms query_ms=46 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "419ms query_ms=8 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "497ms query_ms=24 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "604ms query_ms=53 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "681ms query_ms=14 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "737ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "792ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]" + ], + "actions": [] + }, + "clipboard-owned-sentinel": { + "observations": [ + "340ms query_ms=339 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "459ms query_ms=37 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=0 nodes=[]", + "523ms query_ms=10 mode=0 flags=65618 windows=[(8024, 3), (7993, 3)] systemui_roots=[8024] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=false actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "597ms query_ms=16 mode=0 flags=65618 windows=[(8024, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=false actions=1 nodes=[]", + "663ms query_ms=14 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "729ms query_ms=15 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "795ms query_ms=15 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "879ms query_ms=29 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]", + "936ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=false actions=1 nodes=[]" + ], + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ] + }, + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "detail", + "fixture_command_sha256": "ff7e24a4c563b94aa4a73404d9bc89c80cb81afe37e89c76e19df55507f84082", + "fixture_manifest_sha256": "f8f5c5f83969cb94f57edd76779ac5ad976d465f06acdb607befefac885d10e6", + "owned_extension_id": "reviewed-text-a08741d852124fbd950b0f54d017b6f4", + "owned_png_sha256": "9d6eb0bb52ca2b690f4d60646c909d3f54e18e7ce4ea7181a774c898e56ef5f0", + "owned_svg_sha256": "3995c224db43ff143e50bf2b81db937d947678d54a7650a5e02b7c86c4301489", + "publication_witnesses": [ + { + "phase": "initial", + "counter": 0, + "root_id": "13", + "root_type": "Detail", + "composed_marker_text": "Detail publication 0", + "semantics_id": 1393 + }, + { + "phase": "recreated", + "counter": 0, + "root_id": "13", + "root_type": "Detail", + "composed_marker_text": "Detail publication 0", + "semantics_id": 1482 + }, + { + "phase": "fresh-owner-activation", + "counter": 1, + "root_id": "13", + "root_type": "Detail", + "composed_marker_text": "Detail publication 1", + "semantics_id": 1482 + } + ], + "last_native_text_wait": "Owned tag standalone", + "axis_aware_scrolls": [], + "queued_callbacks": [ + { + "phase": "activity-recreation", + "before": { + "revision": 0, + "tagCalls": 0, + "selected": null, + "unexpectedLink": false + }, + "after": { + "revision": 0, + "tagCalls": 0, + "selected": null, + "unexpectedLink": false + }, + "dispatch_rejected": true + } + ], + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "image_history_process_property_restored": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json new file mode 100644 index 00000000..1073e760 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json @@ -0,0 +1,118 @@ +{ + "scope": "Owned React Form through the real runtime and Android controls; not Store\/service certification", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "window_soft_input_mode": 19, + "window_soft_input_state": 3, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "submit-validation", + "fixture_command_sha256": "1061be9daf9e9410263d56cad887e5d72ae9115f804e4499c26423312fa7b0dd", + "fixture_manifest_sha256": "fbf51abc5c67fe0ed96200fe6b60c2313965a3e18052688af83f784bfb29b4a0", + "owned_extension_id": "reviewed-text-e4ab0edac62349b2bde92e66d9031a3f", + "settled_ime_geometry": [ + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 1152 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 1, + 552, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 648 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 1, + 552, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 648 + ], + "stable_for_at_least_ms": 100, + "settled": true + } + ], + "viewport_reveal_gestures": [], + "pointer_taps": [ + { + "tag": "extension-field-name", + "viewport": "extension-form", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 882, + "visible_bounds": [ + 428, + 392, + 1493, + 476 + ], + "control_size": [ + 1065, + 84 + ], + "point": [ + 960.5, + 434 + ] + }, + { + "tag": "extension-primary", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 882, + "visible_bounds": [ + 1035, + 552, + 1322, + 624 + ], + "control_size": [ + 287, + 72 + ], + "point": [ + 1178.5, + 588 + ] + } + ], + "exact_valid_unicode_once": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json new file mode 100644 index 00000000..e496d9fb --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json @@ -0,0 +1,691 @@ +{ + "scope": "Owned React Form through the real runtime and Android controls; not Store\/service certification", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "window_soft_input_mode": 19, + "window_soft_input_state": 3, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "fixture_mode": "configuration", + "fixture_command_sha256": "e08bae2f6447a8b88fbf631a2e5e6dabb9b546fff529839fd5ed450f419667d0", + "fixture_manifest_sha256": "ff2d7e3a9e7cd92c0afc8bd1b3bc30081085347d57852267be44529ae5e89c6d", + "owned_extension_id": "reviewed-text-101326ee3fdc409dac9b6e2f694300fe", + "settled_ime_geometry": [ + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 3, + "geometry": [ + 0, + 0, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 1152 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 1, + 552, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 648 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": false, + "window_scope": "activity", + "native_frames": 6, + "geometry": [ + 0, + 0, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 1152 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 1152 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 6, + "geometry": [ + 1, + 552, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 648 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 8, + "geometry": [ + 1, + 552, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 648 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 6, + "geometry": [ + 1, + 552, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 648 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 1152 + ], + "stable_for_at_least_ms": 100, + "settled": true + } + ], + "viewport_reveal_gestures": [], + "pointer_taps": [ + { + "tag": "preference-secret", + "viewport": "extension-configuration", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 428, + 725, + 1493, + 809 + ], + "control_size": [ + 1065, + 84 + ], + "point": [ + 960.5, + 767 + ] + }, + { + "tag": "run-extension-setup", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 428, + 848, + 1493, + 920 + ], + "control_size": [ + 1065, + 72 + ], + "point": [ + 960.5, + 884 + ] + }, + { + "tag": "extension-back", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 398, + 243, + 470, + 315 + ], + "control_size": [ + 72, + 72 + ], + "point": [ + 434, + 279 + ] + }, + { + "tag": "preference-choice-layout", + "viewport": "extension-configuration", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 428, + 426, + 1493, + 498 + ], + "control_size": [ + 1065, + 72 + ], + "point": [ + 960.5, + 462 + ] + }, + { + "tag": "run-extension-setup", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 428, + 528, + 1493, + 600 + ], + "control_size": [ + 1065, + 72 + ], + "point": [ + 960.5, + 564 + ] + }, + { + "tag": "extension-back", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 1, + "visible_bounds": [ + 398, + 243, + 470, + 315 + ], + "control_size": [ + 72, + 72 + ], + "point": [ + 434, + 279 + ] + } + ], + "hidden_ime_window_absence_confirmed": true, + "password_editor_metadata": [ + { + "tag": "preference-secret", + "input_type": 129, + "ime_options": 33554438, + "scope": "Actual focused editor InputConnection metadata before any password is entered" + } + ], + "pointer_scrolls": [ + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 398, + 323, + 1523, + 818 + ], + "start": [ + 12, + 247.5 + ], + "end": [ + 12, + 371.25 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 398, + 323, + 1523, + 818 + ], + "start": [ + 12, + 247.5 + ], + "end": [ + 12, + 371.25 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 398, + 323, + 1523, + 818 + ], + "start": [ + 12, + 247.5 + ], + "end": [ + 12, + 371.25 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 398, + 323, + 1523, + 818 + ], + "start": [ + 12, + 247.5 + ], + "end": [ + 12, + 123.75 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 398, + 323, + 1523, + 818 + ], + "start": [ + 12, + 247.5 + ], + "end": [ + 12, + 123.75 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 398, + 323, + 1523, + 818 + ], + "start": [ + 12, + 247.5 + ], + "end": [ + 12, + 123.75 + ] + }, + { + "viewport": "extension-configuration", + "gutter": true, + "visible_bounds": [ + 398, + 323, + 1523, + 818 + ], + "start": [ + 12, + 247.5 + ], + "end": [ + 12, + 123.75 + ] + } + ], + "configuration-required_line_probe": { + "ime_visible": false, + "line_counts": [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + "all_lines_reached": true, + "pointer_steps": [ + { + "viewport": [ + 398, + 323, + 1523, + 818 + ], + "text_0": [ + 428, + 353, + 1493, + 383 + ], + "text_0_lines_seen": 1, + "text_1": [ + 428, + 539, + 1493, + 569 + ], + "text_1_lines_seen": 1, + "text_2": [ + 428, + 485, + 1493, + 515 + ], + "text_2_lines_seen": 1, + "text_3": [ + 428, + 671, + 1493, + 701 + ], + "text_3_lines_seen": 1, + "text_4": [ + 428, + 710, + 1493, + 740 + ], + "text_4_lines_seen": 1, + "text_5": [ + 428, + 1181, + 894, + 1211 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 398, + 323, + 1523, + 818 + ], + "text_0": [ + 428, + 241, + 1493, + 271 + ], + "text_0_lines_seen": 1, + "text_1": [ + 428, + 427, + 1493, + 457 + ], + "text_1_lines_seen": 1, + "text_2": [ + 428, + 373, + 1493, + 403 + ], + "text_2_lines_seen": 1, + "text_3": [ + 428, + 559, + 1493, + 589 + ], + "text_3_lines_seen": 1, + "text_4": [ + 428, + 598, + 1493, + 628 + ], + "text_4_lines_seen": 1, + "text_5": [ + 428, + 1069, + 894, + 1099 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 398, + 323, + 1523, + 818 + ], + "text_0": [ + 428, + 129, + 1493, + 159 + ], + "text_0_lines_seen": 1, + "text_1": [ + 428, + 315, + 1493, + 345 + ], + "text_1_lines_seen": 1, + "text_2": [ + 428, + 261, + 1493, + 291 + ], + "text_2_lines_seen": 1, + "text_3": [ + 428, + 447, + 1493, + 477 + ], + "text_3_lines_seen": 1, + "text_4": [ + 428, + 486, + 1493, + 516 + ], + "text_4_lines_seen": 1, + "text_5": [ + 428, + 957, + 894, + 987 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 398, + 323, + 1523, + 818 + ], + "text_0": [ + 428, + 18, + 1493, + 48 + ], + "text_0_lines_seen": 1, + "text_1": [ + 428, + 204, + 1493, + 234 + ], + "text_1_lines_seen": 1, + "text_2": [ + 428, + 150, + 1493, + 180 + ], + "text_2_lines_seen": 1, + "text_3": [ + 428, + 336, + 1493, + 366 + ], + "text_3_lines_seen": 1, + "text_4": [ + 428, + 375, + 1493, + 405 + ], + "text_4_lines_seen": 1, + "text_5": [ + 428, + 846, + 894, + 876 + ], + "text_5_lines_seen": 0 + }, + { + "viewport": [ + 398, + 323, + 1523, + 818 + ], + "text_0": [ + 428, + -70, + 1493, + -40 + ], + "text_0_lines_seen": 1, + "text_1": [ + 428, + 116, + 1493, + 146 + ], + "text_1_lines_seen": 1, + "text_2": [ + 428, + 62, + 1493, + 92 + ], + "text_2_lines_seen": 1, + "text_3": [ + 428, + 248, + 1493, + 278 + ], + "text_3_lines_seen": 1, + "text_4": [ + 428, + 287, + 1493, + 317 + ], + "text_4_lines_seen": 1, + "text_5": [ + 428, + 758, + 894, + 788 + ], + "text_5_lines_seen": 1 + } + ] + }, + "configuration_method": "Native required errors, actual argument\/preference edits, label tap and menu choice; Cancel discards, explicit Run persists and starts the exact owned values", + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json new file mode 100644 index 00000000..58b3ae3a --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json @@ -0,0 +1,81 @@ +{ + "scope": "Owned no-view completion\/cancellation and native callback lifetime; no Store certification", + "clipboard-owned-sentinel": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 559, + "observations": [ + "467ms query_ms=466 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "549ms query_ms=21 mode=0 flags=65618 windows=[(8008, 3), (7993, 3)] systemui_roots=[8008] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "888ms query_ms=277 mode=0 flags=65618 windows=[(8008, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "1015ms query_ms=55 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "1076ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "1133ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "1192ms query_ms=6 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "1276ms query_ms=26 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 1278 + }, + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "window_soft_input_mode": 19, + "window_soft_input_state": 3, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "owned_extension_id": "reviewed-text-29d3983f853044c18bdbfa1f94b41568", + "fixture_pending": false, + "fixture_command_sha256": "caa437a0c2690326903b1c2a010484d12ff5b16b186a488937a0243d94f56ecc", + "fixture_manifest_sha256": "5f0791158ea7dac3bf8aebb5b286df6d3465c1dfbcfa3a0caf50367d79221f7b", + "clipboard-owned-completion": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 622, + "observations": [ + "219ms query_ms=210 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "462ms query_ms=190 mode=0 flags=65618 windows=[(8010, 3), (7993, 3)] systemui_roots=[8010] queries=10 roots=1 children=9 walked=8 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "721ms query_ms=49 mode=0 flags=65618 windows=[(8010, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "786ms query_ms=7 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "843ms query_ms=4 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "898ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "965ms query_ms=9 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "1024ms query_ms=6 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "1093ms query_ms=18 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 1095 + }, + "completion_return_line_bounds": [ + [ + 929, + 801, + 991.75, + 831 + ] + ], + "completion_return_visible_target": [ + 877, + 780, + 1045, + 852 + ], + "focus_setup_touch_mode_before_tab": false, + "focus_setup_touch_mode_after_tab": false, + "focus_setup": "Instrumentation Tab enters keyboard mode, then native RequestFocus semantics; no pointer-focus claim", + "input_execution": "Instrumentation key down\/up: Enter on focused Return; Escape on fresh invocation", + "enter_and_escape_preserved_copy_query": true, + "owned_runs": 2, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json new file mode 100644 index 00000000..113b8e4d --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json @@ -0,0 +1,171 @@ +{ + "scope": "Owned no-view completion\/cancellation and native callback lifetime; no Store certification", + "clipboard-owned-sentinel": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 501, + "observations": [ + "350ms query_ms=348 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "441ms query_ms=31 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "499ms query_ms=5 mode=0 flags=65618 windows=[(8001, 3), (7993, 3)] systemui_roots=[8001] queries=9 roots=1 children=8 walked=7 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/minimized_preview visible=true enabled=true clickable=true, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "614ms query_ms=54 mode=0 flags=65618 windows=[(8001, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "699ms query_ms=31 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "762ms query_ms=12 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "820ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "876ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "933ms query_ms=5 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "1000ms query_ms=7 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 1003 + }, + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "window_soft_input_mode": 19, + "window_soft_input_state": 3, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "owned_extension_id": "reviewed-text-56b0bf6c241848efa458edf267a14b65", + "fixture_pending": false, + "fixture_command_sha256": "caa437a0c2690326903b1c2a010484d12ff5b16b186a488937a0243d94f56ecc", + "fixture_manifest_sha256": "5f0791158ea7dac3bf8aebb5b286df6d3465c1dfbcfa3a0caf50367d79221f7b", + "clipboard-owned-completion": { + "fixture_ready": true, + "actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "readiness_protocol": "Same bounded discovery\/action\/absence path; no preceding UiDevice idle query", + "fixture_wait_ms": 2218, + "observations": [ + "958ms query_ms=957 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=0 nodes=[]", + "1665ms query_ms=653 mode=0 flags=65618 windows=[(8004, 3), (7993, 3)] systemui_roots=[8004] queries=10 roots=1 children=9 walked=8 prefetch=36 complete=false require_action=true actions=0 nodes=[com.android.systemui:id\/clipboard_ui visible=true enabled=true clickable=false, com.android.systemui:id\/dismiss_button visible=true enabled=true clickable=true]", + "2446ms query_ms=178 mode=0 flags=65618 windows=[(8004, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "2526ms query_ms=28 mode=0 flags=65618 windows=[(8004, 3), (7993, 3)] systemui_roots=[7993] queries=30 roots=2 children=28 walked=29 prefetch=36 complete=false require_action=true actions=1 nodes=[]", + "2711ms query_ms=126 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "2822ms query_ms=60 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "2880ms query_ms=7 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "2939ms query_ms=7 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]", + "2996ms query_ms=7 mode=0 flags=65618 windows=[(7993, 3)] systemui_roots=[7993] queries=29 roots=1 children=28 walked=29 prefetch=36 complete=true require_action=true actions=1 nodes=[]" + ], + "cleanup_elapsed_ms": 2999 + }, + "settled_ime_geometry": [ + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 1152 + ], + "stable_for_at_least_ms": 100, + "settled": true + }, + { + "requested_visibility": null, + "window_scope": "activity", + "native_frames": 7, + "geometry": [ + 0, + 0, + 1920, + 1200, + 0, + 0, + 0, + 36, + 1920, + 1152 + ], + "stable_for_at_least_ms": 100, + "settled": true + } + ], + "pointer_taps": [ + { + "tag": "extension-back", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 368, + "visible_bounds": [ + 398, + 243, + 470, + 315 + ], + "control_size": [ + 72, + 72 + ], + "point": [ + 434, + 279 + ] + }, + { + "tag": "extension-completion-return", + "viewport": "extension-completion", + "injection_owner": "Compose root containing the exact target tag", + "owner_root_semantics_id": 368, + "visible_bounds": [ + 877, + 780, + 1045, + 852 + ], + "control_size": [ + 168, + 72 + ], + "point": [ + 961, + 816 + ] + } + ], + "viewport_reveal_gestures": [], + "completion_return_line_bounds": [ + [ + 929, + 801, + 991.75, + 831 + ] + ], + "completion_return_visible_target": [ + 877, + 780, + 1045, + 852 + ], + "queued_callback_guards": [ + "Preferences hidden", + "Preferences reopened", + "native root ABA", + "same-command replacement before disposal", + "replacement composed", + "closed before disposal", + "closed invocation replaced", + "duplicate after pointer return" + ], + "guard_observation": "Route, epoch, live owner, exact clipboard and owned invocation counter; callback Boolean is not an execution receipt", + "owned_runs": 3, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json new file mode 100644 index 00000000..12d48c0b --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json @@ -0,0 +1,10 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-ad0afe54d8754c739eab92aef1904741", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "async_and_sync_host_api_rejections_released_input": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json new file mode 100644 index 00000000..9f78e007 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json @@ -0,0 +1,10 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-69c2df4de87e41f28b094d88e2f64ef8", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "four_revocation_boundaries_verified": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json new file mode 100644 index 00000000..fd9046b7 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json @@ -0,0 +1,10 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-ec78889e2bcf4630abb248e9ac8c6771", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "old_cancellation_registration_did_not_detach_new_runtime": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json new file mode 100644 index 00000000..c600562a --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json @@ -0,0 +1,11 @@ +{ + "scope": "Controlled Activity\/runtime ownership probes using an owned JavaScript fixture; not a Store compatibility result", + "owned_extension_id": "reviewed-text-dfa1d30e5f504a1ca7b3b1e11b418332", + "view_probe_sha256": "22064be5286d746ab1e4d73b5ebab32fc2ef15faff2e2a586aff310a7d983e8a", + "font_scale": 1, + "live_write_and_publication_controls_succeeded": true, + "stale_write_render_error_depth_and_close_blocked": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json new file mode 100644 index 00000000..b7e6f4ea --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json @@ -0,0 +1,25 @@ +{ + "scope": "Owned external Android caller and frozen JSON formatter; probe commands are separately identified", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-7a0e213f3e0549daac25156e8de1c292", + "reviewed-text-10eb11c9e87c462d82feb46c67ea7898" + ], + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "ordinary_session_specific_unavailable_error": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json new file mode 100644 index 00000000..c66980f8 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json @@ -0,0 +1,35 @@ +{ + "scope": "Owned external Android caller and frozen JSON formatter; probe commands are separately identified", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "command_sha256": "bb859bf5193664df28734d7982ff540ba7da4fc92be0f3958afd7e717c84ac92", + "probe_command_sha256": "8bc7c98a835bf72824ae0f061d6cc0272052c58a8c4a665c8a4157192246ff93", + "owned_extension_ids": [ + "reviewed-text-e91128b346b041f683146861707a2ded", + "reviewed-text-47a53762915143b98de78d626ba8657e" + ], + "external_caller_uses_separate_package_and_uid": true, + "owned_sentinel_dismiss_actions": [ + { + "id": "com.android.systemui:id\/dismiss_button", + "accepted": true + } + ], + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "installed_build_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "preview_no_execution_and_clipboard_unchanged": true, + "executed_command": "formatSelectionAndShow", + "native_format_contract_started": true, + "native_code_exact_output_sha256": "97aebb62251401c70af03542248f7a0e4a320e7801c5d35ede8a2b3461b87ab3", + "native_code_monospace": true, + "exact_input_sha256": "875cb6f6b27c42e85b02505c4938305fdd0603b7a76d3ff5bf2e8d2b2316209b", + "exact_output_sha256": "328d7f3c82072c2fbe0565257f692e9a25d828b02ea4287544237f3b4bd79a51", + "clipboard_unchanged_until_copy": true, + "exact_unicode_output_copied": true, + "source_text_and_selection_unchanged": true, + "returned_to_external_caller": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json new file mode 100644 index 00000000..d2f440c0 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json @@ -0,0 +1,40 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-887db6456bdd42028d5f8f79cd929d6b", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "paused_parent_probe": { + "attempted": 1, + "acks": 1, + "copiesAttempted": 1, + "copiesResolved": 0, + "statusesAttempted": 1, + "publicationsAttempted": 1, + "rejections": [] + }, + "one_transfer_before_native_composition": true, + "obsolete_host_and_chrome_callbacks_rejected": true, + "protocol_setup": "Compose frame clock paused for the logical handoff\/acknowledgement and queued-callback probes; child native rendering follows after resuming", + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json new file mode 100644 index 00000000..b45bcb00 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json @@ -0,0 +1,54 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-32c8151ec64d4757a293955ec379a29e", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "child_raw_grant_absent": true, + "context_argument_fallback_values_verified": true, + "copy_exact": true, + "owned_payload_sha256": "2e7bb2f77bbbd2595f18bc40df44ebe7f0bd1712594337a89f6d9b5d34600d38", + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json new file mode 100644 index 00000000..70d5019c --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json @@ -0,0 +1,40 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-11eb6d9dfcc84df494ae8e7442c225cb", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "paused_parent_probe": { + "attempted": 2, + "acks": 1, + "copiesAttempted": 1, + "copiesResolved": 0, + "statusesAttempted": 1, + "publicationsAttempted": 1, + "rejections": [] + }, + "one_transfer_before_native_composition": true, + "obsolete_host_and_chrome_callbacks_rejected": true, + "protocol_setup": "Compose frame clock paused for the logical handoff\/acknowledgement and queued-callback probes; child native rendering follows after resuming", + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json new file mode 100644 index 00000000..40816886 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json @@ -0,0 +1,80 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-f27de0a66100421c8b806ce50dbffdf8", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "rejection_receipts": [ + { + "index": 0, + "message": "Only foreground user-initiated command launches are supported on Android", + "same_epoch_and_parent": true + }, + { + "index": 1, + "message": "Launching another extension is unavailable on Android", + "same_epoch_and_parent": true + }, + { + "index": 2, + "message": "The requested command is unavailable in this extension", + "same_epoch_and_parent": true + }, + { + "index": 3, + "message": "The target command is disabled", + "same_epoch_and_parent": true + }, + { + "index": 4, + "message": "The target command requires an unsupported desktop mode", + "same_epoch_and_parent": true + }, + { + "index": 5, + "message": "The target command is unavailable; reinstall the extension before launching it", + "same_epoch_and_parent": true + }, + { + "index": 6, + "message": "Configure the target command from the launcher before launching it here", + "same_epoch_and_parent": true + }, + { + "index": 7, + "message": "Complete the target command's required arguments before launching it", + "same_epoch_and_parent": true + }, + { + "index": 8, + "message": "The launch contains an undeclared command argument", + "same_epoch_and_parent": true + }, + { + "index": 9, + "message": "The command launch data exceeds the Android size limit", + "same_epoch_and_parent": true + } + ], + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json new file mode 100644 index 00000000..7c6e9676 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json @@ -0,0 +1,63 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-312945e83dd3433ea5b9637332bab4ab", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "run-extension-setup", + "bounds": [ + 85, + 1163, + 995, + 1289 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "ordinary_launch_configuration_explicitly_run": true, + "ordinary_launch_has_no_old_context_arguments_or_fallback": true, + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json new file mode 100644 index 00000000..299a281b --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json @@ -0,0 +1,24 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-7a894ab13c114ffe982314f3103f62bb", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "cancelled_before_commit": true, + "cancelled_request_probe": { + "attempted": 1, + "acks": 0, + "copiesAttempted": 0, + "copiesResolved": 0, + "statusesAttempted": 0, + "publicationsAttempted": 0, + "rejections": [] + }, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json new file mode 100644 index 00000000..c2d540cc --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json @@ -0,0 +1,41 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-6c53c347c0234651a5b61d2f5d2f0b80", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 53, + 1200, + 826, + 1326 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "current_invocation_context_survived_recreation": true, + "disposed_back_rejected_after_recreation": true, + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json new file mode 100644 index 00000000..aabc7b5a --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json @@ -0,0 +1,40 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-a0c9b0bbf29141d5a9aa884a8ec250b3", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 411, + "height_dp": 891, + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 32, + 106, + 158, + 232 + ], + "minimum_px": 126, + "reveal_gestures": 0 + } + ], + "disposed_preferences_rejected_after_route_return": true, + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json new file mode 100644 index 00000000..784a8843 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json @@ -0,0 +1,40 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-ea63270a98184b1bbac3c82c8aab947e", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "paused_parent_probe": { + "attempted": 1, + "acks": 1, + "copiesAttempted": 1, + "copiesResolved": 0, + "statusesAttempted": 1, + "publicationsAttempted": 1, + "rejections": [] + }, + "one_transfer_before_native_composition": true, + "obsolete_host_and_chrome_callbacks_rejected": true, + "protocol_setup": "Compose frame clock paused for the logical handoff\/acknowledgement and queued-callback probes; child native rendering follows after resuming", + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json new file mode 100644 index 00000000..450d7343 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json @@ -0,0 +1,54 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-6cf2b014d95344b5b2ab54ea66d7b6c7", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1049, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-primary", + "bounds": [ + 1044, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "child_raw_grant_absent": true, + "context_argument_fallback_values_verified": true, + "copy_exact": true, + "owned_payload_sha256": "2e7bb2f77bbbd2595f18bc40df44ebe7f0bd1712594337a89f6d9b5d34600d38", + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json new file mode 100644 index 00000000..6623ce08 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json @@ -0,0 +1,40 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-793df73584404e68b8367dc3630e4acc", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "paused_parent_probe": { + "attempted": 2, + "acks": 1, + "copiesAttempted": 1, + "copiesResolved": 0, + "statusesAttempted": 1, + "publicationsAttempted": 1, + "rejections": [] + }, + "one_transfer_before_native_composition": true, + "obsolete_host_and_chrome_callbacks_rejected": true, + "protocol_setup": "Compose frame clock paused for the logical handoff\/acknowledgement and queued-callback probes; child native rendering follows after resuming", + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json new file mode 100644 index 00000000..956f00a9 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json @@ -0,0 +1,80 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-73f744edd59e482ba5f1a53cca9173db", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "rejection_receipts": [ + { + "index": 0, + "message": "Only foreground user-initiated command launches are supported on Android", + "same_epoch_and_parent": true + }, + { + "index": 1, + "message": "Launching another extension is unavailable on Android", + "same_epoch_and_parent": true + }, + { + "index": 2, + "message": "The requested command is unavailable in this extension", + "same_epoch_and_parent": true + }, + { + "index": 3, + "message": "The target command is disabled", + "same_epoch_and_parent": true + }, + { + "index": 4, + "message": "The target command requires an unsupported desktop mode", + "same_epoch_and_parent": true + }, + { + "index": 5, + "message": "The target command is unavailable; reinstall the extension before launching it", + "same_epoch_and_parent": true + }, + { + "index": 6, + "message": "Configure the target command from the launcher before launching it here", + "same_epoch_and_parent": true + }, + { + "index": 7, + "message": "Complete the target command's required arguments before launching it", + "same_epoch_and_parent": true + }, + { + "index": 8, + "message": "The launch contains an undeclared command argument", + "same_epoch_and_parent": true + }, + { + "index": 9, + "message": "The command launch data exceeds the Android size limit", + "same_epoch_and_parent": true + } + ], + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json new file mode 100644 index 00000000..596a82ed --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json @@ -0,0 +1,63 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-77d6b8ca49324ec1b2618ad953008165", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1049, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "run-extension-setup", + "bounds": [ + 428, + 848, + 1493, + 920 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "ordinary_launch_configuration_explicitly_run": true, + "ordinary_launch_has_no_old_context_arguments_or_fallback": true, + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json new file mode 100644 index 00000000..8ed2f648 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json @@ -0,0 +1,24 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-f8505ef5a7d14b8e82de04ddb30291c4", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "cancelled_before_commit": true, + "cancelled_request_probe": { + "attempted": 1, + "acks": 0, + "copiesAttempted": 0, + "copiesResolved": 0, + "statusesAttempted": 0, + "publicationsAttempted": 0, + "rejections": [] + }, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json new file mode 100644 index 00000000..4a8ffa9f --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json @@ -0,0 +1,41 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-9601b5de84ca45cd9f7eed844fb58ae6", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-primary", + "bounds": [ + 1049, + 872, + 1322, + 944 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "current_invocation_context_survived_recreation": true, + "disposed_back_rejected_after_recreation": true, + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json new file mode 100644 index 00000000..599eef92 --- /dev/null +++ b/docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json @@ -0,0 +1,40 @@ +{ + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "owned_extension_id": "reviewed-text-b2a77f7638e14f01a8085d8fbb1f836e", + "fixture_parent_sha256": "89173122097eb113c83d73b1a94ac3208fe6c5bea790029b6d5ef5aa9a61da2d", + "fixture_child_sha256": "e618f4c555f58360598d3b7488ae470025b8669b852964ed9533d3879c9dc0e4", + "fixture_manifest_sha256": "0c7b899f9ffed2d79361adb85f077ffb86074b6b957bd122dcca4a6995bd5806", + "font_scale": 1, + "width_dp": 1280, + "height_dp": 800, + "pointer_taps": [ + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + }, + { + "tag": "extension-back", + "bounds": [ + 398, + 243, + 470, + 315 + ], + "minimum_px": 72, + "reveal_gestures": 0 + } + ], + "disposed_preferences_rejected_after_route_return": true, + "launcher_query_preserved": true, + "passed": true, + "owned_data_removed": true, + "preexisting_installations_and_data_preserved": true, + "clipboard_restoration_scope": "Independent host\/test-UID durable recovery; this class does not retain or publish the original clipboard" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/checkpoint.json b/docs/validation/paste-copy/checkpoint.json new file mode 100644 index 00000000..e93209c0 --- /dev/null +++ b/docs/validation/paste-copy/checkpoint.json @@ -0,0 +1,6396 @@ +{ + "schema_version": 1, + "issue": 101, + "base_commit": "987b78a7256e7fa3c6356f6699afc23d1f451a74", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "current_test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "scope": "Explicit Copy following rejected paste; no cross-app insertion parity", + "bindings": [ + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/tests.log", + "original_sha256": "fe67a4586a673f85e8e53d7e90da5140c6fd31efa058162e651ca62a4e7b7460", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/tests.log", + "public_sha256": "fe67a4586a673f85e8e53d7e90da5140c6fd31efa058162e651ca62a4e7b7460", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "81517c08a11fbac15e266f4953772908d800d6561006f5b85b4ed28a257e71b4", + "public": "docs/validation/paste-copy/cases/frozen-copy-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "81517c08a11fbac15e266f4953772908d800d6561006f5b85b4ed28a257e71b4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/tests.log", + "original_sha256": "5ab573c0e0c141f2f75aa9286150a05e8663ea4073020d0d277995184d8c8e2f", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/tests.log", + "public_sha256": "5ab573c0e0c141f2f75aa9286150a05e8663ea4073020d0d277995184d8c8e2f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "93262f6e989920bc3d9e8f31b380c2303035ad964ac2bc5a946d4b80d1f0cc61", + "public": "docs/validation/paste-copy/cases/frozen-copy-tablet200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "93262f6e989920bc3d9e8f31b380c2303035ad964ac2bc5a946d4b80d1f0cc61", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/tests.log", + "original_sha256": "0d52c67926f49a8030adab05b829a6588c1d0092fda5a4c1610c31f8d4fcce5e", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/tests.log", + "public_sha256": "0d52c67926f49a8030adab05b829a6588c1d0092fda5a4c1610c31f8d4fcce5e", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "d5366f23412be9567c58b1c4dba82e4b21c866fdc4b1f95604cbc80b9b32d3cc", + "public": "docs/validation/paste-copy/cases/frozen-copy-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "d5366f23412be9567c58b1c4dba82e4b21c866fdc4b1f95604cbc80b9b32d3cc", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/tests.log", + "original_sha256": "60eca4d5ad2074846ecd3e526edfbdcaa44f7b225d500ee789b0ed590ccc3c8b", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/tests.log", + "public_sha256": "60eca4d5ad2074846ecd3e526edfbdcaa44f7b225d500ee789b0ed590ccc3c8b", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "5eb1bca9dbc63d7be40cb9cf0674cf7a06903472357cfc3e61d5195d3d9ade97", + "public": "docs/validation/paste-copy/cases/frozen-copy-phone200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "5eb1bca9dbc63d7be40cb9cf0674cf7a06903472357cfc3e61d5195d3d9ade97", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/tests.log", + "original_sha256": "2f86bbd2ce4bc5a87b65888c4257c2e8aef504f4ed3a3317903e0e22f8fc49d8", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/tests.log", + "public_sha256": "2f86bbd2ce4bc5a87b65888c4257c2e8aef504f4ed3a3317903e0e22f8fc49d8", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "2f9bd5e0e4a34956f14e8b1b3d6df386ba7eb0a90fd705397e44d4e169852a1f", + "public": "docs/validation/paste-copy/cases/frozen-copy-landscape100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "2f9bd5e0e4a34956f14e8b1b3d6df386ba7eb0a90fd705397e44d4e169852a1f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/tests.log", + "original_sha256": "48c318e6ea34ab93b17ec3a5e48e08feed9fe6475a34dba8cc3c3d09b02678da", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/tests.log", + "public_sha256": "48c318e6ea34ab93b17ec3a5e48e08feed9fe6475a34dba8cc3c3d09b02678da", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "4e17acaa4c7c815b996d5d895d0dfddd074b36c1301bad3e97bb7c420f99af57", + "public": "docs/validation/paste-copy/cases/frozen-copy-landscape200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "4e17acaa4c7c815b996d5d895d0dfddd074b36c1301bad3e97bb7c420f99af57", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/tests.log", + "original_sha256": "60d9d8fd95d9cadde6e2cfb53e6fc8fcff260e7acb327f71b77788c13dc4c043", + "public": "docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/tests.log", + "public_sha256": "60d9d8fd95d9cadde6e2cfb53e6fc8fcff260e7acb327f71b77788c13dc4c043", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-record.json", + "original_sha256": "4c4c2701430dc35596b268d0a0853a7520a886b85b89799d37f5d40e732b1f52", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json", + "public_sha256": "4c4c2701430dc35596b268d0a0853a7520a886b85b89799d37f5d40e732b1f52", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json", + "original_sha256": "fa3449cc785ec08924358ac86c353b61c9e1ed5ed485bb50f1bf945f4be57196", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json", + "public_sha256": "fa3449cc785ec08924358ac86c353b61c9e1ed5ed485bb50f1bf945f4be57196", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "15a00a406a35a08ac38d1e1d2cf59df9b6af837e6bfd3cb192a5c2811a73ed11", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "15a00a406a35a08ac38d1e1d2cf59df9b6af837e6bfd3cb192a5c2811a73ed11", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-record.json", + "original_sha256": "f30e374d7c8c2bc9a538d2cf33e591ec50609c51fa5b3730390bebda4084e28e", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json", + "public_sha256": "f30e374d7c8c2bc9a538d2cf33e591ec50609c51fa5b3730390bebda4084e28e", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json", + "original_sha256": "5ba86776bd4658bf8d9796ae55611c5cd71624f2ce6a330bec6bfac65eb88e94", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-pointercopyisexactonceandreturns-record.json", + "public_sha256": "5ba86776bd4658bf8d9796ae55611c5cd71624f2ce6a330bec6bfac65eb88e94", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json", + "original_sha256": "db6ab188c6b7b79aa0be569a3b4890a65da0a17806760b8990fe2e5a4c65ec7f", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json", + "public_sha256": "db6ab188c6b7b79aa0be569a3b4890a65da0a17806760b8990fe2e5a4c65ec7f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json", + "original_sha256": "574ace642760801f68e1d6f740737cca77602e8a01f555153c70518c6ac8c8e4", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json", + "public_sha256": "574ace642760801f68e1d6f740737cca77602e8a01f555153c70518c6ac8c8e4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-record.json", + "original_sha256": "885255c06245c0236a3a782b3afb74c191fd2cfd88b75eda22d67d6c2c46a507", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json", + "public_sha256": "885255c06245c0236a3a782b3afb74c191fd2cfd88b75eda22d67d6c2c46a507", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json", + "original_sha256": "534108bd8f67848a9a0467e91497a55d0120e7e98c7cef587b50e598f8d1083a", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json", + "public_sha256": "534108bd8f67848a9a0467e91497a55d0120e7e98c7cef587b50e598f8d1083a", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-record.json", + "original_sha256": "b92c2b84e7e937f01ed59122e94bc519cef3c04cab49cfdc55495f34f5b223a5", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json", + "public_sha256": "b92c2b84e7e937f01ed59122e94bc519cef3c04cab49cfdc55495f34f5b223a5", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json", + "original_sha256": "7deb11e965c1cae47585fbd5c8c2ec9d3f59c340f8362675ae987b28e12665e6", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json", + "public_sha256": "7deb11e965c1cae47585fbd5c8c2ec9d3f59c340f8362675ae987b28e12665e6", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json", + "original_sha256": "4fdec7debffb2f9e8e5adb85f7f55af46d324b29ba97a462afea1b3e651b6d06", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json", + "public_sha256": "4fdec7debffb2f9e8e5adb85f7f55af46d324b29ba97a462afea1b3e651b6d06", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json", + "original_sha256": "0b4ddd6947f7ae426ccf89eab3793006eec2f3a4c406d32b0f117c3b196bc761", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json", + "public_sha256": "0b4ddd6947f7ae426ccf89eab3793006eec2f3a4c406d32b0f117c3b196bc761", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/tests.log", + "original_sha256": "88cc2d6ceafc92ef4227155decaf32c022768416516a1197c4f56d6bb39d213e", + "public": "docs/validation/paste-copy/cohorts/owned-full-phone100-v6/tests.log", + "public_sha256": "88cc2d6ceafc92ef4227155decaf32c022768416516a1197c4f56d6bb39d213e", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-record.json", + "original_sha256": "323e9975191061985e50d19a3686b2bd97022293ca8d3a84176808ed031e0c81", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json", + "public_sha256": "323e9975191061985e50d19a3686b2bd97022293ca8d3a84176808ed031e0c81", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json", + "original_sha256": "9dc7feaf9f2c91c0e7ffe7e6d0e668d40460f77f61b6b672f1a875cb23cb5cb6", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json", + "public_sha256": "9dc7feaf9f2c91c0e7ffe7e6d0e668d40460f77f61b6b672f1a875cb23cb5cb6", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "6e8926818a4228323c9b3cd234d9be2ecefbdf898d41b2a92879c49c5aac10bc", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "6e8926818a4228323c9b3cd234d9be2ecefbdf898d41b2a92879c49c5aac10bc", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-record.json", + "original_sha256": "911cd77c205d6df6c456be5e5a1da57b9099cb4338becd3f4c04e619a89b5e47", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json", + "public_sha256": "911cd77c205d6df6c456be5e5a1da57b9099cb4338becd3f4c04e619a89b5e47", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json", + "original_sha256": "738f0f7b0966b753dc0abc7c575fd37de41eed0c1099313c2eb281473bf72c34", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-pointercopyisexactonceandreturns-record.json", + "public_sha256": "738f0f7b0966b753dc0abc7c575fd37de41eed0c1099313c2eb281473bf72c34", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json", + "original_sha256": "a97150d69f90b372fd5f6166010b3f0f3a1554362a3924d399dbfe6d6b3d895f", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json", + "public_sha256": "a97150d69f90b372fd5f6166010b3f0f3a1554362a3924d399dbfe6d6b3d895f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json", + "original_sha256": "2a52576ccf4ddb4262419906fc136074caee6f430f0c4cd3d064b523689c56e9", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json", + "public_sha256": "2a52576ccf4ddb4262419906fc136074caee6f430f0c4cd3d064b523689c56e9", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-record.json", + "original_sha256": "443ebb8debe6bf1a745fcfdbd3a47f6aa421bfcd6a785fe2677e1018a564a77f", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json", + "public_sha256": "443ebb8debe6bf1a745fcfdbd3a47f6aa421bfcd6a785fe2677e1018a564a77f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json", + "original_sha256": "e52b8e77ba284c3cdcf516af57704ebeacdcdf68f23d138b2c81264b49b12629", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json", + "public_sha256": "e52b8e77ba284c3cdcf516af57704ebeacdcdf68f23d138b2c81264b49b12629", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-record.json", + "original_sha256": "650cd4ef2afae8ec4c898738bb8e9ce6e013d097ea2836b5e956fba499d278db", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json", + "public_sha256": "650cd4ef2afae8ec4c898738bb8e9ce6e013d097ea2836b5e956fba499d278db", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json", + "original_sha256": "9ff95354a80250080998c64d190ef67224434741f073b79439fe4675ddcbc5a5", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json", + "public_sha256": "9ff95354a80250080998c64d190ef67224434741f073b79439fe4675ddcbc5a5", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json", + "original_sha256": "ee6861878364a9ae18a756b28580915f74d3565d96a45a933c485e04a3fa1fb5", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json", + "public_sha256": "ee6861878364a9ae18a756b28580915f74d3565d96a45a933c485e04a3fa1fb5", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json", + "original_sha256": "e6fdc34dc168ca0a5428149d8eeaa9ea1009f41d61fc492aad8d3edf8ace1308", + "public": "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json", + "public_sha256": "e6fdc34dc168ca0a5428149d8eeaa9ea1009f41d61fc492aad8d3edf8ace1308", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/tests.log", + "original_sha256": "4ebbf51ad22daff8f886c4d3f7751e4a7f8e300f6109c0c0d59a691618a50df0", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/tests.log", + "public_sha256": "4ebbf51ad22daff8f886c4d3f7751e4a7f8e300f6109c0c0d59a691618a50df0", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json", + "original_sha256": "ad20cfc72ab77a205a0946f88ac4ccb54d044cfcdb2f0fb40caa035054b935c4", + "public": "docs/validation/paste-copy/cases/owned-unicode-tablet200-v6/pastecopy-pointercopyisexactonceandreturns-record.json", + "public_sha256": "ad20cfc72ab77a205a0946f88ac4ccb54d044cfcdb2f0fb40caa035054b935c4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/tests.log", + "original_sha256": "756e976d536677fa347c01c77be67bdc91238cae9bebe4df3d487fe156705697", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/tests.log", + "public_sha256": "756e976d536677fa347c01c77be67bdc91238cae9bebe4df3d487fe156705697", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "a53900e879bb4fe4bdf58faff361ff7f33a14eb2a8cc11d1d52ca8417d525b9c", + "public": "docs/validation/paste-copy/cases/owned-keyboard-tablet200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "a53900e879bb4fe4bdf58faff361ff7f33a14eb2a8cc11d1d52ca8417d525b9c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/tests.log", + "original_sha256": "b9d7adfc2dee81b845a0aaa2ea0d1ef9c1a47444eb6f410b56c79b5f4dba7ee9", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/tests.log", + "public_sha256": "b9d7adfc2dee81b845a0aaa2ea0d1ef9c1a47444eb6f410b56c79b5f4dba7ee9", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json", + "original_sha256": "21b431d1fedab32515e5ef9112b7c8ea0db9cb0a3dab8921a6533005e67f0ad9", + "public": "docs/validation/paste-copy/cases/owned-unicode-phone200-v6/pastecopy-pointercopyisexactonceandreturns-record.json", + "public_sha256": "21b431d1fedab32515e5ef9112b7c8ea0db9cb0a3dab8921a6533005e67f0ad9", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/tests.log", + "original_sha256": "dbf0126342e4b4851e40e18eb1339b58075bbcace76a225660d0511b2e2e31f7", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/tests.log", + "public_sha256": "dbf0126342e4b4851e40e18eb1339b58075bbcace76a225660d0511b2e2e31f7", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "fbe589d8e320b4b0138c97c053c3b95fbae3a811381e57d2a8d0431c7914bad8", + "public": "docs/validation/paste-copy/cases/owned-keyboard-phone200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "fbe589d8e320b4b0138c97c053c3b95fbae3a811381e57d2a8d0431c7914bad8", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/tests.log", + "original_sha256": "33014f341bf3360e4f1dbdb601b723254165a21bb8f2e5dd44f7561078904b83", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/tests.log", + "public_sha256": "33014f341bf3360e4f1dbdb601b723254165a21bb8f2e5dd44f7561078904b83", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json", + "original_sha256": "0f7d603efde284aab27d38f5035a12fe18f94fb6ccc0170a68019743509fb00a", + "public": "docs/validation/paste-copy/cases/owned-unicode-landscape200-v6/pastecopy-pointercopyisexactonceandreturns-record.json", + "public_sha256": "0f7d603efde284aab27d38f5035a12fe18f94fb6ccc0170a68019743509fb00a", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/tests.log", + "original_sha256": "30de57f3ebc1a265958896bbe32699e4ce9e335079819c065418469ae4cca755", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/tests.log", + "public_sha256": "30de57f3ebc1a265958896bbe32699e4ce9e335079819c065418469ae4cca755", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "329488c96964a692e5f50286ca2b058ad5ca771cd8316ae5530b519c7b04b625", + "public": "docs/validation/paste-copy/cases/owned-keyboard-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "329488c96964a692e5f50286ca2b058ad5ca771cd8316ae5530b519c7b04b625", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/tests.log", + "original_sha256": "f18f876dcead5ead050df11b2697a49727667975e128681ba29ff87a73bba745", + "public": "docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/tests.log", + "public_sha256": "f18f876dcead5ead050df11b2697a49727667975e128681ba29ff87a73bba745", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json", + "original_sha256": "4cb8571d86843bafb4ed742579452ad8f9242a3cc0edfca6062217abcdbedc90", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json", + "public_sha256": "4cb8571d86843bafb4ed742579452ad8f9242a3cc0edfca6062217abcdbedc90", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json", + "original_sha256": "6f4702b7294c4775078e52014cb3719be1db9248bc419a7aeb5ba5088b4958bf", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json", + "public_sha256": "6f4702b7294c4775078e52014cb3719be1db9248bc419a7aeb5ba5088b4958bf", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-record.json", + "original_sha256": "1cb0fbeef1f9eeaa652bf1ae151fc67797caab0fb08160ad09bd6e161582dc08", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json", + "public_sha256": "1cb0fbeef1f9eeaa652bf1ae151fc67797caab0fb08160ad09bd6e161582dc08", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-record.json", + "original_sha256": "129fe0b50bc626803ec6876f3cfcf76a578411416ea4b6dc9c41d5dddb69d324", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json", + "public_sha256": "129fe0b50bc626803ec6876f3cfcf76a578411416ea4b6dc9c41d5dddb69d324", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json", + "original_sha256": "6d9ec817c0aed2b65a367379d0b3365393b1063381b168045b75cddc0278044e", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json", + "public_sha256": "6d9ec817c0aed2b65a367379d0b3365393b1063381b168045b75cddc0278044e", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json", + "original_sha256": "284854c2eaf45fb55bcd99501eb19be5094e8f8625eb2c18d1095b46724a14d5", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json", + "public_sha256": "284854c2eaf45fb55bcd99501eb19be5094e8f8625eb2c18d1095b46724a14d5", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json", + "original_sha256": "e725aab9ca8d6e942c9cac76df5ff17a830cec0a23419ea51052191f04a3380b", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json", + "public_sha256": "e725aab9ca8d6e942c9cac76df5ff17a830cec0a23419ea51052191f04a3380b", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json", + "original_sha256": "c0790c5cda9e4d67f2271d35bd41ba026b4aa66d8ecf02f2f918f634bf429c3a", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json", + "public_sha256": "c0790c5cda9e4d67f2271d35bd41ba026b4aa66d8ecf02f2f918f634bf429c3a", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json", + "original_sha256": "97b15613c4337e43a3aaf9942fb26fd95397876d1420080a9e66b60c9facac00", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json", + "public_sha256": "97b15613c4337e43a3aaf9942fb26fd95397876d1420080a9e66b60c9facac00", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json", + "original_sha256": "984d5a15aad17fae3af496369bf0e00f3fd54654d19cc2f9138545236a03b648", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json", + "public_sha256": "984d5a15aad17fae3af496369bf0e00f3fd54654d19cc2f9138545236a03b648", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json", + "original_sha256": "cfc08f4b51c88a0192178edea7915723484cf05714742c69bc47edabd19e0aa5", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json", + "public_sha256": "cfc08f4b51c88a0192178edea7915723484cf05714742c69bc47edabd19e0aa5", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json", + "original_sha256": "f447cdd002310a43327c9b6e106aaa74d5b833e172a882852dea6ffc7c13402f", + "public": "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json", + "public_sha256": "f447cdd002310a43327c9b6e106aaa74d5b833e172a882852dea6ffc7c13402f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/tests.log", + "original_sha256": "4de74f9618ae8217120adacb13b4bd907c6cf620cc44818eb4862ce59ed62fd7", + "public": "docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/tests.log", + "public_sha256": "4de74f9618ae8217120adacb13b4bd907c6cf620cc44818eb4862ce59ed62fd7", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json", + "original_sha256": "d2ac1793b6e4e4da2972753f2fa2dccde3027c24341ebffa6b143528ce8dd8e4", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json", + "public_sha256": "d2ac1793b6e4e4da2972753f2fa2dccde3027c24341ebffa6b143528ce8dd8e4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-record.json", + "original_sha256": "d8b79d5263d28e05136125d6610dffb2b38ca7be2d2f781a725d207ad4fc7f46", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json", + "public_sha256": "d8b79d5263d28e05136125d6610dffb2b38ca7be2d2f781a725d207ad4fc7f46", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-record.json", + "original_sha256": "fcc35f4020b40fc05ea527bfee90ceeeabaf8992e0783449d221109adced2d4e", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json", + "public_sha256": "fcc35f4020b40fc05ea527bfee90ceeeabaf8992e0783449d221109adced2d4e", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-record.json", + "original_sha256": "de2c8ff225897a35dfc40bdd8511683a80fda5f06d886eca7d8aa20d8d9f1409", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json", + "public_sha256": "de2c8ff225897a35dfc40bdd8511683a80fda5f06d886eca7d8aa20d8d9f1409", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-record.json", + "original_sha256": "30057737936f6530096ac566d875d0290915f7f6abbc070d62d89a3c75350e1b", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json", + "public_sha256": "30057737936f6530096ac566d875d0290915f7f6abbc070d62d89a3c75350e1b", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json", + "original_sha256": "21ff3a958f957afeaa9e842014afcbf75699601a231d2ddab8f4c890cd5bb205", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json", + "public_sha256": "21ff3a958f957afeaa9e842014afcbf75699601a231d2ddab8f4c890cd5bb205", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-record.json", + "original_sha256": "a1571826e97da3f50f982cc2ab10f25191902c7fba799a76789a5c09b84779dd", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json", + "public_sha256": "a1571826e97da3f50f982cc2ab10f25191902c7fba799a76789a5c09b84779dd", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json", + "original_sha256": "bd56018802f27f36f0ef4b5a1bf85aa936bb3b5d250f2c3e40fd95650bad063d", + "public": "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json", + "public_sha256": "bd56018802f27f36f0ef4b5a1bf85aa936bb3b5d250f2c3e40fd95650bad063d", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/tests.log", + "original_sha256": "725139daf98d7ac4a875a88d890416b569c90932d9a425de20f33d45508db2b5", + "public": "docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/tests.log", + "public_sha256": "725139daf98d7ac4a875a88d890416b569c90932d9a425de20f33d45508db2b5", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json", + "original_sha256": "01564a06e761039edae2c425bf28833474e043421eee87447d9a619cbe43eef2", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json", + "public_sha256": "01564a06e761039edae2c425bf28833474e043421eee87447d9a619cbe43eef2", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json", + "original_sha256": "5d3b6fb42912c7d0f154c323fa8a2ec7f567b4448e920841823a733c20a5b374", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json", + "public_sha256": "5d3b6fb42912c7d0f154c323fa8a2ec7f567b4448e920841823a733c20a5b374", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-record.json", + "original_sha256": "982657130a3e5a49deb4d98423eb3003f36fcbf15c61ae4199c73178129ecc91", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json", + "public_sha256": "982657130a3e5a49deb4d98423eb3003f36fcbf15c61ae4199c73178129ecc91", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-record.json", + "original_sha256": "f76b6a6f72a1fc523d26da5aa7f22ebbf35e16643cbbdda90b2466a0700c1af1", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json", + "public_sha256": "f76b6a6f72a1fc523d26da5aa7f22ebbf35e16643cbbdda90b2466a0700c1af1", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json", + "original_sha256": "765023aae3740b2589fe231c7bdb0969330b1c00243b176bf2e7dec0b6e2d6f7", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json", + "public_sha256": "765023aae3740b2589fe231c7bdb0969330b1c00243b176bf2e7dec0b6e2d6f7", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json", + "original_sha256": "8c6d1ab47c7aef2b765aefa5ab329da5d8ad97c6a70ad55eaad8dc4ad38d396f", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json", + "public_sha256": "8c6d1ab47c7aef2b765aefa5ab329da5d8ad97c6a70ad55eaad8dc4ad38d396f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json", + "original_sha256": "c7ac014273ae63c7a9a95e3a1d4229856f5a117ca1a66d323784014662b05df6", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json", + "public_sha256": "c7ac014273ae63c7a9a95e3a1d4229856f5a117ca1a66d323784014662b05df6", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json", + "original_sha256": "06349d46c7b6b5958ae864f151141230c959249dfbeadd9395cd0dc455831ccf", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json", + "public_sha256": "06349d46c7b6b5958ae864f151141230c959249dfbeadd9395cd0dc455831ccf", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json", + "original_sha256": "8ea6e687be10f707e726f06a5c1c5fa8537dc6530c7617f1d884cbe923fbd9ab", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json", + "public_sha256": "8ea6e687be10f707e726f06a5c1c5fa8537dc6530c7617f1d884cbe923fbd9ab", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json", + "original_sha256": "c98180e2cc2a1feae2d937eca3773c043d8dd943f23c4df66e7327c9b082947b", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json", + "public_sha256": "c98180e2cc2a1feae2d937eca3773c043d8dd943f23c4df66e7327c9b082947b", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json", + "original_sha256": "3d9ccab1505011ece4a67d23c24a353383ed8a2a37efa50acb4b5b1c1c4f6425", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json", + "public_sha256": "3d9ccab1505011ece4a67d23c24a353383ed8a2a37efa50acb4b5b1c1c4f6425", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json", + "original_sha256": "96e36e6ccc94d4602f92b76ee0d97b1ba26ff70b162186a01bc4a0aa760b7119", + "public": "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json", + "public_sha256": "96e36e6ccc94d4602f92b76ee0d97b1ba26ff70b162186a01bc4a0aa760b7119", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/tests.log", + "original_sha256": "1984ff040d1de505bbfb8b9f73a5ddfa4e5f08963827487da6863844fc32d49e", + "public": "docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/tests.log", + "public_sha256": "1984ff040d1de505bbfb8b9f73a5ddfa4e5f08963827487da6863844fc32d49e", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json", + "original_sha256": "40ac98236ad52069af1e77003af915a9139a2d7ef5ef023d0aa82d07781c803f", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json", + "public_sha256": "40ac98236ad52069af1e77003af915a9139a2d7ef5ef023d0aa82d07781c803f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-record.json", + "original_sha256": "4fdf1c96df71c3b52436b1568c065b048a9e06841f87177ac6ce50704480453f", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json", + "public_sha256": "4fdf1c96df71c3b52436b1568c065b048a9e06841f87177ac6ce50704480453f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-record.json", + "original_sha256": "e1bfa790ecdb94caf4b74cc1a54d664821cdb27a7082cc13eef3a273b79d2690", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json", + "public_sha256": "e1bfa790ecdb94caf4b74cc1a54d664821cdb27a7082cc13eef3a273b79d2690", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-record.json", + "original_sha256": "cf499a406348e6a1450d94f9e0e47a272cdd1e1a85e902788ded861deee730ba", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json", + "public_sha256": "cf499a406348e6a1450d94f9e0e47a272cdd1e1a85e902788ded861deee730ba", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-record.json", + "original_sha256": "94434a7e4a54fb2bcdb1f7a355185fc969b72490a48d69f5fe50d52146de4ee9", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json", + "public_sha256": "94434a7e4a54fb2bcdb1f7a355185fc969b72490a48d69f5fe50d52146de4ee9", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json", + "original_sha256": "da82a1f87bc1dda1a3d17f976e83d029096b3672f70ce9766927048c156c1eb8", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json", + "public_sha256": "da82a1f87bc1dda1a3d17f976e83d029096b3672f70ce9766927048c156c1eb8", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-record.json", + "original_sha256": "a48cc459a8fa1e4327be51c2593ded001a080c65ba8ad2c72e50c8900e77508d", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json", + "public_sha256": "a48cc459a8fa1e4327be51c2593ded001a080c65ba8ad2c72e50c8900e77508d", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json", + "original_sha256": "327eb25af47e1b9a536d2f45b1c13feb177b51fb8865207fdf0fb3288e356307", + "public": "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json", + "public_sha256": "327eb25af47e1b9a536d2f45b1c13feb177b51fb8865207fdf0fb3288e356307", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/matched-old-tablet100-v2/cohort/tests.log", + "original_sha256": "1e90fca6cd0ee1ab2f0df7912ff6f6935965b6f40bab037a858f4eb1b894671d", + "public": "docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/tests.log", + "public_sha256": "1e90fca6cd0ee1ab2f0df7912ff6f6935965b6f40bab037a858f4eb1b894671d", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "94d0e11449fef13a2433a414baf6c61c64e3b24bb1654d6e4f1edb8b9532c742", + "public": "docs/validation/paste-copy/cases/matched-old-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "94d0e11449fef13a2433a414baf6c61c64e3b24bb1654d6e4f1edb8b9532c742", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/matched-old-phone100-v2/cohort/tests.log", + "original_sha256": "cd2d30ff37b8fef08950e81142eb096df30102b417b83e95d8a63e05c5ff4d63", + "public": "docs/validation/paste-copy/cohorts/matched-old-phone100-v2/tests.log", + "public_sha256": "cd2d30ff37b8fef08950e81142eb096df30102b417b83e95d8a63e05c5ff4d63", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "c3e861af47cc33cea6505495cb111fc009b891be6cce7d94b9177160d11dd83b", + "public": "docs/validation/paste-copy/cases/matched-old-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "c3e861af47cc33cea6505495cb111fc009b891be6cce7d94b9177160d11dd83b", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/tests.log", + "original_sha256": "f7371ca562324375d38fd0776a616b388dbd9e32dafa466c44c85c6629542255", + "public": "docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/tests.log", + "public_sha256": "f7371ca562324375d38fd0776a616b388dbd9e32dafa466c44c85c6629542255", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "9a86f7e18400af59e3736b9c55a54ffec92c236eb13f9159e7a935da40e1f982", + "public": "docs/validation/paste-copy/cases/matched-legacy-reveal-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "9a86f7e18400af59e3736b9c55a54ffec92c236eb13f9159e7a935da40e1f982", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/tests.log", + "original_sha256": "e8c712d77dbbe68f89bd859895fc7599a82cf2aec74b6abcc5bb4a720bb504dc", + "public": "docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/tests.log", + "public_sha256": "e8c712d77dbbe68f89bd859895fc7599a82cf2aec74b6abcc5bb4a720bb504dc", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "original_sha256": "ae61e2e3017492fc6e12b8467bb0f6760670bff8bdbdf98b286bdddf4980ab6e", + "public": "docs/validation/paste-copy/cases/paste-pending-tablet100-v1/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json", + "public_sha256": "ae61e2e3017492fc6e12b8467bb0f6760670bff8bdbdf98b286bdddf4980ab6e", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/tests.log", + "original_sha256": "e3209c3acec284f5ac00d0a11a98e6dd19a37ec35750fe89f69eed5a06dc8030", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/tests.log", + "public_sha256": "e3209c3acec284f5ac00d0a11a98e6dd19a37ec35750fe89f69eed5a06dc8030", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json", + "original_sha256": "8b80af38afcbf7ebe8dd2eb3aaf149fb793e9e2b35731df2be60a412887da798", + "public": "docs/validation/paste-copy/cases/owned-unicode-tablet100-v3/pastecopy-pointercopyisexactonceandreturns-record.json", + "public_sha256": "8b80af38afcbf7ebe8dd2eb3aaf149fb793e9e2b35731df2be60a412887da798", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/tests.log", + "original_sha256": "750d81dbc22d1c61689d5bf1e82963ab7b198103e69069f8b613281cf9b61e5a", + "public": "docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/tests.log", + "public_sha256": "750d81dbc22d1c61689d5bf1e82963ab7b198103e69069f8b613281cf9b61e5a", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-record.json", + "original_sha256": "235be41fb161b169de3a092a8c3071a335c6d67d9a18a57d70fa46726c954a2c", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-closingotherenginescannotclearthecurrentowner-record.json", + "public_sha256": "235be41fb161b169de3a092a8c3071a335c6d67d9a18a57d70fa46726c954a2c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json", + "original_sha256": "fae33d5c1e123397b58b4b88ba6eee2d40582d1a0fb20a6ee235157db057cc66", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json", + "public_sha256": "fae33d5c1e123397b58b4b88ba6eee2d40582d1a0fb20a6ee235157db057cc66", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "14e0a32cfdb6079457c4a62a3b0c6356e953c6eda6aacfb6e98c9d857160fee4", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "14e0a32cfdb6079457c4a62a3b0c6356e953c6eda6aacfb6e98c9d857160fee4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-record.json", + "original_sha256": "feb409ed20940b4704e67dd34592df3beb27af6a2cf0f7e1b902598e63bc1603", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-losingwindowfocusrejectsretainedcopy-record.json", + "public_sha256": "feb409ed20940b4704e67dd34592df3beb27af6a2cf0f7e1b902598e63bc1603", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json", + "original_sha256": "b4c90f059a8f9dab7e5dc926c147e66146191b6a96cb606d31a216cc0e0b55cb", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-pointercopyisexactonceandreturns-record.json", + "public_sha256": "b4c90f059a8f9dab7e5dc926c147e66146191b6a96cb606d31a216cc0e0b55cb", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json", + "original_sha256": "4c53b914f4180e436e733d7f47f0b4285d64e1f0218d29ad705423b8038cefd7", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json", + "public_sha256": "4c53b914f4180e436e733d7f47f0b4285d64e1f0218d29ad705423b8038cefd7", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-record.json", + "original_sha256": "1d88408a4ac9932b443af104c92b60d6fb06e5fa62543bd1b105aa4c843b2371", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-recreationclearsthebufferanddisposedcopy-record.json", + "public_sha256": "1d88408a4ac9932b443af104c92b60d6fb06e5fa62543bd1b105aa4c843b2371", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json", + "original_sha256": "6f1b6ca70cfb27fee9c9df98d6af11668acd49e82855ae2a0c520d2bec9701aa", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json", + "public_sha256": "6f1b6ca70cfb27fee9c9df98d6af11668acd49e82855ae2a0c520d2bec9701aa", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-record.json", + "original_sha256": "368c899e60d06dc0d640812273047a4aea5ae5fd53e1b58381f21b32a6fcc6d1", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-returnandescapecancelwithoutcopy-record.json", + "public_sha256": "368c899e60d06dc0d640812273047a4aea5ae5fd53e1b58381f21b32a6fcc6d1", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json", + "original_sha256": "54ceddd6c7d233dcce4e0d26aba3c2c6373e50ecbb4c67e616fd03ddf0a5e02c", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json", + "public_sha256": "54ceddd6c7d233dcce4e0d26aba3c2c6373e50ecbb4c67e616fd03ddf0a5e02c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json", + "original_sha256": "3f042ed38505c3ce9569803076205ccaa84260a94d344598a09228a3e5f91489", + "public": "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json", + "public_sha256": "3f042ed38505c3ce9569803076205ccaa84260a94d344598a09228a3e5f91489", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/tests.log", + "original_sha256": "256a517050cba61752e40b958f38ec4ef610c77bdc3320035166763789515731", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/tests.log", + "public_sha256": "256a517050cba61752e40b958f38ec4ef610c77bdc3320035166763789515731", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "original_sha256": "c06ba635054a7d279d2805e9664254f4a83fe7b8cce6dc0b049df0d3c2e63764", + "public": "docs/validation/paste-copy/cases/owned-keyboard-landscape200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json", + "public_sha256": "c06ba635054a7d279d2805e9664254f4a83fe7b8cce6dc0b049df0d3c2e63764", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png", + "original_sha256": "c5fc50261a2d214d2690e06055a1d76d9f3ad0d18db9be10c7a612c1f4b993ea", + "public": "docs/screenshots/paste-copy/tablet100-pending.png", + "public_sha256": "c5fc50261a2d214d2690e06055a1d76d9f3ad0d18db9be10c7a612c1f4b993ea", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml", + "original_sha256": "ca597830cb26cb460733662715c8194b5de72ca1b59dcb78f6519fef1849b787", + "public": "docs/validation/paste-copy/frames/tablet100-pending.xml", + "public_sha256": "ca597830cb26cb460733662715c8194b5de72ca1b59dcb78f6519fef1849b787", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json", + "original_sha256": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "public": "docs/validation/paste-copy/frames/tablet100-pending-frame.json", + "public_sha256": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png", + "original_sha256": "4dfe74af7b0577be2379bc024c7f647a4ae0805fb04968ed662f41005f82f0d6", + "public": "docs/screenshots/paste-copy/tablet100-copied.png", + "public_sha256": "4dfe74af7b0577be2379bc024c7f647a4ae0805fb04968ed662f41005f82f0d6", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml", + "original_sha256": "61fc70bc7d92e81ddf1eda65552a636bdbb1064bc2b2e1d0b944e291c6e107d8", + "public": "docs/validation/paste-copy/frames/tablet100-copied.xml", + "public_sha256": "61fc70bc7d92e81ddf1eda65552a636bdbb1064bc2b2e1d0b944e291c6e107d8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json", + "original_sha256": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "public": "docs/validation/paste-copy/frames/tablet100-copied-frame.json", + "public_sha256": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png", + "original_sha256": "78faaef6d78386b25d58f4e11ecd9f401b80192b364c81cab5f45d296ad70448", + "public": "docs/screenshots/paste-copy/tablet100-source-return.png", + "public_sha256": "78faaef6d78386b25d58f4e11ecd9f401b80192b364c81cab5f45d296ad70448", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml", + "original_sha256": "49f647a2647d56adddeb212c65bd3bcb7813751bdd5b2ca757b22f525e8ed4c7", + "public": "docs/validation/paste-copy/frames/tablet100-source-return.xml", + "public_sha256": "49f647a2647d56adddeb212c65bd3bcb7813751bdd5b2ca757b22f525e8ed4c7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json", + "original_sha256": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "public": "docs/validation/paste-copy/frames/tablet100-source-return-frame.json", + "public_sha256": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png", + "original_sha256": "cc9ee90d00a28d464ae765bf7c6be23ba6bad63885d622c43571f3228a215524", + "public": "docs/screenshots/paste-copy/tablet200-pending.png", + "public_sha256": "cc9ee90d00a28d464ae765bf7c6be23ba6bad63885d622c43571f3228a215524", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml", + "original_sha256": "0295994a33d510e8b627cd9f357bc6ca123054212d86bdb6b0b82dbbe3cd5678", + "public": "docs/validation/paste-copy/frames/tablet200-pending.xml", + "public_sha256": "0295994a33d510e8b627cd9f357bc6ca123054212d86bdb6b0b82dbbe3cd5678", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json", + "original_sha256": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "public": "docs/validation/paste-copy/frames/tablet200-pending-frame.json", + "public_sha256": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png", + "original_sha256": "95aef3551f1c2c1dc7ebda5a76043994f1ad1cbf59f07bcd8f17ff55f391220f", + "public": "docs/screenshots/paste-copy/tablet200-copied.png", + "public_sha256": "95aef3551f1c2c1dc7ebda5a76043994f1ad1cbf59f07bcd8f17ff55f391220f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml", + "original_sha256": "1852060ae14440d4d0e54105cdf3ba51a968fb599cb010182ef7a9fe34f251ee", + "public": "docs/validation/paste-copy/frames/tablet200-copied.xml", + "public_sha256": "1852060ae14440d4d0e54105cdf3ba51a968fb599cb010182ef7a9fe34f251ee", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json", + "original_sha256": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "public": "docs/validation/paste-copy/frames/tablet200-copied-frame.json", + "public_sha256": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png", + "original_sha256": "378820908f5caf71f68de057c3fc20d7fbf97113c5d47aa1cd7007bbd8643b07", + "public": "docs/screenshots/paste-copy/tablet200-source-return.png", + "public_sha256": "378820908f5caf71f68de057c3fc20d7fbf97113c5d47aa1cd7007bbd8643b07", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml", + "original_sha256": "ecd6750343df9d8c8f5dedf47454433112681aad9fc538513125b56368f9c612", + "public": "docs/validation/paste-copy/frames/tablet200-source-return.xml", + "public_sha256": "ecd6750343df9d8c8f5dedf47454433112681aad9fc538513125b56368f9c612", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json", + "original_sha256": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "public": "docs/validation/paste-copy/frames/tablet200-source-return-frame.json", + "public_sha256": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png", + "original_sha256": "d5866db245fe21e3a00ede3b67cf56fdf9ec06748f8f3f868b731da37204174b", + "public": "docs/screenshots/paste-copy/phone100-pending.png", + "public_sha256": "d5866db245fe21e3a00ede3b67cf56fdf9ec06748f8f3f868b731da37204174b", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml", + "original_sha256": "9e4cd513636f81f02c3972c7246f4e5bd4ede0d03106e73a951876dea970e7bf", + "public": "docs/validation/paste-copy/frames/phone100-pending.xml", + "public_sha256": "9e4cd513636f81f02c3972c7246f4e5bd4ede0d03106e73a951876dea970e7bf", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json", + "original_sha256": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "public": "docs/validation/paste-copy/frames/phone100-pending-frame.json", + "public_sha256": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png", + "original_sha256": "73267743e5faadba26226dc12b5e34cb22ccbaec4a31105ddf2ca933d0dd0d50", + "public": "docs/screenshots/paste-copy/phone100-copied.png", + "public_sha256": "73267743e5faadba26226dc12b5e34cb22ccbaec4a31105ddf2ca933d0dd0d50", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml", + "original_sha256": "4d5011527e6932c03eaa6af53b03f6459093fb5f71460a08c33a5db4775f3d43", + "public": "docs/validation/paste-copy/frames/phone100-copied.xml", + "public_sha256": "4d5011527e6932c03eaa6af53b03f6459093fb5f71460a08c33a5db4775f3d43", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json", + "original_sha256": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "public": "docs/validation/paste-copy/frames/phone100-copied-frame.json", + "public_sha256": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png", + "original_sha256": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "public": "docs/screenshots/paste-copy/phone100-source-return.png", + "public_sha256": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml", + "original_sha256": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "public": "docs/validation/paste-copy/frames/phone100-source-return.xml", + "public_sha256": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json", + "original_sha256": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "public": "docs/validation/paste-copy/frames/phone100-source-return-frame.json", + "public_sha256": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png", + "original_sha256": "1ec7a14db79e96bb8f37f0e40578c147df24a8d20faaa5d1529eadd01faf74c8", + "public": "docs/screenshots/paste-copy/phone200-pending.png", + "public_sha256": "1ec7a14db79e96bb8f37f0e40578c147df24a8d20faaa5d1529eadd01faf74c8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml", + "original_sha256": "84c67c5106abdf20adfe6c333b4dad21e645463d03b943ef6d52f11b757c2118", + "public": "docs/validation/paste-copy/frames/phone200-pending.xml", + "public_sha256": "84c67c5106abdf20adfe6c333b4dad21e645463d03b943ef6d52f11b757c2118", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json", + "original_sha256": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "public": "docs/validation/paste-copy/frames/phone200-pending-frame.json", + "public_sha256": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png", + "original_sha256": "51037b91f7dcfcb729e822ee3772e39574de5fc40c4c75a1df1482dcd346a309", + "public": "docs/screenshots/paste-copy/phone200-copied.png", + "public_sha256": "51037b91f7dcfcb729e822ee3772e39574de5fc40c4c75a1df1482dcd346a309", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml", + "original_sha256": "56797a379cd51fad4bd80b59d35ac9d63784800f673f249466563712074880fe", + "public": "docs/validation/paste-copy/frames/phone200-copied.xml", + "public_sha256": "56797a379cd51fad4bd80b59d35ac9d63784800f673f249466563712074880fe", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json", + "original_sha256": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "public": "docs/validation/paste-copy/frames/phone200-copied-frame.json", + "public_sha256": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png", + "original_sha256": "d461f15cfa7050a129b2d968cbf75bfd8ec8aa853e28a0f2faa83f52cdff359e", + "public": "docs/screenshots/paste-copy/phone200-source-return.png", + "public_sha256": "d461f15cfa7050a129b2d968cbf75bfd8ec8aa853e28a0f2faa83f52cdff359e", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml", + "original_sha256": "037c91c7966ea2db57b5d29f3289a1b660a8ec530bb530bf1c137b4aaa55ece6", + "public": "docs/validation/paste-copy/frames/phone200-source-return.xml", + "public_sha256": "037c91c7966ea2db57b5d29f3289a1b660a8ec530bb530bf1c137b4aaa55ece6", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json", + "original_sha256": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "public": "docs/validation/paste-copy/frames/phone200-source-return-frame.json", + "public_sha256": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png", + "original_sha256": "abf4caabbbca026ed8bc3255d42e2a04bc46b9308ffe7832f44a13ad86ba76a2", + "public": "docs/screenshots/paste-copy/landscape100-pending.png", + "public_sha256": "abf4caabbbca026ed8bc3255d42e2a04bc46b9308ffe7832f44a13ad86ba76a2", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml", + "original_sha256": "05c9314121159fb59f0f35c0600c43e777aa426a89a40514b6cfa106925565df", + "public": "docs/validation/paste-copy/frames/landscape100-pending.xml", + "public_sha256": "05c9314121159fb59f0f35c0600c43e777aa426a89a40514b6cfa106925565df", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json", + "original_sha256": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "public": "docs/validation/paste-copy/frames/landscape100-pending-frame.json", + "public_sha256": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png", + "original_sha256": "2c208ffd75a697e2281997019fc3604b02f2c6ff77f2ae480e1052dc3c0541ee", + "public": "docs/screenshots/paste-copy/landscape100-copied.png", + "public_sha256": "2c208ffd75a697e2281997019fc3604b02f2c6ff77f2ae480e1052dc3c0541ee", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml", + "original_sha256": "53642be2c03acc86dfc3779f5d9f3f16cc604f997668e53ab134ece38622a1f9", + "public": "docs/validation/paste-copy/frames/landscape100-copied.xml", + "public_sha256": "53642be2c03acc86dfc3779f5d9f3f16cc604f997668e53ab134ece38622a1f9", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json", + "original_sha256": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "public": "docs/validation/paste-copy/frames/landscape100-copied-frame.json", + "public_sha256": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png", + "original_sha256": "29733d3df53a7e0c402e1259cee63730199707cf1fd40f28437f6d9ec3a7eeb1", + "public": "docs/screenshots/paste-copy/landscape100-source-return.png", + "public_sha256": "29733d3df53a7e0c402e1259cee63730199707cf1fd40f28437f6d9ec3a7eeb1", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml", + "original_sha256": "efed08a0d8ad53e3acf44410d6282a5c5c0bd0ca195daea1edfd4dd436c6f9b5", + "public": "docs/validation/paste-copy/frames/landscape100-source-return.xml", + "public_sha256": "efed08a0d8ad53e3acf44410d6282a5c5c0bd0ca195daea1edfd4dd436c6f9b5", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json", + "original_sha256": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "public": "docs/validation/paste-copy/frames/landscape100-source-return-frame.json", + "public_sha256": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png", + "original_sha256": "8a3a6225ffcdb5779b0c181f22e219ee25a7f30b4f5e40bda9aa2e0a6651bc4e", + "public": "docs/screenshots/paste-copy/landscape200-pending.png", + "public_sha256": "8a3a6225ffcdb5779b0c181f22e219ee25a7f30b4f5e40bda9aa2e0a6651bc4e", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml", + "original_sha256": "9d3cc9d132b59186084aae32ad8dcded35184d3401c81894a035adde56c2e64b", + "public": "docs/validation/paste-copy/frames/landscape200-pending.xml", + "public_sha256": "9d3cc9d132b59186084aae32ad8dcded35184d3401c81894a035adde56c2e64b", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json", + "original_sha256": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "public": "docs/validation/paste-copy/frames/landscape200-pending-frame.json", + "public_sha256": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png", + "original_sha256": "c66a50340827e8c0aaf217bc23d3783aa41c67420014f7664e036a7c5e9ad23d", + "public": "docs/screenshots/paste-copy/landscape200-copied.png", + "public_sha256": "c66a50340827e8c0aaf217bc23d3783aa41c67420014f7664e036a7c5e9ad23d", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml", + "original_sha256": "56566a2dcaa97238106e5b83a83b57c02b6d5a94b836a1d21b17c166fc32b6a8", + "public": "docs/validation/paste-copy/frames/landscape200-copied.xml", + "public_sha256": "56566a2dcaa97238106e5b83a83b57c02b6d5a94b836a1d21b17c166fc32b6a8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json", + "original_sha256": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "public": "docs/validation/paste-copy/frames/landscape200-copied-frame.json", + "public_sha256": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png", + "original_sha256": "12e03b793735423d713c51d50616eb7b96f1cf17af90880651481eabde90978d", + "public": "docs/screenshots/paste-copy/landscape200-source-return.png", + "public_sha256": "12e03b793735423d713c51d50616eb7b96f1cf17af90880651481eabde90978d", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml", + "original_sha256": "393a526747c9868a23bd2d44c1877053586e468de8e3bfb149edc245935e726a", + "public": "docs/validation/paste-copy/frames/landscape200-source-return.xml", + "public_sha256": "393a526747c9868a23bd2d44c1877053586e468de8e3bfb149edc245935e726a", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json", + "original_sha256": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "public": "docs/validation/paste-copy/frames/landscape200-source-return-frame.json", + "public_sha256": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png", + "original_sha256": "dfa1dc0739d2e2177557f42cbeb549e2061e2948188f72c13d72c7dac9b9a1a9", + "public": "docs/screenshots/paste-copy/tablet100-before.png", + "public_sha256": "dfa1dc0739d2e2177557f42cbeb549e2061e2948188f72c13d72c7dac9b9a1a9", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml", + "original_sha256": "d75e4c1c467b9aa827832cbad69108ec6b4334ccdc1330615cd799e84adb1519", + "public": "docs/validation/paste-copy/frames/tablet100-before.xml", + "public_sha256": "d75e4c1c467b9aa827832cbad69108ec6b4334ccdc1330615cd799e84adb1519", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json", + "original_sha256": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "public": "docs/validation/paste-copy/frames/tablet100-before-frame.json", + "public_sha256": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png", + "original_sha256": "83cfb6a07e0a74685711de9a5b7ebf0d4f0677dde7a09ed02ea01048dd51b533", + "public": "docs/screenshots/paste-copy/phone100-before.png", + "public_sha256": "83cfb6a07e0a74685711de9a5b7ebf0d4f0677dde7a09ed02ea01048dd51b533", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml", + "original_sha256": "7356943621e104b53cd60d0b185e4e9c0b11494e8b60da5188c17b95c80731df", + "public": "docs/validation/paste-copy/frames/phone100-before.xml", + "public_sha256": "7356943621e104b53cd60d0b185e4e9c0b11494e8b60da5188c17b95c80731df", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json", + "original_sha256": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "public": "docs/validation/paste-copy/frames/phone100-before-frame.json", + "public_sha256": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png", + "original_sha256": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "public": "docs/screenshots/paste-copy/phone100-source-before.png", + "public_sha256": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml", + "original_sha256": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "public": "docs/validation/paste-copy/frames/phone100-source-before.xml", + "public_sha256": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json", + "original_sha256": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "public": "docs/validation/paste-copy/frames/phone100-source-before-frame.json", + "public_sha256": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png", + "original_sha256": "0dcfd7c7710ab8d4a86cb2613ddbd6aa5fe69afff30f629d2c932ef0f20b1fa2", + "public": "docs/screenshots/paste-copy/tablet100-unicode-copy.png", + "public_sha256": "0dcfd7c7710ab8d4a86cb2613ddbd6aa5fe69afff30f629d2c932ef0f20b1fa2", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml", + "original_sha256": "96a8d334611c54bc34bbd6cb8c40d1a02bb00e014cc11b9a4c58d2891d559230", + "public": "docs/validation/paste-copy/frames/tablet100-unicode-copy.xml", + "public_sha256": "96a8d334611c54bc34bbd6cb8c40d1a02bb00e014cc11b9a4c58d2891d559230", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json", + "original_sha256": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "public": "docs/validation/paste-copy/frames/tablet100-unicode-copy-frame.json", + "public_sha256": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.png", + "original_sha256": "5faa13937d1a5bd9b25760033b16a520b43a4525da870b947c3f6508210b4ae0", + "public": "docs/screenshots/paste-copy/tablet100-uncaught-offer.png", + "public_sha256": "5faa13937d1a5bd9b25760033b16a520b43a4525da870b947c3f6508210b4ae0", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.xml", + "original_sha256": "81efe8f0c095cbf793ef236868a48182139943028e8a479ec4c5d410275efab3", + "public": "docs/validation/paste-copy/frames/tablet100-uncaught-offer.xml", + "public_sha256": "81efe8f0c095cbf793ef236868a48182139943028e8a479ec4c5d410275efab3", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer-frame.json", + "original_sha256": "941a7e70ef79327e79c5c379f24b30311449834a0b653fa74cac9d7ac05e3f3d", + "public": "docs/validation/paste-copy/frames/tablet100-uncaught-offer-frame.json", + "public_sha256": "941a7e70ef79327e79c5c379f24b30311449834a0b653fa74cac9d7ac05e3f3d", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.png", + "original_sha256": "7f60b4e69c28d6658084803655a1a0e6b774225ae3d71d85fd7b3ba883bcea69", + "public": "docs/screenshots/paste-copy/tablet100-uncaught-copy.png", + "public_sha256": "7f60b4e69c28d6658084803655a1a0e6b774225ae3d71d85fd7b3ba883bcea69", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.xml", + "original_sha256": "fe95bb05c6e7a7fdd2c64224ff2aa979f49eb32f05b074a2c7f19eb379cd2453", + "public": "docs/validation/paste-copy/frames/tablet100-uncaught-copy.xml", + "public_sha256": "fe95bb05c6e7a7fdd2c64224ff2aa979f49eb32f05b074a2c7f19eb379cd2453", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy-frame.json", + "original_sha256": "348dde590d293fc6fee114e440d243ddd8a15d88cf704257d928c01e41dab919", + "public": "docs/validation/paste-copy/frames/tablet100-uncaught-copy-frame.json", + "public_sha256": "348dde590d293fc6fee114e440d243ddd8a15d88cf704257d928c01e41dab919", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output.png", + "original_sha256": "b9725b9bc830f08d59e7e3ebb2777e86b642f7c006cb6f52e14f3eb281401250", + "public": "docs/screenshots/paste-copy/tablet100-new-source.png", + "public_sha256": "b9725b9bc830f08d59e7e3ebb2777e86b642f7c006cb6f52e14f3eb281401250", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output.xml", + "original_sha256": "de8d3b32719709399e095cd9fe5997b9723b6b168b82d8349747bb4a14070426", + "public": "docs/validation/paste-copy/frames/tablet100-new-source.xml", + "public_sha256": "de8d3b32719709399e095cd9fe5997b9723b6b168b82d8349747bb4a14070426", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output-frame.json", + "original_sha256": "597fc5e5de6b69a04a91b2a078c71f71dad4c71fb9ba28f7f6dfd2614b5422fb", + "public": "docs/validation/paste-copy/frames/tablet100-new-source-frame.json", + "public_sha256": "597fc5e5de6b69a04a91b2a078c71f71dad4c71fb9ba28f7f6dfd2614b5422fb", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png", + "original_sha256": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "public": "docs/screenshots/paste-copy/phone100-unicode-copy.png", + "public_sha256": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml", + "original_sha256": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "public": "docs/validation/paste-copy/frames/phone100-unicode-copy.xml", + "public_sha256": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json", + "original_sha256": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "public": "docs/validation/paste-copy/frames/phone100-unicode-copy-frame.json", + "public_sha256": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png", + "original_sha256": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "public": "docs/screenshots/paste-copy/phone100-post-copy-sentinel-probe.png", + "public_sha256": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.xml", + "original_sha256": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "public": "docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe.xml", + "public_sha256": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved-frame.json", + "original_sha256": "89b0aca48a5bdf1313f4b645ab6f584a6b690a994717375cd584e708dbfef72e", + "public": "docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe-frame.json", + "public_sha256": "89b0aca48a5bdf1313f4b645ab6f584a6b690a994717375cd584e708dbfef72e", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.png", + "original_sha256": "e1e2a69bd702fcf19fd99307ec811f5dbf1df751c821d7a95fb995d949fc9f40", + "public": "docs/screenshots/paste-copy/phone100-recreated.png", + "public_sha256": "e1e2a69bd702fcf19fd99307ec811f5dbf1df751c821d7a95fb995d949fc9f40", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.xml", + "original_sha256": "bb5286db9a986232dbe16b3fb162fc3991af68699667197396c2ff157e34bf7f", + "public": "docs/validation/paste-copy/frames/phone100-recreated.xml", + "public_sha256": "bb5286db9a986232dbe16b3fb162fc3991af68699667197396c2ff157e34bf7f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer-frame.json", + "original_sha256": "8138e4fd3aece10e3eedfcddd47ab26975b61ac0bb27bfbcc4ce6d0f1ff78708", + "public": "docs/validation/paste-copy/frames/phone100-recreated-frame.json", + "public_sha256": "8138e4fd3aece10e3eedfcddd47ab26975b61ac0bb27bfbcc4ce6d0f1ff78708", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.png", + "original_sha256": "1bc88132ed8cf775940408cfddef01406b5f60ea3ac73425b2b771f840921d90", + "public": "docs/screenshots/paste-copy/phone100-parent-restored.png", + "public_sha256": "1bc88132ed8cf775940408cfddef01406b5f60ea3ac73425b2b771f840921d90", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.xml", + "original_sha256": "fe43b42533a73e40e2c6712741ffb02833822974ee025fdd77d94f890bed8fa8", + "public": "docs/validation/paste-copy/frames/phone100-parent-restored.xml", + "public_sha256": "fe43b42533a73e40e2c6712741ffb02833822974ee025fdd77d94f890bed8fa8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output-frame.json", + "original_sha256": "f691201a65606bcdec24908430bcb16007d3041e18535797b1049da05f5e4cc1", + "public": "docs/validation/paste-copy/frames/phone100-parent-restored-frame.json", + "public_sha256": "f691201a65606bcdec24908430bcb16007d3041e18535797b1049da05f5e4cc1", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png", + "original_sha256": "3831e52fe344cadf03c93b05ec7c4559c86b13fc406602e34e804adbd8892074", + "public": "docs/screenshots/paste-copy/tablet200-keyboard-focus.png", + "public_sha256": "3831e52fe344cadf03c93b05ec7c4559c86b13fc406602e34e804adbd8892074", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml", + "original_sha256": "ac46357ae71d51726ad510b94534d3d4ae5f7d890bc6ff9da5305f401162d35d", + "public": "docs/validation/paste-copy/frames/tablet200-keyboard-focus.xml", + "public_sha256": "ac46357ae71d51726ad510b94534d3d4ae5f7d890bc6ff9da5305f401162d35d", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json", + "original_sha256": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "public": "docs/validation/paste-copy/frames/tablet200-keyboard-focus-frame.json", + "public_sha256": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png", + "original_sha256": "a35e907789c954fc28ded9857d40fccc196fb282e52cbc1bbf319d866db4d8c8", + "public": "docs/screenshots/paste-copy/phone200-keyboard-focus.png", + "public_sha256": "a35e907789c954fc28ded9857d40fccc196fb282e52cbc1bbf319d866db4d8c8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml", + "original_sha256": "98dd0e929f71ee87966c8539077bd1dc75c150dbbfa9ff47cffad94faed0150f", + "public": "docs/validation/paste-copy/frames/phone200-keyboard-focus.xml", + "public_sha256": "98dd0e929f71ee87966c8539077bd1dc75c150dbbfa9ff47cffad94faed0150f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json", + "original_sha256": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "public": "docs/validation/paste-copy/frames/phone200-keyboard-focus-frame.json", + "public_sha256": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png", + "original_sha256": "8aef08e4080a63b51be6e5c0b7aa77602fd84f4171c91cdc262b0a618c50e88f", + "public": "docs/screenshots/paste-copy/landscape200-keyboard-focus.png", + "public_sha256": "8aef08e4080a63b51be6e5c0b7aa77602fd84f4171c91cdc262b0a618c50e88f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml", + "original_sha256": "8ca49ba351242c120c56570e6bd60e2a19ea65e5d589579cb2e862ffb99e63d0", + "public": "docs/validation/paste-copy/frames/landscape200-keyboard-focus.xml", + "public_sha256": "8ca49ba351242c120c56570e6bd60e2a19ea65e5d589579cb2e862ffb99e63d0", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json", + "original_sha256": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "public": "docs/validation/paste-copy/frames/landscape200-keyboard-focus-frame.json", + "public_sha256": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.png", + "original_sha256": "9d7f0cb1f87017fa41e9d3ba11e70c7c6d6191dcb277c88b5ebfaaf4accc2922", + "public": "docs/screenshots/paste-copy/landscape200-legacy-reveal-before.png", + "public_sha256": "9d7f0cb1f87017fa41e9d3ba11e70c7c6d6191dcb277c88b5ebfaaf4accc2922", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.xml", + "original_sha256": "30ac363b069746bd97dd31fa2d793f2eb94660ccb54e0fd009efdc78fbbb7d0f", + "public": "docs/validation/paste-copy/frames/landscape200-legacy-reveal-before.xml", + "public_sha256": "30ac363b069746bd97dd31fa2d793f2eb94660ccb54e0fd009efdc78fbbb7d0f", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before-frame.json", + "original_sha256": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "public": "docs/validation/paste-copy/frames/landscape200-legacy-reveal-before-frame.json", + "public_sha256": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.png", + "original_sha256": "15c014d457d7bb8437b0ae3c8d68c94c78e7326d55320bd99575aaa765b19781", + "public": "docs/screenshots/paste-copy/landscape200-legacy-reveal-after.png", + "public_sha256": "15c014d457d7bb8437b0ae3c8d68c94c78e7326d55320bd99575aaa765b19781", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.xml", + "original_sha256": "aff2aaf61d2ebc89d88e913d243f133bd51f0b5567d81e775bb2ac4318bfabe8", + "public": "docs/validation/paste-copy/frames/landscape200-legacy-reveal-after.xml", + "public_sha256": "aff2aaf61d2ebc89d88e913d243f133bd51f0b5567d81e775bb2ac4318bfabe8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after-frame.json", + "original_sha256": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "public": "docs/validation/paste-copy/frames/landscape200-legacy-reveal-after-frame.json", + "public_sha256": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.png", + "original_sha256": "57b617926b625c002e5869a1611fcac30106af441e56a3f380520a3d53305ce5", + "public": "docs/screenshots/paste-copy/landscape200-interior-reveal-before.png", + "public_sha256": "57b617926b625c002e5869a1611fcac30106af441e56a3f380520a3d53305ce5", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.xml", + "original_sha256": "cbd646441b41058ec96966d747059c5338315c18d79c996aa012d0206a17fa95", + "public": "docs/validation/paste-copy/frames/landscape200-interior-reveal-before.xml", + "public_sha256": "cbd646441b41058ec96966d747059c5338315c18d79c996aa012d0206a17fa95", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before-frame.json", + "original_sha256": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "public": "docs/validation/paste-copy/frames/landscape200-interior-reveal-before-frame.json", + "public_sha256": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.png", + "original_sha256": "ca59c404dfc4452935c19866bf2eeba56f85191b00d0a79422ac71f9d8441754", + "public": "docs/screenshots/paste-copy/landscape200-interior-reveal-after.png", + "public_sha256": "ca59c404dfc4452935c19866bf2eeba56f85191b00d0a79422ac71f9d8441754", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.xml", + "original_sha256": "83545d3df18ed70ae9d8dbb82fe6312b0e9e320c32aa651e80c8243034d23e71", + "public": "docs/validation/paste-copy/frames/landscape200-interior-reveal-after.xml", + "public_sha256": "83545d3df18ed70ae9d8dbb82fe6312b0e9e320c32aa651e80c8243034d23e71", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after-frame.json", + "original_sha256": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "public": "docs/validation/paste-copy/frames/landscape200-interior-reveal-after-frame.json", + "public_sha256": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure.png", + "original_sha256": "e4b020ec6f51ebc5a9647143dfb675f4c2fc0cc21a472edf80e092f0324a09a7", + "public": "docs/screenshots/paste-copy/landscape200-original-keyboard-failure.png", + "public_sha256": "e4b020ec6f51ebc5a9647143dfb675f4c2fc0cc21a472edf80e092f0324a09a7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure.xml", + "original_sha256": "3ccd5bc556585bcf0eed728cc41cc7a86103702ed8fd02be515e4a90a9c3d6bf", + "public": "docs/validation/paste-copy/frames/landscape200-original-keyboard-failure.xml", + "public_sha256": "3ccd5bc556585bcf0eed728cc41cc7a86103702ed8fd02be515e4a90a9c3d6bf", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure-frame.json", + "original_sha256": "4307d48f810ee3514f91a6ce2e3fe1715608bcd012768c2c494ad64a12c9c83b", + "public": "docs/validation/paste-copy/frames/landscape200-original-keyboard-failure-frame.json", + "public_sha256": "4307d48f810ee3514f91a6ce2e3fe1715608bcd012768c2c494ad64a12c9c83b", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination.png", + "original_sha256": "d7f15a095beb26e26c0f58a4b3dd9211b8e52b82750d0dd16640bd15e485d6b5", + "public": "docs/screenshots/paste-copy/phone100-form-regression.png", + "public_sha256": "d7f15a095beb26e26c0f58a4b3dd9211b8e52b82750d0dd16640bd15e485d6b5", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination.xml", + "original_sha256": "e0c0bd34472232e711eeb7ba04156eec9858236d35208d7862a25adaaebd867c", + "public": "docs/validation/paste-copy/frames/phone100-form-regression.xml", + "public_sha256": "e0c0bd34472232e711eeb7ba04156eec9858236d35208d7862a25adaaebd867c", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination-frame.json", + "original_sha256": "48c12312813ea1e184bb7d3ed82a0c70924fbe237c492e97a97e472e50092fc0", + "public": "docs/validation/paste-copy/frames/phone100-form-regression-frame.json", + "public_sha256": "48c12312813ea1e184bb7d3ed82a0c70924fbe237c492e97a97e472e50092fc0", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail.png", + "original_sha256": "5c19c9e3873152bd97de9e1b8ef567a4c3520e765f29accacc098115e64d6a90", + "public": "docs/screenshots/paste-copy/phone100-detail-regression.png", + "public_sha256": "5c19c9e3873152bd97de9e1b8ef567a4c3520e765f29accacc098115e64d6a90", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail.xml", + "original_sha256": "0735746eab06e5fabc799962ac4fdea13ae34f4e7a41397d77186e6943767851", + "public": "docs/validation/paste-copy/frames/phone100-detail-regression.xml", + "public_sha256": "0735746eab06e5fabc799962ac4fdea13ae34f4e7a41397d77186e6943767851", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail-frame.json", + "original_sha256": "c28e5a908a83820176796bc40927a916fec76883a97d62110bca136081750bee", + "public": "docs/validation/paste-copy/frames/phone100-detail-regression-frame.json", + "public_sha256": "c28e5a908a83820176796bc40927a916fec76883a97d62110bca136081750bee", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context.png", + "original_sha256": "43498b3702e77065bbfa7c756065b7d5e3aeaa5101893c815359ed5b947c4da2", + "public": "docs/screenshots/paste-copy/phone100-handoff-regression.png", + "public_sha256": "43498b3702e77065bbfa7c756065b7d5e3aeaa5101893c815359ed5b947c4da2", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context.xml", + "original_sha256": "00204096f643d0e713aa7f94f3b6f35b29f3deb0421530fa5b2db0f6474ba202", + "public": "docs/validation/paste-copy/frames/phone100-handoff-regression.xml", + "public_sha256": "00204096f643d0e713aa7f94f3b6f35b29f3deb0421530fa5b2db0f6474ba202", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context-frame.json", + "original_sha256": "653798a474ce567cb64c9b07c506c2688205fe418ccf29b20db318bf08138bcc", + "public": "docs/validation/paste-copy/frames/phone100-handoff-regression-frame.json", + "public_sha256": "653798a474ce567cb64c9b07c506c2688205fe418ccf29b20db318bf08138bcc", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/candidate-v1/identity.json", + "original_sha256": "d39cef69b7510b465f582ddf014eb1a16208909dad5de228bdd54076efe9a8f9", + "public": "docs/validation/paste-copy/identities/candidate-v1.json", + "public_sha256": "d39cef69b7510b465f582ddf014eb1a16208909dad5de228bdd54076efe9a8f9", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/candidate-v2/identity.json", + "original_sha256": "2ea0a8d734207d2939dbbbcad57bb477ffd8654ebcad099490d26e394dc84dc8", + "public": "docs/validation/paste-copy/identities/candidate-v2.json", + "public_sha256": "2ea0a8d734207d2939dbbbcad57bb477ffd8654ebcad099490d26e394dc84dc8", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-harness-v3/identity.json", + "original_sha256": "27a1f0ff401d329ba507953548ffa603ee0e8c40a6b25d9f323e064acdd543c1", + "public": "docs/validation/paste-copy/identities/owned-harness-v3.json", + "public_sha256": "27a1f0ff401d329ba507953548ffa603ee0e8c40a6b25d9f323e064acdd543c1", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-harness-v5/identity.json", + "original_sha256": "71deeea6e49316822744df14cd485e2435879ae8e1112ad89d732efb56ed3de7", + "public": "docs/validation/paste-copy/identities/owned-harness-v5.json", + "public_sha256": "71deeea6e49316822744df14cd485e2435879ae8e1112ad89d732efb56ed3de7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-harness-v6/identity.json", + "original_sha256": "c0a0dcef59a75dc7cd62b0dbe57ce0922563c59e334067b9aa02b8eaad23d667", + "public": "docs/validation/paste-copy/identities/owned-harness-v6.json", + "public_sha256": "c0a0dcef59a75dc7cd62b0dbe57ce0922563c59e334067b9aa02b8eaad23d667", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-harness-v7/identity.json", + "original_sha256": "ea8705e5e750b7b2bc472f05a9540e95e12347df6c063a23db566e739d897009", + "public": "docs/validation/paste-copy/identities/owned-harness-v7.json", + "public_sha256": "ea8705e5e750b7b2bc472f05a9540e95e12347df6c063a23db566e739d897009", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/candidate-v2/benchmark/identity.json", + "original_sha256": "13baf5ffbd039dc8e782ce73c6e5aa577d51b169c893f15406714617d4a67988", + "public": "docs/validation/paste-copy/checks/initial-benchmark.json", + "public_sha256": "13baf5ffbd039dc8e782ce73c6e5aa577d51b169c893f15406714617d4a67988", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/owned-harness-v7/final-checks/record.json", + "original_sha256": "6eefb332188e60ec6e3cd261e9df6f7028cc66e16ef7a25ea8e1041e436f9bd4", + "public": "docs/validation/paste-copy/checks/current-benchmark-lint.json", + "public_sha256": "6eefb332188e60ec6e3cd261e9df6f7028cc66e16ef7a25ea8e1041e436f9bd4", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.BackupPlannerTest.xml", + "original_sha256": "1383fd8f23ae4781ad3c532ee563d1f1af9557d1cd8b8497c43cbf73a24fe7ab", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml", + "public_sha256": "1383fd8f23ae4781ad3c532ee563d1f1af9557d1cd8b8497c43cbf73a24fe7ab", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.CalculatorActionsTest.xml", + "original_sha256": "65ba4abe3c1bce63801e3960bc74eca84a1f24aaaf86abfd043c749294236b7c", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml", + "public_sha256": "65ba4abe3c1bce63801e3960bc74eca84a1f24aaaf86abfd043c749294236b7c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.CommandEngineTest.xml", + "original_sha256": "fddfcd51f693ca805edf91e9dd4091b980c6355e2ea2d9ac6105079f22e0461c", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml", + "public_sha256": "fddfcd51f693ca805edf91e9dd4091b980c6355e2ea2d9ac6105079f22e0461c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.EmojiCatalogTest.xml", + "original_sha256": "bdd54b88f3e357f51eeec01189b248600dc43ae6b73369c312c0fb07ffc4028d", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml", + "public_sha256": "bdd54b88f3e357f51eeec01189b248600dc43ae6b73369c312c0fb07ffc4028d", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml", + "original_sha256": "7769f3fcb846884300441a767b8ea6fc9587cacae4e7d93ca33cebc5a8b6132c", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml", + "public_sha256": "7769f3fcb846884300441a767b8ea6fc9587cacae4e7d93ca33cebc5a8b6132c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml", + "original_sha256": "f066e8c2cb2315714825f8d9bb9a6373e967f7de214104677578ac64febb7f7b", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml", + "public_sha256": "f066e8c2cb2315714825f8d9bb9a6373e967f7de214104677578ac64febb7f7b", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionFormContractTest.xml", + "original_sha256": "de47c94bc70fbadc1a447df97ee58277f8d0f61dda62ec55f5c79f8f83b4ecc1", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml", + "public_sha256": "de47c94bc70fbadc1a447df97ee58277f8d0f61dda62ec55f5c79f8f83b4ecc1", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml", + "original_sha256": "dec02d64856aaef6aa6544807055de61dac1a2dba10b75be0a372ace9ca8a3ce", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml", + "public_sha256": "dec02d64856aaef6aa6544807055de61dac1a2dba10b75be0a372ace9ca8a3ce", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml", + "original_sha256": "9a54b47a39316f7c00ced9f9c874fdcf3641b9f96a89446ee8c451d4c126927a", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml", + "public_sha256": "9a54b47a39316f7c00ced9f9c874fdcf3641b9f96a89446ee8c451d4c126927a", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml", + "original_sha256": "8a83b87d70b6c552044ea59b97fdd2d7d8b0d1ef27284ba6b0a644ea1c828709", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml", + "public_sha256": "8a83b87d70b6c552044ea59b97fdd2d7d8b0d1ef27284ba6b0a644ea1c828709", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml", + "original_sha256": "319b004f61d2522c31551b65a1f05ab81b99b11c0f2f96e0a0d6b575fb923366", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml", + "public_sha256": "319b004f61d2522c31551b65a1f05ab81b99b11c0f2f96e0a0d6b575fb923366", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionGridContractTest.xml", + "original_sha256": "2b5916755a6fe3a6946206b8d578f43c4d1517f54443979c4f5234c68747a9c2", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml", + "public_sha256": "2b5916755a6fe3a6946206b8d578f43c4d1517f54443979c4f5234c68747a9c2", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml", + "original_sha256": "819a1007fc96c6a32c41e52710c2fed4b08fb71a9289ec63704f03a82cdbeaba", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml", + "public_sha256": "819a1007fc96c6a32c41e52710c2fed4b08fb71a9289ec63704f03a82cdbeaba", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionHttpTest.xml", + "original_sha256": "5c9a988addae411248b2a35dac0cc56826e5b728fe14b0482b799afe0d3380d4", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml", + "public_sha256": "5c9a988addae411248b2a35dac0cc56826e5b728fe14b0482b799afe0d3380d4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml", + "original_sha256": "6a3085d6692a2e7a97483e7e66457c422092fc66246ad371d73318e1304e8485", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml", + "public_sha256": "6a3085d6692a2e7a97483e7e66457c422092fc66246ad371d73318e1304e8485", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml", + "original_sha256": "52485f09031918f98f87b3284ba1b1e2420ccebed626ca310fbb0076ec106e96", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml", + "public_sha256": "52485f09031918f98f87b3284ba1b1e2420ccebed626ca310fbb0076ec106e96", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml", + "original_sha256": "f4fd7ec879125da1e2d0c09537fd604febea9df37c6e935e3c1e88f635a8d7a4", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml", + "public_sha256": "f4fd7ec879125da1e2d0c09537fd604febea9df37c6e935e3c1e88f635a8d7a4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml", + "original_sha256": "27912af47bbe5f212b1fbc5ae893164aa051d6e80bad4388093ce7690614056b", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml", + "public_sha256": "27912af47bbe5f212b1fbc5ae893164aa051d6e80bad4388093ce7690614056b", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml", + "original_sha256": "8349a1b973bd97c55e94b339c899e19e1d5a3cb4e683d3e5c3a905a5fd930f6f", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml", + "public_sha256": "8349a1b973bd97c55e94b339c899e19e1d5a3cb4e683d3e5c3a905a5fd930f6f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.FolderIndexTest.xml", + "original_sha256": "d26897ef239617155cb5f79169925251d2173a94490121ebdacd1d0178827919", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml", + "public_sha256": "d26897ef239617155cb5f79169925251d2173a94490121ebdacd1d0178827919", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ModifierTapTest.xml", + "original_sha256": "f0ded4e177ecbe64d12d4689c4c8ff2c9bae6ec37cd4039f5730248944b57fbb", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml", + "public_sha256": "f0ded4e177ecbe64d12d4689c4c8ff2c9bae6ec37cd4039f5730248944b57fbb", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml", + "original_sha256": "b641eacd55c899db4dfe1231db710d37e1a6821732f420347ba32eefd05bdf74", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml", + "public_sha256": "b641eacd55c899db4dfe1231db710d37e1a6821732f420347ba32eefd05bdf74", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml", + "original_sha256": "5f569facb9e194cd8ff4c0c87774501f1b0c462cd04e5a9ce1800630c1bbe27c", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml", + "public_sha256": "5f569facb9e194cd8ff4c0c87774501f1b0c462cd04e5a9ce1800630c1bbe27c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ReviewedTextInputTest.xml", + "original_sha256": "88d627f6ac6a859036960d1e87134f93143265f17b4587886923b17978768936", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml", + "public_sha256": "88d627f6ac6a859036960d1e87134f93143265f17b4587886923b17978768936", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ShortcutReadinessTest.xml", + "original_sha256": "904aa26c87157d98c280f8e3bdc40e4562d673816893576de744d7d1d5b46ef0", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml", + "public_sha256": "904aa26c87157d98c280f8e3bdc40e4562d673816893576de744d7d1d5b46ef0", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.ShortcutTest.xml", + "original_sha256": "d1d21861fc652502fbde00f09b340195da9da3190583459c11091dd1673a6f0c", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml", + "public_sha256": "d1d21861fc652502fbde00f09b340195da9da3190583459c11091dd1673a6f0c", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.SystemSettingsTest.xml", + "original_sha256": "4d1044281b904d0030f87651b25e803e15aaa871370ceb4e520b0ebd5baa9a22", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml", + "public_sha256": "4d1044281b904d0030f87651b25e803e15aaa871370ceb4e520b0ebd5baa9a22", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.TinycastGridParityTest.xml", + "original_sha256": "c0fb3fced9100c8ca404ceffaba6238754a18339b8ab5e870f7ecfc82c616d85", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml", + "public_sha256": "c0fb3fced9100c8ca404ceffaba6238754a18339b8ab5e870f7ecfc82c616d85", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.UpdatePolicyTest.xml", + "original_sha256": "d8e227034efc399f052a5c0e2f8c2180564418e6cb36676ce34010e452c5d129", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml", + "public_sha256": "d8e227034efc399f052a5c0e2f8c2180564418e6cb36676ce34010e452c5d129", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.WeakValueTokensTest.xml", + "original_sha256": "8981ee171fb2b4ec47b91198e82bece3ce9f29e651b227d6952cc92822b8a062", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml", + "public_sha256": "8981ee171fb2b4ec47b91198e82bece3ce9f29e651b227d6952cc92822b8a062", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml", + "original_sha256": "5a28634e73be7725ca970589ee52e80bd1f27e4595e2f4b6144d1400f3d06e02", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml", + "public_sha256": "5a28634e73be7725ca970589ee52e80bd1f27e4595e2f4b6144d1400f3d06e02", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml", + "original_sha256": "a5a4b898651ee0fc4f4ccd294a7b050fff3b261ef9dd2f342948ac42f0675183", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml", + "public_sha256": "a5a4b898651ee0fc4f4ccd294a7b050fff3b261ef9dd2f342948ac42f0675183", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2/jvm-results/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml", + "original_sha256": "bca475111bd0cbd7b5b30a6514f7549dc8c87311d492de93e87fae74c4112ee7", + "public": "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml", + "public_sha256": "bca475111bd0cbd7b5b30a6514f7549dc8c87311d492de93e87fae74c4112ee7", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v7/final-checks/lint-results-benchmark.xml", + "original_sha256": "cfc9f573ae5677bde9f73dd5f2664ec6f8a178f51749334c9d1098ff40045c92", + "public": "docs/validation/paste-copy/checks/lint-results-benchmark.xml", + "public_sha256": "2f51a55071685e65e5f03cb6337f1bca99cd3365066193136ac39807fb01337f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v7/final-checks/lint-results-debug.xml", + "original_sha256": "cfc9f573ae5677bde9f73dd5f2664ec6f8a178f51749334c9d1098ff40045c92", + "public": "docs/validation/paste-copy/checks/lint-results-debug.xml", + "public_sha256": "2f51a55071685e65e5f03cb6337f1bca99cd3365066193136ac39807fb01337f", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2-build.log", + "original_sha256": "7f4bd36009dd6859a26f3c0ddc302778dcdd1fea1bfb289cf73f62c7b17a5694", + "public": "docs/validation/paste-copy/checks/candidate-v2-build.log", + "public_sha256": "799278b0f6ec34429533fc76adefa3cfe43d644aeca2f337833175596ca59961", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/candidate-v2-benchmark-build.log", + "original_sha256": "887eb80aa8e7bcf05dfbae9523608206979bc376a0590e1fc503f9eef503d763", + "public": "docs/validation/paste-copy/checks/candidate-v2-benchmark-build.log", + "public_sha256": "5c6eb8455e6911f950628593a320ad69cc0d3556915328197a48dfcbf0ef87d3", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v6-build.log", + "original_sha256": "411fab0c6b1b4c18cae648e3f1aa2bc3054f136350ee77cebf569e27457ed33b", + "public": "docs/validation/paste-copy/checks/owned-harness-v6-build.log", + "public_sha256": "c3eb59da251212219e4c79c00774a494624cf88863e42906149a1513e954fd12", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v6-benchmark-lint.log", + "original_sha256": "2bc103660527dc0f67504c24b415de51fc262b8407be82c883b0496461da55ea", + "public": "docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint.log", + "public_sha256": "6b781fc36812e933e079a3eb3449b5d9e68c447e7c893865de07782f99ae6edd", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v6-benchmark-lint-v2.log", + "original_sha256": "3c6c9e06aaf8fa6b4d81af0717fdbc997a3fad490895a7f4a935968f8e8ac519", + "public": "docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint-v2.log", + "public_sha256": "505e2db8034b7096cc3d35329fddcef3b08728c3951ab939f14572f10a883dd8", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/python-owned-v3.log", + "original_sha256": "89cf949e94708407e1ee86f21f8c5936872d65a988ad69ddae77b8bf8d60849a", + "public": "docs/validation/paste-copy/checks/python-owned-v3.log", + "public_sha256": "89cf949e94708407e1ee86f21f8c5936872d65a988ad69ddae77b8bf8d60849a", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/python-owned-optimized-v3.log", + "original_sha256": "7a92f689360dbe419facf2c941a60dadc306784c9571d07c25f31a2c3fccc3dd", + "public": "docs/validation/paste-copy/checks/python-owned-optimized-v3.log", + "public_sha256": "7a92f689360dbe419facf2c941a60dadc306784c9571d07c25f31a2c3fccc3dd", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v3-build.log", + "original_sha256": "3262b9a3ce84c6299f455f0f02a3535f0b52c572f7a0d82025a4065e1c2cfc69", + "public": "docs/validation/paste-copy/checks/owned-harness-v3-build.log", + "public_sha256": "6cab68831e29a3ff3f786fbf3acbd015b8a48bb2d4388529612bd7f33e201491", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v5-build.log", + "original_sha256": "3262b9a3ce84c6299f455f0f02a3535f0b52c572f7a0d82025a4065e1c2cfc69", + "public": "docs/validation/paste-copy/checks/owned-harness-v5-build.log", + "public_sha256": "6cab68831e29a3ff3f786fbf3acbd015b8a48bb2d4388529612bd7f33e201491", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v7-build.log", + "original_sha256": "ad0b966b78bc584c6b17da8bcea01e0e916b4fdb689c5b921207431e6b8c567d", + "public": "docs/validation/paste-copy/checks/owned-harness-v7-build.log", + "public_sha256": "4743e44d7e9c84972f1137bfb525b5977c969c23d1189e3b2129b7f4825660c4", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/owned-harness-v7-benchmark-lint.log", + "original_sha256": "234492620faff19cc33f0a9cb5a9505626c8c47269fe85e9ceda3be1c2df33f1", + "public": "docs/validation/paste-copy/checks/owned-harness-v7-benchmark-lint.log", + "public_sha256": "234492620faff19cc33f0a9cb5a9505626c8c47269fe85e9ceda3be1c2df33f1", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/python-reveal-v7.log", + "original_sha256": "edc7358fdaca198626c4563bbdb9a468bb3e3177cda41e5ae6ee19ebf13f7d23", + "public": "docs/validation/paste-copy/checks/python-reveal-v7.log", + "public_sha256": "edc7358fdaca198626c4563bbdb9a468bb3e3177cda41e5ae6ee19ebf13f7d23", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/python-reveal-optimized-v7.log", + "original_sha256": "eb806f402e0160a063966682c9d051dd901c4a112794b6716dec521c960e0cc5", + "public": "docs/validation/paste-copy/checks/python-reveal-optimized-v7.log", + "public_sha256": "eb806f402e0160a063966682c9d051dd901c4a112794b6716dec521c960e0cc5", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-frozen-paste-v2.py", + "original_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "public": "docs/validation/paste-copy/collectors/run-frozen-paste-v2.py", + "public_sha256": "7eba5935a748db4213359208951a0e5d9641494d27f075ffce0c56bd977e0a09", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-owned-v3.py", + "original_sha256": "e071b0e8e361696e818e71ea9292db836818b4143b03b42441921d05aa576bdb", + "public": "docs/validation/paste-copy/collectors/run-owned-v3.py", + "public_sha256": "425873f7652de1587b52ffc9a858ba22557fcf9d0fa6461f4692872f28aa6b62", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-owned-v5.py", + "original_sha256": "519579dfb1008d4f0c77ced8d5ed26cfcc5045420658f8159ce05423a3717896", + "public": "docs/validation/paste-copy/collectors/run-owned-v5.py", + "public_sha256": "6a1525caa4d1ddaef6746f19ca4f579b05340580af71bccdff51d62b4e041391", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-owned-v6.py", + "original_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "public": "docs/validation/paste-copy/collectors/run-owned-v6.py", + "public_sha256": "30a6ca3825ffa649ae900c1fcd2e13a5a1dedf45fe55ec1dbefb7df2b7e1796a", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-regressions-v6.py", + "original_sha256": "2b267cb234b0028a3a68e3a1495ad3d409c8aa14fa1ab612be4e40237bad10bc", + "public": "docs/validation/paste-copy/collectors/run-regressions-v6.py", + "public_sha256": "b7ddfcc591acc700531b458a2d431112bc538ca681598960a1f9c8f37b7fa9f8", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-final-matrix-v6.py", + "original_sha256": "b6943c2129c761775af5bd454b64aa6084da70ace51b1bd9ca2728a562a2ef51", + "public": "docs/validation/paste-copy/collectors/run-final-matrix-v6.py", + "public_sha256": "b6943c2129c761775af5bd454b64aa6084da70ace51b1bd9ca2728a562a2ef51", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/preservation.py", + "original_sha256": "a944d9292398a4b5bc50008c598c20c6e8241ef106811d61ce1bdc77548a3731", + "public": "docs/validation/paste-copy/collectors/preservation.py", + "public_sha256": "06e94bdfb6254f2928225e9fc0f369837f21a3e4ceb177130f8a1b41322b2cea", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/publish-v2.py", + "original_sha256": "6841245ef25b8408a0fd481a293786e17e6c2bc98a2f41f9437f7cd0107f5bdb", + "public": "docs/validation/paste-copy/collectors/publish-v2.py", + "public_sha256": "95cd652d44ce18da184de5b961652070425f08de59edc9f4e09152267c7d26ce", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-owned-v7.py", + "original_sha256": "e14f8a9d04a456d6dd5c94a1e688eba11b022d17fd827aac68ae1d129efc71e1", + "public": "docs/validation/paste-copy/collectors/run-owned-v7.py", + "public_sha256": "b87ac2ebefb8ed98cf669e3cbf46e0a14b15409f6ddf35f9b52b2bb71e36a728", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-regressions-v7.py", + "original_sha256": "830c55ba75a0074f73c0001e845c798a7d098b3ce27b1daac1eb70617b51348c", + "public": "docs/validation/paste-copy/collectors/run-regressions-v7.py", + "public_sha256": "fb033fd19e05eeb0268ccf27b876c7fc6bbbb60ab7e2aa5de1b135ff846759fe", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/run-continuation-v7.py", + "original_sha256": "680787a89f4906efa9d9be74577b317068898046c2a0a06a8133bd15fd33fa29", + "public": "docs/validation/paste-copy/collectors/run-continuation-v7.py", + "public_sha256": "680787a89f4906efa9d9be74577b317068898046c2a0a06a8133bd15fd33fa29", + "transform": "host-path-byte-redaction" + }, + { + "original": "artifacts/paste-copy/final-matrix-v6/record.json", + "original_sha256": "47c36cdc6f7b54a899bfe40f9f32b2a4a02d044b6e0e284a43947868dd1b8e54", + "public": "docs/validation/paste-copy/pipelines/final-matrix-v6.json", + "public_sha256": "47c36cdc6f7b54a899bfe40f9f32b2a4a02d044b6e0e284a43947868dd1b8e54", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/continuation-v7/record.json", + "original_sha256": "5e0515bdaac533943def17bb76c73080d3246335d5572c1fb4e9dd3e135a5bf7", + "public": "docs/validation/paste-copy/pipelines/continuation-v7.json", + "public_sha256": "5e0515bdaac533943def17bb76c73080d3246335d5572c1fb4e9dd3e135a5bf7", + "transform": "identity" + }, + { + "original": "artifacts/paste-copy/apk-manifest-inspection-v1.json", + "original_sha256": "b1e23f28ee5e562afdc40be43c6aff3cb8276b33e336201b8fba3b61418de869", + "public": "docs/validation/paste-copy/checks/apk-manifest-inspection.json", + "public_sha256": "b1e23f28ee5e562afdc40be43c6aff3cb8276b33e336201b8fba3b61418de869", + "transform": "identity" + } + ], + "projections": [ + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/state.json", + "original_sha256": "dca671aab0707b6ce7c82bd523b8fe872c05e25d0cf657e3f6976432afd079a1", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/state.json", + "public_sha256": "d0a9b911ff8a9ea2647d03c067f98b72ddbfa709470ea60334132ca4cc3116a1", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/record.json", + "original_sha256": "69899d46457983c1250d708e0ea1d330a012a00ae23f0c0bb31edec426814470", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/runner.json", + "public_sha256": "1c57857e5187e22c24505d8e4da82ea7af9de19bcbdfbc11de1a36d16bc85e6a", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/state.json", + "original_sha256": "b0d00cabe1b1fe3f2f07cc6bef6b0757872976c9312b4cd7fcd330dc5bd2fde6", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/state.json", + "public_sha256": "46ee5585774a1edadebf4f98033640935056b7a38cfc32dba768957c03b6e3d0", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/record.json", + "original_sha256": "754610eba22f8660ce961fb6906c4b328097fe430644be506954be4d30048105", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/runner.json", + "public_sha256": "403d21a7028c61acad8efd90140ba535922e03063d7b206ac98490c4eaf3e288", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/state.json", + "original_sha256": "811e699d2eff25dad6856906866dfad620f03a5ed5ff9e0303fc64379bcdb702", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/state.json", + "public_sha256": "96128691ddc002642fac30a27d12485aa28b9ca6749bf32a14470c9c1cb9b539", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/record.json", + "original_sha256": "21a644d33204dff8dbca15176c31d9d272ebe681d80430f08ad6cce2f9f26f81", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/runner.json", + "public_sha256": "5ae37863ea8f513e8f69ef02c48aae6699cc82d3149dc28d94c6b45e71f8ce02", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/state.json", + "original_sha256": "ec56a84eb1b8b52bb76250fde5e6bef36391a6355bc607584187c3bdbd88efa6", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/state.json", + "public_sha256": "20a8549e170cb3333bd30e49f68868e5c4f345d225e40c8482aa637a4c874780", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/record.json", + "original_sha256": "5db02c8bad713f1490f0bf2bebe61640f02740ba5821ea3f2226a84b9faf6ffb", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/runner.json", + "public_sha256": "97e641892df6ad509a96de05d20b40fa4c7a7b2ed6e99d2c8ef70e609c93908f", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/state.json", + "original_sha256": "e9e7345b198cd1afa4e02a461c0d2b9736318c2090d991d21ae2bd7d663b00c6", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/state.json", + "public_sha256": "094bf096ff526072c157fa8c29f77b218f5dbd47c6f49a82e39246adb927d3f3", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/record.json", + "original_sha256": "887e198ff17d0919b868cba76a304472b60abad48b36ddd2f0b5648d249fa355", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/runner.json", + "public_sha256": "2030690519e2c0e25bcada5d4c8f432b43a3b66d480ca27061746df7313d7de5", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/state.json", + "original_sha256": "2b0f0e6a0affaaa0b66e7d5f9fdecc2fffca70f48d458878e35d5f9c3cd19ca0", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/state.json", + "public_sha256": "5eae3c469d419fb39b15059825788d237f6febf1d8a741214ad2c18b41a738e3", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/record.json", + "original_sha256": "d41da3143ebafcc59c5d5461b95a775d803341b78e1935bb5ae6de597f2f141b", + "public": "docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/runner.json", + "public_sha256": "d0a727029e0b619701a3dfb3fb3d2469abb0ce70ad6ec1fe29dc573eb235fcd4", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/state.json", + "original_sha256": "820ea9e63995a0b1f820efe42ff6cba18f574d8efa8d425e270e55bae0e902f0", + "public": "docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/state.json", + "public_sha256": "ba3593ba33a3e46098b960fdfc3fe8a47741c3192a228126902ccff8bbe72535", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/record.json", + "original_sha256": "da9dfffe6cf6306c4acf83213bab71674ecbf8a15602e74490df21e5b5cc909e", + "public": "docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/runner.json", + "public_sha256": "87372f1e099147cb09247baa0776f3ebf5b2f6daee357532935a8376327a6fe9", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/state.json", + "original_sha256": "061c9dc3339b60074f87d394b76c068fbbe4e7b30d27fd6b64a3b7314bc256e3", + "public": "docs/validation/paste-copy/cohorts/owned-full-phone100-v6/state.json", + "public_sha256": "5ad56708a934df757f5870b531fa696aada588ea56f3715d38ad6e1c1b9b7f9d", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-full-phone100-v6/cohort/record.json", + "original_sha256": "43779c65dc3fc84ec4a219d961d1387b33c2a9ebb4d4cece46d44ae5744339df", + "public": "docs/validation/paste-copy/cohorts/owned-full-phone100-v6/runner.json", + "public_sha256": "4bf1dc995437dc0b449432a014a40e0d7813fcb8be9223f01feb60bcd68b5621", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet200-v6/state.json", + "original_sha256": "f382cbde5871e8a147b0d2b2c2ca811c5fb8ba85321cced299fd1a80c7c54fc0", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/state.json", + "public_sha256": "bb603d5742695e5d0d64d6acaed28ae8594d35093777a071b9d7c8801a0a080e", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/record.json", + "original_sha256": "49d9cf5f42ef50ecd7443ec781f8a66a9d6d396e92fad6d7cf4b1c6210d25f9d", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/runner.json", + "public_sha256": "42f1f0e0e958c554c862a4527c457ea48c72078ca28da39bb32155cd967b4992", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-tablet200-v6/state.json", + "original_sha256": "f77ed488b755c12d9badc76495fc5d5628090a525bd5d8a8b5667071c8b37e38", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/state.json", + "public_sha256": "3f692b26d09c9d39e8ff10814db1e0836d195524af654fc44bcf7c9b9c87ff75", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/record.json", + "original_sha256": "62de25fd54747efb01a819ee03bdeb7ac0fddb56c13f35a188015cf291135d5c", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/runner.json", + "public_sha256": "8348aa077aff3db3738666dfc1d48de40dc10a8ee4dfbb48d7ead503b861b7fc", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-phone200-v6/state.json", + "original_sha256": "b5cd55b3b373e398a7d92e81d18c9d03429bf56b5fa336291fa161db05085254", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/state.json", + "public_sha256": "467d29888e4ee342f4a0cc14e89d032863d87dbc9d97d3f554192854208202b4", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/record.json", + "original_sha256": "bdd253e0dd8723f4771061586e4ea8d9f863cc939086c14a28b95a931402e59a", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/runner.json", + "public_sha256": "3f8f64ac4a13148798b7e25a431246165ae0465cdfe112e098ac1dc02f80a0ce", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-phone200-v6/state.json", + "original_sha256": "304610dbcea671ca93432e9205b9c5ac33a8cc9e87e9d6f579f4af427cf448ad", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/state.json", + "public_sha256": "b4a72358c45f2d1b99302d90f32f15d72157be69c9ad20eea58e47b60d633bee", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/record.json", + "original_sha256": "3f703d7d34f9b995e39ef9938e801bd739fa6a0a2cd0f43ba00caaa0d4d8043b", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/runner.json", + "public_sha256": "46fbaabe26ca57fe9e9461d9dd2b09f350f351dfaf3803b9b487f3c60f7dfe41", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-landscape200-v6/state.json", + "original_sha256": "af61fc88548cea751ec594829610bbf45cbe69dfecf79d782edd9f31eb629b83", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/state.json", + "public_sha256": "1c7ce58e35cc923e72bc671bb507df50ffbce9b44d5e298e89023b98310331a5", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/record.json", + "original_sha256": "b663157e299a730294e69999f496d5889c1fe7080f52a647e44cc5fbcdfaf5b8", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/runner.json", + "public_sha256": "b7d0dc2cd56cc75604b02e3977186511938a0da7a148201aa23210b98711ab1c", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/state.json", + "original_sha256": "19aff86c486bdf5e71ce580a3e52a5d11e2a48c6457fe4e192b311694deca864", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/state.json", + "public_sha256": "cc949a2c1b067f458ea82dc4d5b05ce2d45a1a6569d0755e1ff3994fb7cebf45", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/record.json", + "original_sha256": "c36f30750f8d3c77c5f4c1041216564f386c668a0b70a83b9921fe2fdb3a34ea", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/runner.json", + "public_sha256": "ecdd1fc140624f5b035d659db9990e91501dabbbb7e04c65f7759d2c73442402", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/state.json", + "original_sha256": "91888e86047f74a97a7a5466ad5c04187f80524274b9bc62e04cfd8401da1cd2", + "public": "docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/state.json", + "public_sha256": "76a8b17526a296f46baae99857224c325e027541fac4096f5d0d4f7aeaca8b4f", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/record.json", + "original_sha256": "674365950e446fc172d9f8692e7a21a3dcaa61c1c9ffadc06681613d5551183e", + "public": "docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/runner.json", + "public_sha256": "9de76dc9c85212be7ded7942287281a08e4732ea0582ce27f72083a76fe2f964", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/state.json", + "original_sha256": "59a8f2f5a47ff98a5600b176b439174c9480aa5f21d2a207ef9f418b1eff7c7a", + "public": "docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/state.json", + "public_sha256": "4cc9963e67535490419a8ced35d2fbdc22e032184c0e0f0def91b3e820370889", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/record.json", + "original_sha256": "3f0a0744fec2725eef7fd20cb7e8c04bf82ca4c852e5c808be7d2e75fa07c7cd", + "public": "docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/runner.json", + "public_sha256": "29d1452ca21e115e4456c2ab8713529d318d38c5bf3502b057b769fd12d3c8f5", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/state.json", + "original_sha256": "0f0ca1b8a5e1b89c8fd28d9978bc466b878ca8010e0dc12d4738a5ab62842b7d", + "public": "docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/state.json", + "public_sha256": "a6ea5587df1a50f14d459fea5b7decdde145e3307a74efa0e79d7f0f9652d800", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/record.json", + "original_sha256": "4ae9f924ba113be5f35d087f16686a89b53402d11b93f6e42efef99340f9ec61", + "public": "docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/runner.json", + "public_sha256": "4a00002b4bb04bb30e23b5990055eb95761245f3ccbbd85973980995a2bc0784", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/state.json", + "original_sha256": "5fbc9ac4e2c4bf7bcaf0f8cc666a60fa7b7cf30da49b7edf2c350b370f5c3fd2", + "public": "docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/state.json", + "public_sha256": "3d0449743421e394cc1a34bcce870155a75c6b45d8dc06c911a42770c6d9f2b1", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/record.json", + "original_sha256": "530b42f892050a3be6f85c7b209a2cdcf0b6c5f1cb9c71ef19e441529529e766", + "public": "docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/runner.json", + "public_sha256": "9476eefd511f88adabe479256b31b8d5e1e490626fb265528b25b38cf09cda3e", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/matched-old-tablet100-v2/state.json", + "original_sha256": "d6f6368a66bc5f320acb84b8e661401f5051a432b7cd8f1c7e3edad84a38cd51", + "public": "docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/state.json", + "public_sha256": "a34c1247331d31fc93c845e9721e533e8a5057a079b9cba14127f0cbcc7156ea", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/matched-old-tablet100-v2/cohort/record.json", + "original_sha256": "b4d1c623919924900c14118de820327943ba5f583209fdf330805ad54f8a968e", + "public": "docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/runner.json", + "public_sha256": "dedac5f87e571b94c9660dc5e561ded861e568fb46159c24e0279a505d1db281", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/matched-old-phone100-v2/state.json", + "original_sha256": "3b0d5dc52cd2eaf12abd032126124db8362f15a3393cbdc4b60f136b636c16a0", + "public": "docs/validation/paste-copy/cohorts/matched-old-phone100-v2/state.json", + "public_sha256": "baa3983aa87e343a4ecb348f2b0be205375a0bbcff1788cf18a4a63c60b115a8", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/matched-old-phone100-v2/cohort/record.json", + "original_sha256": "60f9195ee9ae5be79bd26dd976ac709f98b8f3b714c335564096b41776c8acad", + "public": "docs/validation/paste-copy/cohorts/matched-old-phone100-v2/runner.json", + "public_sha256": "2883d6af8f33774bb34ac6b4f5f2dea06589e88b34c8d0da61a5360221776acd", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/state.json", + "original_sha256": "5cbdc1b3ac52962dbd2a2d846755f78d58b886782b577c3e203ff56265be0639", + "public": "docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/state.json", + "public_sha256": "503ddc8d66b13553f9d3f4e0cc60e0d90872497ee44137fd9f94bd2d4939d697", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/record.json", + "original_sha256": "25833c3c481d71a03e515bbd9b0eaadaa54ddd5bfdc3339720adabc6c92e385c", + "public": "docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/runner.json", + "public_sha256": "22aaf7f34744c3290dfcba1593d0c8dc26bb5936d691102589232205719aecb0", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/paste-pending-tablet100-v1/state.json", + "original_sha256": "7ede5bb9fa77a84e324b2fbb835627cb2f835b88d582de70f482df7bf271cdbf", + "public": "docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/state.json", + "public_sha256": "42420da86916a8e3e7c000aef69a97bd68528a0560fffcf0d3145507f5bf38e0", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/record.json", + "original_sha256": "f6232e1baa44a794aaeee516f556a8dcbb3f327ca79789e3e2bbf2b0ec193f45", + "public": "docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/runner.json", + "public_sha256": "c6bbb3538d93a8da364fa92cca21400f85304e404dc37a5d5a4c8239cc97e89e", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet100-v3/state.json", + "original_sha256": "d19111e57a323f6297b5899f56123c9eea03a6ae932e37e69ca733bbf7fca726", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/state.json", + "public_sha256": "294fa440b124a76e92e3c84b25fdeb260ae4eb2667ed5bf6607c9f8172830b65", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/record.json", + "original_sha256": "be2d82e56ef9ff5a05e34748a7f7b1110cb4376d740e2c5f21a3a915bf4eb310", + "public": "docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/runner.json", + "public_sha256": "5925f9a64a8f86aefb2a78bfce3f2e41626e7ded0f5b9f1bf5daec8bbe65d89c", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/state.json", + "original_sha256": "e383fefa7763dc4bc8cf18fd09be93dde9c80affef39f2a28b4b71c66a97ecd4", + "public": "docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/state.json", + "public_sha256": "ba768bc24bbada7e430f99b0fd29fbf44df6e638fb32ebbda8af06644e6bc0e5", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-full-tablet100-v5/cohort/record.json", + "original_sha256": "3ac936e2c703c8cb4cb1b13afc47c116dbd6fef515ead38a874d92f8fbdc1f33", + "public": "docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/runner.json", + "public_sha256": "a2f622c1a349e39953053265b6cdd8b85ec232701940a2b795ced499c85ca328", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v6/state.json", + "original_sha256": "b97c2df1e4259f7fbd8199b6382da97117cb93f68e631098e4765cccde72c98f", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/state.json", + "public_sha256": "48cba4b8ac32422ee2d88ccce2db5beab8bb5f71bb84dab2d304d032b59099e2", + "recipe": { + "kind": "top-level-allowlist", + "keys": [ + "completed", + "scope", + "runtime_source_commit", + "test_source_commit", + "app_sha256", + "test_apk_sha256", + "collector_sha256", + "layout", + "font", + "method", + "group", + "classes", + "expected", + "passes", + "runner_exit_code", + "cleanup_checks", + "cleanup_passed", + "same_boot", + "durable_data_unchanged", + "pre_existing_evidence_unchanged", + "durable_file_count", + "evidence_file_count", + "case_records", + "native_case_records", + "workflow_outcome", + "expected_negative", + "app" + ] + } + }, + { + "original": "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/record.json", + "original_sha256": "ae62c5f77c0909a83e65e604ca760df92841706723a0737a1b2890e917f4c401", + "public": "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/runner.json", + "public_sha256": "47af286e698bf2519f4a76fd52c698aab7b0b46475ef0107369a290ce8d0b3d5", + "recipe": { + "kind": "runner-allowlist", + "top_level_keys": [ + "completed", + "serial", + "avd", + "layout", + "font_scale", + "classes", + "expected", + "runner_sha256", + "archive_sha256", + "typed_workflow_archive_sha256", + "cleanup_helper_sha256", + "clipboard_helper_sha256", + "document_helper_sha256", + "instrumentation_excluded_tests", + "reviewed_json_command", + "reviewed_translation_command", + "expect_completion_return", + "expect_paste_copy_fallback", + "original_size", + "original_density", + "original_font_scale", + "paste_copy_legacy_reveal", + "recovery_lease", + "evidence_directories", + "shared_regression_cohort", + "apk_sha256", + "test_apk_sha256", + "installed_apks_match", + "clipboard_mutation_permitted", + "instrumentation_exit_code", + "passes", + "tests_completed", + "owned_extension_count" + ], + "recovery_keys": [ + "schema_version", + "phase", + "private_backup_saved", + "identities_retained_privately" + ], + "cleanup_keys": [ + "passed" + ] + } + } + ], + "raw_capture_sets": [ + { + "label": "tablet100-pending", + "cohort": "frozen-copy-tablet100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy", + "files": [ + "docs/screenshots/paste-copy/tablet100-pending.png", + "docs/validation/paste-copy/frames/tablet100-pending.xml", + "docs/validation/paste-copy/frames/tablet100-pending-frame.json" + ] + }, + { + "label": "tablet100-copied", + "cohort": "frozen-copy-tablet100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy", + "files": [ + "docs/screenshots/paste-copy/tablet100-copied.png", + "docs/validation/paste-copy/frames/tablet100-copied.xml", + "docs/validation/paste-copy/frames/tablet100-copied-frame.json" + ] + }, + { + "label": "tablet100-source-return", + "cohort": "frozen-copy-tablet100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return", + "files": [ + "docs/screenshots/paste-copy/tablet100-source-return.png", + "docs/validation/paste-copy/frames/tablet100-source-return.xml", + "docs/validation/paste-copy/frames/tablet100-source-return-frame.json" + ] + }, + { + "label": "tablet200-pending", + "cohort": "frozen-copy-tablet200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy", + "files": [ + "docs/screenshots/paste-copy/tablet200-pending.png", + "docs/validation/paste-copy/frames/tablet200-pending.xml", + "docs/validation/paste-copy/frames/tablet200-pending-frame.json" + ] + }, + { + "label": "tablet200-copied", + "cohort": "frozen-copy-tablet200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy", + "files": [ + "docs/screenshots/paste-copy/tablet200-copied.png", + "docs/validation/paste-copy/frames/tablet200-copied.xml", + "docs/validation/paste-copy/frames/tablet200-copied-frame.json" + ] + }, + { + "label": "tablet200-source-return", + "cohort": "frozen-copy-tablet200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return", + "files": [ + "docs/screenshots/paste-copy/tablet200-source-return.png", + "docs/validation/paste-copy/frames/tablet200-source-return.xml", + "docs/validation/paste-copy/frames/tablet200-source-return-frame.json" + ] + }, + { + "label": "phone100-pending", + "cohort": "frozen-copy-phone100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy", + "files": [ + "docs/screenshots/paste-copy/phone100-pending.png", + "docs/validation/paste-copy/frames/phone100-pending.xml", + "docs/validation/paste-copy/frames/phone100-pending-frame.json" + ] + }, + { + "label": "phone100-copied", + "cohort": "frozen-copy-phone100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy", + "files": [ + "docs/screenshots/paste-copy/phone100-copied.png", + "docs/validation/paste-copy/frames/phone100-copied.xml", + "docs/validation/paste-copy/frames/phone100-copied-frame.json" + ] + }, + { + "label": "phone100-source-return", + "cohort": "frozen-copy-phone100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return", + "files": [ + "docs/screenshots/paste-copy/phone100-source-return.png", + "docs/validation/paste-copy/frames/phone100-source-return.xml", + "docs/validation/paste-copy/frames/phone100-source-return-frame.json" + ] + }, + { + "label": "phone200-pending", + "cohort": "frozen-copy-phone200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy", + "files": [ + "docs/screenshots/paste-copy/phone200-pending.png", + "docs/validation/paste-copy/frames/phone200-pending.xml", + "docs/validation/paste-copy/frames/phone200-pending-frame.json" + ] + }, + { + "label": "phone200-copied", + "cohort": "frozen-copy-phone200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy", + "files": [ + "docs/screenshots/paste-copy/phone200-copied.png", + "docs/validation/paste-copy/frames/phone200-copied.xml", + "docs/validation/paste-copy/frames/phone200-copied-frame.json" + ] + }, + { + "label": "phone200-source-return", + "cohort": "frozen-copy-phone200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return", + "files": [ + "docs/screenshots/paste-copy/phone200-source-return.png", + "docs/validation/paste-copy/frames/phone200-source-return.xml", + "docs/validation/paste-copy/frames/phone200-source-return-frame.json" + ] + }, + { + "label": "landscape100-pending", + "cohort": "frozen-copy-landscape100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy", + "files": [ + "docs/screenshots/paste-copy/landscape100-pending.png", + "docs/validation/paste-copy/frames/landscape100-pending.xml", + "docs/validation/paste-copy/frames/landscape100-pending-frame.json" + ] + }, + { + "label": "landscape100-copied", + "cohort": "frozen-copy-landscape100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy", + "files": [ + "docs/screenshots/paste-copy/landscape100-copied.png", + "docs/validation/paste-copy/frames/landscape100-copied.xml", + "docs/validation/paste-copy/frames/landscape100-copied-frame.json" + ] + }, + { + "label": "landscape100-source-return", + "cohort": "frozen-copy-landscape100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return", + "files": [ + "docs/screenshots/paste-copy/landscape100-source-return.png", + "docs/validation/paste-copy/frames/landscape100-source-return.xml", + "docs/validation/paste-copy/frames/landscape100-source-return-frame.json" + ] + }, + { + "label": "landscape200-pending", + "cohort": "frozen-copy-landscape200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy", + "files": [ + "docs/screenshots/paste-copy/landscape200-pending.png", + "docs/validation/paste-copy/frames/landscape200-pending.xml", + "docs/validation/paste-copy/frames/landscape200-pending-frame.json" + ] + }, + { + "label": "landscape200-copied", + "cohort": "frozen-copy-landscape200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy", + "files": [ + "docs/screenshots/paste-copy/landscape200-copied.png", + "docs/validation/paste-copy/frames/landscape200-copied.xml", + "docs/validation/paste-copy/frames/landscape200-copied-frame.json" + ] + }, + { + "label": "landscape200-source-return", + "cohort": "frozen-copy-landscape200-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return", + "files": [ + "docs/screenshots/paste-copy/landscape200-source-return.png", + "docs/validation/paste-copy/frames/landscape200-source-return.xml", + "docs/validation/paste-copy/frames/landscape200-source-return-frame.json" + ] + }, + { + "label": "tablet100-before", + "cohort": "matched-old-tablet100-v2", + "original_stem": "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable", + "files": [ + "docs/screenshots/paste-copy/tablet100-before.png", + "docs/validation/paste-copy/frames/tablet100-before.xml", + "docs/validation/paste-copy/frames/tablet100-before-frame.json" + ] + }, + { + "label": "phone100-before", + "cohort": "matched-old-phone100-v2", + "original_stem": "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable", + "files": [ + "docs/screenshots/paste-copy/phone100-before.png", + "docs/validation/paste-copy/frames/phone100-before.xml", + "docs/validation/paste-copy/frames/phone100-before-frame.json" + ] + }, + { + "label": "phone100-source-before", + "cohort": "frozen-copy-phone100-v2", + "original_stem": "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller", + "files": [ + "docs/screenshots/paste-copy/phone100-source-before.png", + "docs/validation/paste-copy/frames/phone100-source-before.xml", + "docs/validation/paste-copy/frames/phone100-source-before-frame.json" + ] + }, + { + "label": "tablet100-unicode-copy", + "cohort": "owned-full-tablet100-v6", + "original_stem": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy", + "files": [ + "docs/screenshots/paste-copy/tablet100-unicode-copy.png", + "docs/validation/paste-copy/frames/tablet100-unicode-copy.xml", + "docs/validation/paste-copy/frames/tablet100-unicode-copy-frame.json" + ] + }, + { + "label": "tablet100-uncaught-offer", + "cohort": "owned-full-tablet100-v6", + "original_stem": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer", + "files": [ + "docs/screenshots/paste-copy/tablet100-uncaught-offer.png", + "docs/validation/paste-copy/frames/tablet100-uncaught-offer.xml", + "docs/validation/paste-copy/frames/tablet100-uncaught-offer-frame.json" + ] + }, + { + "label": "tablet100-uncaught-copy", + "cohort": "owned-full-tablet100-v6", + "original_stem": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy", + "files": [ + "docs/screenshots/paste-copy/tablet100-uncaught-copy.png", + "docs/validation/paste-copy/frames/tablet100-uncaught-copy.xml", + "docs/validation/paste-copy/frames/tablet100-uncaught-copy-frame.json" + ] + }, + { + "label": "tablet100-new-source", + "cohort": "owned-full-tablet100-v6", + "original_stem": "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output", + "files": [ + "docs/screenshots/paste-copy/tablet100-new-source.png", + "docs/validation/paste-copy/frames/tablet100-new-source.xml", + "docs/validation/paste-copy/frames/tablet100-new-source-frame.json" + ] + }, + { + "label": "phone100-unicode-copy", + "cohort": "owned-full-phone100-v6", + "original_stem": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy", + "files": [ + "docs/screenshots/paste-copy/phone100-unicode-copy.png", + "docs/validation/paste-copy/frames/phone100-unicode-copy.xml", + "docs/validation/paste-copy/frames/phone100-unicode-copy-frame.json" + ] + }, + { + "label": "phone100-post-copy-sentinel-probe", + "cohort": "owned-full-phone100-v6", + "original_stem": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved", + "files": [ + "docs/screenshots/paste-copy/phone100-post-copy-sentinel-probe.png", + "docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe.xml", + "docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe-frame.json" + ] + }, + { + "label": "phone100-recreated", + "cohort": "owned-full-phone100-v6", + "original_stem": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer", + "files": [ + "docs/screenshots/paste-copy/phone100-recreated.png", + "docs/validation/paste-copy/frames/phone100-recreated.xml", + "docs/validation/paste-copy/frames/phone100-recreated-frame.json" + ] + }, + { + "label": "phone100-parent-restored", + "cohort": "owned-full-phone100-v6", + "original_stem": "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output", + "files": [ + "docs/screenshots/paste-copy/phone100-parent-restored.png", + "docs/validation/paste-copy/frames/phone100-parent-restored.xml", + "docs/validation/paste-copy/frames/phone100-parent-restored-frame.json" + ] + }, + { + "label": "tablet200-keyboard-focus", + "cohort": "owned-keyboard-tablet200-v6", + "original_stem": "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused", + "files": [ + "docs/screenshots/paste-copy/tablet200-keyboard-focus.png", + "docs/validation/paste-copy/frames/tablet200-keyboard-focus.xml", + "docs/validation/paste-copy/frames/tablet200-keyboard-focus-frame.json" + ] + }, + { + "label": "phone200-keyboard-focus", + "cohort": "owned-keyboard-phone200-v6", + "original_stem": "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused", + "files": [ + "docs/screenshots/paste-copy/phone200-keyboard-focus.png", + "docs/validation/paste-copy/frames/phone200-keyboard-focus.xml", + "docs/validation/paste-copy/frames/phone200-keyboard-focus-frame.json" + ] + }, + { + "label": "landscape200-keyboard-focus", + "cohort": "owned-keyboard-landscape200-v7", + "original_stem": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused", + "files": [ + "docs/screenshots/paste-copy/landscape200-keyboard-focus.png", + "docs/validation/paste-copy/frames/landscape200-keyboard-focus.xml", + "docs/validation/paste-copy/frames/landscape200-keyboard-focus-frame.json" + ] + }, + { + "label": "landscape200-legacy-reveal-before", + "cohort": "matched-legacy-reveal-landscape200-v7", + "original_stem": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before", + "files": [ + "docs/screenshots/paste-copy/landscape200-legacy-reveal-before.png", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-before.xml", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-before-frame.json" + ] + }, + { + "label": "landscape200-legacy-reveal-after", + "cohort": "matched-legacy-reveal-landscape200-v7", + "original_stem": "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after", + "files": [ + "docs/screenshots/paste-copy/landscape200-legacy-reveal-after.png", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-after.xml", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-after-frame.json" + ] + }, + { + "label": "landscape200-interior-reveal-before", + "cohort": "owned-keyboard-landscape200-v7", + "original_stem": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before", + "files": [ + "docs/screenshots/paste-copy/landscape200-interior-reveal-before.png", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-before.xml", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-before-frame.json" + ] + }, + { + "label": "landscape200-interior-reveal-after", + "cohort": "owned-keyboard-landscape200-v7", + "original_stem": "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after", + "files": [ + "docs/screenshots/paste-copy/landscape200-interior-reveal-after.png", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-after.xml", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-after-frame.json" + ] + }, + { + "label": "landscape200-original-keyboard-failure", + "cohort": "owned-keyboard-landscape200-v6", + "original_stem": "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure", + "files": [ + "docs/screenshots/paste-copy/landscape200-original-keyboard-failure.png", + "docs/validation/paste-copy/frames/landscape200-original-keyboard-failure.xml", + "docs/validation/paste-copy/frames/landscape200-original-keyboard-failure-frame.json" + ] + }, + { + "label": "phone100-form-regression", + "cohort": "regression-callers-phone100-v7", + "original_stem": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination", + "files": [ + "docs/screenshots/paste-copy/phone100-form-regression.png", + "docs/validation/paste-copy/frames/phone100-form-regression.xml", + "docs/validation/paste-copy/frames/phone100-form-regression-frame.json" + ] + }, + { + "label": "phone100-detail-regression", + "cohort": "regression-callers-phone100-v7", + "original_stem": "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail", + "files": [ + "docs/screenshots/paste-copy/phone100-detail-regression.png", + "docs/validation/paste-copy/frames/phone100-detail-regression.xml", + "docs/validation/paste-copy/frames/phone100-detail-regression-frame.json" + ] + }, + { + "label": "phone100-handoff-regression", + "cohort": "regression-handoff-phone100-v7", + "original_stem": "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context", + "files": [ + "docs/screenshots/paste-copy/phone100-handoff-regression.png", + "docs/validation/paste-copy/frames/phone100-handoff-regression.xml", + "docs/validation/paste-copy/frames/phone100-handoff-regression-frame.json" + ] + } + ], + "retained_capture_hashes": { + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "2a8200c0c6cb7a41dc09b32b8a64ee646dbfe1fb38a6b0fe9c80d72d7c3862cf", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "f79b74c428251679d89fe0d5741afadf25190def0a2cf83f52f6f014f567e397", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "c2f9eb381c5d341cf0ef9cfddbeb13766506724dfcffbe66c63bafff0c87258e", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png": "c5fc50261a2d214d2690e06055a1d76d9f3ad0d18db9be10c7a612c1f4b993ea", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml": "ca597830cb26cb460733662715c8194b5de72ca1b59dcb78f6519fef1849b787", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png": "4dfe74af7b0577be2379bc024c7f647a4ae0805fb04968ed662f41005f82f0d6", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml": "61fc70bc7d92e81ddf1eda65552a636bdbb1064bc2b2e1d0b944e291c6e107d8", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "81517c08a11fbac15e266f4953772908d800d6561006f5b85b4ed28a257e71b4", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "78faaef6d78386b25d58f4e11ecd9f401b80192b364c81cab5f45d296ad70448", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "49f647a2647d56adddeb212c65bd3bcb7813751bdd5b2ca757b22f525e8ed4c7", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "a78bf3f019c26ac007f1e8f7964462b7d11c93e149c1cfe7cf94e47a2fec6eba", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "b396bdd7c0db6bcbe59957a807bfcd0c51febbbc2331c47a6c4ae7ba1d217d93", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "d1ab8ded7e3ab4bedbdc5056268600b78ccad8e7fc9e14a920cf5d4ec510b7af", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png": "78faaef6d78386b25d58f4e11ecd9f401b80192b364c81cab5f45d296ad70448", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml": "49f647a2647d56adddeb212c65bd3bcb7813751bdd5b2ca757b22f525e8ed4c7", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "c5fc50261a2d214d2690e06055a1d76d9f3ad0d18db9be10c7a612c1f4b993ea", + "artifacts/paste-copy/frozen-copy-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "ca597830cb26cb460733662715c8194b5de72ca1b59dcb78f6519fef1849b787", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "d7ab82864290c8ac5dda47d7c628c88660089f70c47e606924fcb30465116b20", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "a117a486f85561e10d3a69fb5a56211ce4792270738a72fd1f2f45a6bf021abd", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "ad4bf39d8d6adc8a047f5d1cc17e2bd0708dd21e9db0d589ec836120481c4790", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png": "cc9ee90d00a28d464ae765bf7c6be23ba6bad63885d622c43571f3228a215524", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml": "0295994a33d510e8b627cd9f357bc6ca123054212d86bdb6b0b82dbbe3cd5678", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png": "95aef3551f1c2c1dc7ebda5a76043994f1ad1cbf59f07bcd8f17ff55f391220f", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml": "1852060ae14440d4d0e54105cdf3ba51a968fb599cb010182ef7a9fe34f251ee", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "93262f6e989920bc3d9e8f31b380c2303035ad964ac2bc5a946d4b80d1f0cc61", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "82ba4e51704149920e3072f0eca071c2bfc322e55d5973c956cad18799de8bb7", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "378820908f5caf71f68de057c3fc20d7fbf97113c5d47aa1cd7007bbd8643b07", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "ecd6750343df9d8c8f5dedf47454433112681aad9fc538513125b56368f9c612", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "7934d3db75a73cc06dd186e14b294c9d7977dbc6b759203255c2e84a13728aba", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "dafb2846cfde614c8a4bff3e170579898a18edb812fecb97a98862c7b6e1ef3d", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "c1a5c3292da3b27b48ee7cda08652061002ced345eabb4a1b91d100ce73f609e", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png": "378820908f5caf71f68de057c3fc20d7fbf97113c5d47aa1cd7007bbd8643b07", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml": "ecd6750343df9d8c8f5dedf47454433112681aad9fc538513125b56368f9c612", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "8866207dfa196cea8ff3a2bb7c48a628115f514a70bd112a23c6d002abf56946", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "cc9ee90d00a28d464ae765bf7c6be23ba6bad63885d622c43571f3228a215524", + "artifacts/paste-copy/frozen-copy-tablet200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "0295994a33d510e8b627cd9f357bc6ca123054212d86bdb6b0b82dbbe3cd5678", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "2a8200c0c6cb7a41dc09b32b8a64ee646dbfe1fb38a6b0fe9c80d72d7c3862cf", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "d984c20199f8f7247857cdf7461533a221ce9f72665484a079a906120bd447d1", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "16793f3367493fdb631cf7049b8b41c3c1a62b854d723740f5a6f716c7eaaf11", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png": "d5866db245fe21e3a00ede3b67cf56fdf9ec06748f8f3f868b731da37204174b", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml": "9e4cd513636f81f02c3972c7246f4e5bd4ede0d03106e73a951876dea970e7bf", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png": "73267743e5faadba26226dc12b5e34cb22ccbaec4a31105ddf2ca933d0dd0d50", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml": "4d5011527e6932c03eaa6af53b03f6459093fb5f71460a08c33a5db4775f3d43", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "d5366f23412be9567c58b1c4dba82e4b21c866fdc4b1f95604cbc80b9b32d3cc", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "a78bf3f019c26ac007f1e8f7964462b7d11c93e149c1cfe7cf94e47a2fec6eba", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "aa2f4e31055aaf0267096fb80262e8a6827fc5d4d261bf48cf418993ffedf805", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "0b95de188da6872730d77b21fc8b651cd6d3c551a07e1529665aa58dec3fd3d2", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "d5866db245fe21e3a00ede3b67cf56fdf9ec06748f8f3f868b731da37204174b", + "artifacts/paste-copy/frozen-copy-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "9e4cd513636f81f02c3972c7246f4e5bd4ede0d03106e73a951876dea970e7bf", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "d7ab82864290c8ac5dda47d7c628c88660089f70c47e606924fcb30465116b20", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "d347bb39ba8c04fd5682fad73a92bdb437c5ea94c6b9f39668bddd540517e389", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "9305d8ffb166e13f9ff1c7c576f41da54257a4a6871d81e65f5960ee89211753", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png": "1ec7a14db79e96bb8f37f0e40578c147df24a8d20faaa5d1529eadd01faf74c8", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml": "84c67c5106abdf20adfe6c333b4dad21e645463d03b943ef6d52f11b757c2118", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png": "51037b91f7dcfcb729e822ee3772e39574de5fc40c4c75a1df1482dcd346a309", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml": "56797a379cd51fad4bd80b59d35ac9d63784800f673f249466563712074880fe", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "5eb1bca9dbc63d7be40cb9cf0674cf7a06903472357cfc3e61d5195d3d9ade97", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "82ba4e51704149920e3072f0eca071c2bfc322e55d5973c956cad18799de8bb7", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "d461f15cfa7050a129b2d968cbf75bfd8ec8aa853e28a0f2faa83f52cdff359e", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "037c91c7966ea2db57b5d29f3289a1b660a8ec530bb530bf1c137b4aaa55ece6", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "7934d3db75a73cc06dd186e14b294c9d7977dbc6b759203255c2e84a13728aba", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "02ff7cfe7431a57455ed7ef98030feb554eb9afd50f3516af2dfa614b7fc24ea", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "e978501739156112a1fdc7a043b8e82c5eb6a7d017ab44e429ce1a28b2427924", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png": "d461f15cfa7050a129b2d968cbf75bfd8ec8aa853e28a0f2faa83f52cdff359e", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml": "037c91c7966ea2db57b5d29f3289a1b660a8ec530bb530bf1c137b4aaa55ece6", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "8866207dfa196cea8ff3a2bb7c48a628115f514a70bd112a23c6d002abf56946", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "1ec7a14db79e96bb8f37f0e40578c147df24a8d20faaa5d1529eadd01faf74c8", + "artifacts/paste-copy/frozen-copy-phone200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "84c67c5106abdf20adfe6c333b4dad21e645463d03b943ef6d52f11b757c2118", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "2a8200c0c6cb7a41dc09b32b8a64ee646dbfe1fb38a6b0fe9c80d72d7c3862cf", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "f82354b0fbd27f710dda0fd6c7b07ab4e3555a6839870ea0bf16b697875ef3fa", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "2a6bf294104343968431b5065d2034b13c933a9cad0bfc8673e92cebd8155fb8", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png": "abf4caabbbca026ed8bc3255d42e2a04bc46b9308ffe7832f44a13ad86ba76a2", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml": "05c9314121159fb59f0f35c0600c43e777aa426a89a40514b6cfa106925565df", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png": "2c208ffd75a697e2281997019fc3604b02f2c6ff77f2ae480e1052dc3c0541ee", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml": "53642be2c03acc86dfc3779f5d9f3f16cc604f997668e53ab134ece38622a1f9", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "2f9bd5e0e4a34956f14e8b1b3d6df386ba7eb0a90fd705397e44d4e169852a1f", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "92ab0f13583629a290fd14f9a2c2414df104dc6b5c2e074e59cc1d915270e251", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "af120ce98a88702bfc2e3b5aa0da52e8aab83051ae32c4275ec973392f53fe10", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "a78bf3f019c26ac007f1e8f7964462b7d11c93e149c1cfe7cf94e47a2fec6eba", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "bb411407562a1f9cc89a65bd395e222f8d034a633e28423882e13a211f38cf5f", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "c43ef0e699bf2af338a81dd5e7529d7b29b82037bbabc040f6fcc1fe40924a77", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png": "29733d3df53a7e0c402e1259cee63730199707cf1fd40f28437f6d9ec3a7eeb1", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml": "efed08a0d8ad53e3acf44410d6282a5c5c0bd0ca195daea1edfd4dd436c6f9b5", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "abf4caabbbca026ed8bc3255d42e2a04bc46b9308ffe7832f44a13ad86ba76a2", + "artifacts/paste-copy/frozen-copy-landscape100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "05c9314121159fb59f0f35c0600c43e777aa426a89a40514b6cfa106925565df", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "d7ab82864290c8ac5dda47d7c628c88660089f70c47e606924fcb30465116b20", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "0b47508ef2e399cc86df50d9d56aa57291b85b8298e0e1423c38db95629ccd14", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "a6e17543a7181b8ecdcf3c28836225301a802818dcf5a5259d65e1ff20bab9a4", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy-frame.json": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.png": "8a3a6225ffcdb5779b0c181f22e219ee25a7f30b4f5e40bda9aa2e0a6651bc4e", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-before-copy.xml": "9d3cc9d132b59186084aae32ad8dcded35184d3401c81894a035adde56c2e64b", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy-frame.json": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.png": "c66a50340827e8c0aaf217bc23d3783aa41c67420014f7664e036a7c5e9ad23d", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-paste-fallback-exact-copy.xml": "56566a2dcaa97238106e5b83a83b57c02b6d5a94b836a1d21b17c166fc32b6a8", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "4e17acaa4c7c815b996d5d895d0dfddd074b36c1301bad3e97bb7c420f99af57", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "82ba4e51704149920e3072f0eca071c2bfc322e55d5973c956cad18799de8bb7", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "7872e64b98f189e1e7ed70fe00cf780800a41f54cfdd9db48bbbe37d5fbde610", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "9d6c93d6931b39ea007911b217e0226c975dbdcd201eaee855bebdcce729a3a0", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "7934d3db75a73cc06dd186e14b294c9d7977dbc6b759203255c2e84a13728aba", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "7caab0be0a26932173c0300054dc890493dca8d09e5f6b6550b5f0a7628caf2c", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "5155b42ecdaf0647499c3480ee54f53eb0be5a28b2be93b27b4fa586e9f5a5ad", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png": "12e03b793735423d713c51d50616eb7b96f1cf17af90880651481eabde90978d", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml": "393a526747c9868a23bd2d44c1877053586e468de8e3bfb149edc245935e726a", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "8866207dfa196cea8ff3a2bb7c48a628115f514a70bd112a23c6d002abf56946", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "8a3a6225ffcdb5779b0c181f22e219ee25a7f30b4f5e40bda9aa2e0a6651bc4e", + "artifacts/paste-copy/frozen-copy-landscape200-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "9d3cc9d132b59186084aae32ad8dcded35184d3401c81894a035adde56c2e64b", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return.png": "bba7867805458b35dc3ae5f8aeda0564c2a9ab42a903eec7c171ae239aad9115", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return.xml": "6bf67e46cbca59eac70c2c5d4cd6711320b620a3c9bd167acc05b3a2f8b9f7a3", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy-frame.json": "4094da2885f184d3e71c5a6384755e3bc7447439a43132ff19bb15ed8da6873c", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy.png": "bcb42df0bf9c7fc79fe668f1f61e8956dd09f5754e68725cb9cf6889c9ccbd73", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy.xml": "e51a7c59b7236b7694f2d2813fa0ffdb027e0110cbd2000e74b926e051438717", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-record.json": "4c4c2701430dc35596b268d0a0853a7520a886b85b89799d37f5d40e732b1f52", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-cancelled-caller-frame.json": "a4d73d360bb1dbe27a07987e0a515d7e4313919ffed3ceaaf55808494a299921", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-cancelled-caller.png": "9aa3a997861916db95f8ddca21163b2cf96c0ce91e283b8c8d22fb7224d5ef51", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-cancelled-caller.xml": "308fc0a560eb3a0908168cd23dbe9bd72e046afeb06b578562a3475e6aeaa62d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json": "fa3449cc785ec08924358ac86c353b61c9e1ed5ed485bb50f1bf945f4be57196", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-rejections-without-copy-frame.json": "3e85f9bd9424ad3c426bf0b17462467abe05d9b155ea86b23069a72952aaef18", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-rejections-without-copy.png": "368fdb0c9c6d62dfe4699f1147001c4b5ca0577a855e02652814b4edb817d49d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-rejections-without-copy.xml": "33fb59893cecbec94a718a390bbba01f48e70e67636de426bab742b198ae9bd7", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json": "7fc9f28143104e9a8a4792ef9b29ce9cb54a509f123f33d53d702d5b2de74781", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png": "9f2b1346fcb14e41b6f3d6344f7947c933a620cf366659c47baa321797eeac6b", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml": "95174a3470deb5294bde09de923dbe38bbf1a8f2c00af8fc1cdca10ecadbcbb5", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return-frame.json": "b359225e383f769f6be0508389413d7ef23b3a879add7f7659fed959fe419742", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.png": "7cc6941186f33b008b1854eb08ee52c8c49f285deb7605b205124eaead60d11e", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.xml": "308fc0a560eb3a0908168cd23dbe9bd72e046afeb06b578562a3475e6aeaa62d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "15a00a406a35a08ac38d1e1d2cf59df9b6af837e6bfd3cb192a5c2811a73ed11", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-caller-return.png": "09eb2d999dff72dc78b4d4e9d5c1ccad801faa2c12421aaca3795e2cca515758", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-caller-return.xml": "ab62daa03650e60d25a1e9c499ee260972df7e7e340358088ad2df2acd2fef6a", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-focused-current-copy-frame.json": "deed8bed1472a128927a58df0d6b2ba0e3535febc9735a43a9dd805c45d688e3", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-focused-current-copy.png": "87b095d7e908f96287d358a53f8b5028d2e7db55a1d4ff9b31108f96b3764559", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-focused-current-copy.xml": "e7e1ff0cbc86372acd81bec42f27da6240ffea4bf0faeb9d579cf913b9ff844e", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-record.json": "f30e374d7c8c2bc9a538d2cf33e591ec50609c51fa5b3730390bebda4084e28e", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.png": "ad8175d103fc6da39ff98bb2bd9c75481070e1584f267a977bb14107982d9a70", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.xml": "c81c112f44e734b8cddd0f3dda349aa27d6d11ac4ff2c7b2ce20452ed9647214", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved-frame.json": "89b0aca48a5bdf1313f4b645ab6f584a6b690a994717375cd584e708dbfef72e", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png": "5d0928a814a1eb24c034e34f1f86afad027873cea2d0de4f1fbe52e37a810811", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.xml": "96a8d334611c54bc34bbd6cb8c40d1a02bb00e014cc11b9a4c58d2891d559230", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy-frame.json": "fda333d66587dba3377b9fb09cc088a253428d7fb656345c670ac6759de3403d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.png": "5a7d0a2a78cbe263e206b10358a1cf57cc3bd06bce4f21662ebabce48c3be91a", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.xml": "b0057e9c4abc8ffd80ade1348d5ab3cb9ccf241a68911f32530096642d96cbd1", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json": "5ba86776bd4658bf8d9796ae55611c5cd71624f2ce6a330bec6bfac65eb88e94", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png": "0dcfd7c7710ab8d4a86cb2613ddbd6aa5fe69afff30f629d2c932ef0f20b1fa2", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml": "96a8d334611c54bc34bbd6cb8c40d1a02bb00e014cc11b9a4c58d2891d559230", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-normalized-empty-offer-without-copy-frame.json": "b269298ef1f2d546f41a571118f684b64bb854aac1b98e158319e52700f741c0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-normalized-empty-offer-without-copy.png": "a52dcdd756a39140e49bf0465837b21655834392d08ca44c3536742b87bf05c3", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-normalized-empty-offer-without-copy.xml": "524b034a09130b35bb9163132469cad6a85e3e8de224bb9e899f4e964de00ad2", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json": "db6ab188c6b7b79aa0be569a3b4890a65da0a17806760b8990fe2e5a4c65ec7f", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return.png": "cede1e386187fd1abe805f824eb36e33bbecc604469f7094c49fb3b77093c37d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return.xml": "5c38e8d748a0b3d1604944890c5f298f2921c39cf21749cc2b57a40f5c5de923", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json": "574ace642760801f68e1d6f740737cca77602e8a01f555153c70518c6ac8c8e4", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output-frame.json": "f691201a65606bcdec24908430bcb16007d3041e18535797b1049da05f5e4cc1", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.png": "283c6bda1d0da0d65fd804776928623f65b12d82344eb61f9b6f9d80e4802912", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.xml": "c7a5b37b1918ff718225f4b8c06961cd0d045304dddcfa6431460e2f2c549507", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return.png": "0bb869fb9372cacae1c35018c6f5dcf08a8826f90a1acb5f601412dc6926d164", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return.xml": "ab62daa03650e60d25a1e9c499ee260972df7e7e340358088ad2df2acd2fef6a", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-record.json": "885255c06245c0236a3a782b3afb74c191fd2cfd88b75eda22d67d6c2c46a507", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer-frame.json": "8138e4fd3aece10e3eedfcddd47ab26975b61ac0bb27bfbcc4ce6d0f1ff78708", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.png": "1e9f317bf7a361a33ab06f65015cc68e077b098dcb8c37b350d5f1bf01862712", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.xml": "a3780c3b825ee7bbdf9f888bb7ef73ad8fd31e0580169c3b113fd3b309627155", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return-frame.json": "7fc6a88fa51def9fa9232153f28d7f1ba8c5dbf4bb63a3a5b70f4ef2e4bb5e46", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return.png": "6d319d15fba76e1beddff4e11db4f01d87c1039847338ac5c2daa26014d02d03", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return.xml": "c6d1c3cb10aeafdaa7a91ce0a40c487118d5bc3024aef79642a957d61dacb139", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy-frame.json": "d5eb95f2c9242459d760c66ac1aa4a83978b916c26772f00ba85a894125a8d80", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy.png": "9a642dd4eea19e07878f7ea3a2c96723b0849fc8aabadad2c8f786411fdf19fe", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy.xml": "8814a2360288f42091199bb24e11e3d2eab69328215ee7aefc513a8e46bfef0d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json": "534108bd8f67848a9a0467e91497a55d0120e7e98c7cef587b50e598f8d1083a", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller-frame.json": "59d045dc4f699a627d4eb654f4fce358259fab5506f242a136352571d19de00d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller.png": "0bd2f8a0098d217c35494f546d979d246669a107f52e819401a6f0918f5a6344", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller.xml": "ffcd91c72912062e517e010d14cee73c67b3f38bdbe13af370f88c8994042091", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return-frame.json": "ba3d6b3e3023d474128401b17976d081cfa7574ff20f7b7298cfd85b65ae32e0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return.png": "5bc619d69416b42ae65fa3ec846e3c7ed6746b1b50071a407aa2ac15392a3c7a", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return.xml": "7d048753955993524017e27b0d30337ef7f854c0e50007eba11d748250c099fd", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-record.json": "b92c2b84e7e937f01ed59122e94bc519cef3c04cab49cfdc55495f34f5b223a5", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return.png": "49bfa9de770c5e916e6171f1dba926cba176bcc6d9c94d7b4df03df76f856f82", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return.xml": "c6d1c3cb10aeafdaa7a91ce0a40c487118d5bc3024aef79642a957d61dacb139", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied-frame.json": "5044e7dcffa0c2d32ad11dbcaf932bee45b59ecd284efc31cafc226a4d8ee8ce", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied.png": "679d5d864b85a2ef7c03a6428ca42853231bfc5d4e1bbbe9d4cd71f12497a861", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied.xml": "dd8976c8859dd47159a5adae6ecce18d0e0eecf0e70358d5b87bd422756dede2", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json": "7deb11e965c1cae47585fbd5c8c2ec9d3f59c340f8362675ae987b28e12665e6", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output-frame.json": "597fc5e5de6b69a04a91b2a078c71f71dad4c71fb9ba28f7f6dfd2614b5422fb", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output.png": "b9725b9bc830f08d59e7e3ebb2777e86b642f7c006cb6f52e14f3eb281401250", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output.xml": "de8d3b32719709399e095cd9fe5997b9723b6b168b82d8349747bb4a14070426", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json": "4fdec7debffb2f9e8e5adb85f7f55af46d324b29ba97a462afea1b3e651b6d06", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return-frame.json": "7fc6a88fa51def9fa9232153f28d7f1ba8c5dbf4bb63a3a5b70f4ef2e4bb5e46", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return.png": "689ac4c3a082871e570a38ba68b46a3c77bddd00744f2df08cb2c65c0e036594", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return.xml": "308fc0a560eb3a0908168cd23dbe9bd72e046afeb06b578562a3475e6aeaa62d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json": "0b4ddd6947f7ae426ccf89eab3793006eec2f3a4c406d32b0f117c3b196bc761", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy-frame.json": "348dde590d293fc6fee114e440d243ddd8a15d88cf704257d928c01e41dab919", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.png": "7f60b4e69c28d6658084803655a1a0e6b774225ae3d71d85fd7b3ba883bcea69", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.xml": "fe95bb05c6e7a7fdd2c64224ff2aa979f49eb32f05b074a2c7f19eb379cd2453", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer-frame.json": "941a7e70ef79327e79c5c379f24b30311449834a0b653fa74cac9d7ac05e3f3d", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.png": "5faa13937d1a5bd9b25760033b16a520b43a4525da870b947c3f6508210b4ae0", + "artifacts/paste-copy/owned-full-tablet100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.xml": "81efe8f0c095cbf793ef236868a48182139943028e8a479ec4c5d410275efab3", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return.png": "605a0f26f732fa3d9cb26bc90c8250621c37cd8aa8e4225d3d467a9551c4bf0b", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return.xml": "d7a289679b8986d3786283365b30bb374d86efb34341a6e13a89f19b4ca87853", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy-frame.json": "4094da2885f184d3e71c5a6384755e3bc7447439a43132ff19bb15ed8da6873c", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy.png": "0f5bac866b337b5f99e03603939c1e2512aeedbf24d63695649dd3afbb28cc3f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy.xml": "0a9a1899c894171423b95d17029977861a39b22001d48ba7c540a8905a70f396", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-record.json": "323e9975191061985e50d19a3686b2bd97022293ca8d3a84176808ed031e0c81", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-cancelled-caller-frame.json": "a4d73d360bb1dbe27a07987e0a515d7e4313919ffed3ceaaf55808494a299921", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-cancelled-caller.png": "f51e71920843a6bbbe9fe0bbb64d129d7c4529f4fa2a64cae001633049abfd5c", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-cancelled-caller.xml": "39cc0fe0f374d975b3653421fe8b8f26fc5bb702330e0740e51f242fc0bba088", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json": "9dc7feaf9f2c91c0e7ffe7e6d0e668d40460f77f61b6b672f1a875cb23cb5cb6", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-rejections-without-copy-frame.json": "3e85f9bd9424ad3c426bf0b17462467abe05d9b155ea86b23069a72952aaef18", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-rejections-without-copy.png": "47a228e3588bb99e075b45a3678bfe667b71649a43dfdc6b45895ba6b6537879", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-rejections-without-copy.xml": "439cf3b8958f4f014837f96f6f6d14dd971a31ab93cf7d1df350c33225aab865", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json": "7fc9f28143104e9a8a4792ef9b29ce9cb54a509f123f33d53d702d5b2de74781", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png": "8f1998f25b05c5349bcbc04b996ed68f9903852b484194d47a78fe23f7590b89", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml": "61b849406f48fe3c14d1e0d167315785b26e42f23a38d2e8fd90b7084831874c", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return-frame.json": "b359225e383f769f6be0508389413d7ef23b3a879add7f7659fed959fe419742", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.png": "4da064fc038a0d9bb9b4b1c850db9ee2663e51ef0226f132bb114f3340e7399b", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.xml": "a158088962754995379107c633ad07d31750c94f9aead1dc8afa1cefbdf0d5c2", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "6e8926818a4228323c9b3cd234d9be2ecefbdf898d41b2a92879c49c5aac10bc", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-caller-return.png": "17f9b7966a86f9c34a4e767343cd809cbc1e5aaafa4061541ac75e2dd437ee91", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-caller-return.xml": "f35b1ef7a13b10011d541184f5a1f468aa45f990e9de790799b9d64d907a2e25", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-focused-current-copy-frame.json": "deed8bed1472a128927a58df0d6b2ba0e3535febc9735a43a9dd805c45d688e3", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-focused-current-copy.png": "76cadc768c7e224d36210e061031405fe0448215989273f48c9e997a88938352", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-focused-current-copy.xml": "41c0eede1377ff8c15c1463174c737ab1d6b13618c51f80706a9c5e4e6671f81", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-record.json": "911cd77c205d6df6c456be5e5a1da57b9099cb4338becd3f4c04e619a89b5e47", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.png": "112b2f230fa2b69a7732067da5bf9f44eb056ee83eac523fa825e84f9f694175", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.xml": "a8f20da181f3407d821a42eb632c8bd05b3d26a79c0badf44a7aa9ed219fee73", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved-frame.json": "89b0aca48a5bdf1313f4b645ab6f584a6b690a994717375cd584e708dbfef72e", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.xml": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy-frame.json": "fda333d66587dba3377b9fb09cc088a253428d7fb656345c670ac6759de3403d", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.png": "6f1ed11ca3389fcff9654eaf1e2c1686d3367cd0fbee710f3f9e58b36e4d13de", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.xml": "0c82277bc1d08c1980f565da4a113b922e4b5ee20b4ec0a55bef69d1ea915a7d", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json": "738f0f7b0966b753dc0abc7c575fd37de41eed0c1099313c2eb281473bf72c34", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-normalized-empty-offer-without-copy-frame.json": "b269298ef1f2d546f41a571118f684b64bb854aac1b98e158319e52700f741c0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-normalized-empty-offer-without-copy.png": "54a3ff546e0ab834b4a85e5afee34aeecea71fd2cb83344520bc69a9b8ffad2e", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-normalized-empty-offer-without-copy.xml": "e5eba3efe0dcd87253383c9a042f18613d6b817a22ea0e11309c7cfa6c11be63", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json": "a97150d69f90b372fd5f6166010b3f0f3a1554362a3924d399dbfe6d6b3d895f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return.png": "8aa59728b6765c89b3f8c42f01b3513ca5f623a3beecc2ef9360241bc13f7f8f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return.xml": "ba068869be92711dbbd7d5abb81cff7419e8247a45e35bc94f49199d45735144", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json": "2a52576ccf4ddb4262419906fc136074caee6f430f0c4cd3d064b523689c56e9", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output-frame.json": "f691201a65606bcdec24908430bcb16007d3041e18535797b1049da05f5e4cc1", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.png": "1bc88132ed8cf775940408cfddef01406b5f60ea3ac73425b2b771f840921d90", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.xml": "fe43b42533a73e40e2c6712741ffb02833822974ee025fdd77d94f890bed8fa8", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return.png": "1d4cf7b7da047bacd1b71f60a5d0270c071254aa500924b1192b8fa00701492a", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return.xml": "d7a289679b8986d3786283365b30bb374d86efb34341a6e13a89f19b4ca87853", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-record.json": "443ebb8debe6bf1a745fcfdbd3a47f6aa421bfcd6a785fe2677e1018a564a77f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer-frame.json": "8138e4fd3aece10e3eedfcddd47ab26975b61ac0bb27bfbcc4ce6d0f1ff78708", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.png": "e1e2a69bd702fcf19fd99307ec811f5dbf1df751c821d7a95fb995d949fc9f40", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.xml": "bb5286db9a986232dbe16b3fb162fc3991af68699667197396c2ff157e34bf7f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return-frame.json": "7fc6a88fa51def9fa9232153f28d7f1ba8c5dbf4bb63a3a5b70f4ef2e4bb5e46", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return.png": "23f5df1aa24a5e0d0421fd06a380395ed5a61ed8650ba2dfa75ba087b849c4c8", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return.xml": "0bb981139d9d7796f07965ae13e072f42725989bf886ee29f9131edb72e64d4e", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy-frame.json": "d5eb95f2c9242459d760c66ac1aa4a83978b916c26772f00ba85a894125a8d80", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy.png": "7097ff70ae855e9511ae3175b08928a9aa5adef13aede993f7d773f29c390bca", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy.xml": "fd62554ce3b00a1cb7c364cb0502e3816f4f1a096ef6a2b4fcdc0ec171bd24df", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json": "e52b8e77ba284c3cdcf516af57704ebeacdcdf68f23d138b2c81264b49b12629", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller-frame.json": "59d045dc4f699a627d4eb654f4fce358259fab5506f242a136352571d19de00d", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller.png": "057621150c8cde95f35845267a3f88887f3932c940b030069cfdbb3a937f200f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller.xml": "b243b0cd49f6f01c208dad19df155f2faa0a2efa373cfae3c56eca85e1e06584", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return-frame.json": "ba3d6b3e3023d474128401b17976d081cfa7574ff20f7b7298cfd85b65ae32e0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return.png": "08d40921731a7259d201c6d837592696dbc40872ddc2adfbe7318a9acb553b0b", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return.xml": "05f2e5e4221a22632b0e90da5622dcae62d4336088468105939d1d5a4146f55f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-record.json": "650cd4ef2afae8ec4c898738bb8e9ce6e013d097ea2836b5e956fba499d278db", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return.png": "acfe5cc8f6539193ebe38aa6ebf2300a2b3f3c03dcb8c7b67d9475348a6c6311", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return.xml": "8a9742eb3ff34ad9efa37961cb394cf81866e0a26219e7dcf714adc9c3fa01a0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied-frame.json": "5044e7dcffa0c2d32ad11dbcaf932bee45b59ecd284efc31cafc226a4d8ee8ce", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied.png": "1745dc3e802370f2f334e216cc73eadc906019757f993a5a3ca654520166a692", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied.xml": "54c703490c92f09556d7a5d7b6ae5eaba3f1c97ae74c01ca2b1a897ded5b2ef6", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json": "9ff95354a80250080998c64d190ef67224434741f073b79439fe4675ddcbc5a5", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output-frame.json": "597fc5e5de6b69a04a91b2a078c71f71dad4c71fb9ba28f7f6dfd2614b5422fb", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output.png": "a5f841affe4b725b8c108b936a0c17518fe67e76234671a78096cb7161a0eafc", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output.xml": "9eb2407bae418b5ed8764c0553539ac60404dbd42eebd3ba17498f5fc8de9625", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json": "ee6861878364a9ae18a756b28580915f74d3565d96a45a933c485e04a3fa1fb5", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return-frame.json": "7fc6a88fa51def9fa9232153f28d7f1ba8c5dbf4bb63a3a5b70f4ef2e4bb5e46", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return.png": "8aa59728b6765c89b3f8c42f01b3513ca5f623a3beecc2ef9360241bc13f7f8f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return.xml": "ba068869be92711dbbd7d5abb81cff7419e8247a45e35bc94f49199d45735144", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json": "e6fdc34dc168ca0a5428149d8eeaa9ea1009f41d61fc492aad8d3edf8ace1308", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy-frame.json": "348dde590d293fc6fee114e440d243ddd8a15d88cf704257d928c01e41dab919", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.png": "f8a0240b0cc53bc9e81968ef25f6362130cbb9aaadd68a8ea81ff15a1b79c5ff", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.xml": "4aa0b32bf77af15bc781b8d33ad3b2f1e4ee433abb6b7bff6b23785d42cc29a0", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer-frame.json": "941a7e70ef79327e79c5c379f24b30311449834a0b653fa74cac9d7ac05e3f3d", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.png": "854a4e7ac194bf2fdbaaab9f10c0a2e750865dd9b493856b8e1d316575a2715f", + "artifacts/paste-copy/owned-full-phone100-v6/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.xml": "9460e41bfea98ccd55ab9c37027c28709d4e448a77ec7d643eede30fb47488a6", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return-frame.json": "64eda6fa94d2af650183888c9101943c019fe0a4e299b9cd4a4cfc3ec370cd45", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.png": "2284a42257e8b84f1dc9c97273f708c38495040bf5935e3d794dc4c5e3372edc", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.xml": "e22a81a9889474ffb6d373deba3327e5b73808a9f3a36f40d866e7de21d0fdc1", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved-frame.json": "68153e5512d06dfe590c639cc0437e12988d49328013f86bf2a348b44093353b", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png": "6a68317e3ea36c598d0c47ad7d62911fcbab238f505b3617251252419a631121", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.xml": "6deaa65c9ebdf921619ae15728b7ad40248d63bec661c02bf70570b5b647cfc4", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy-frame.json": "aa79655bc10f8042e5a89e9576d6f7b6806a326b08385372c0ae8fc7512d3675", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.png": "35ada3747bd48e3d5b1ff60d108e2dc1f1dab832cfb1cc967fa2d83bbb6933a0", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.xml": "c08485f89992989e0b3f677b43984f68303bd422350a30007d5b60a76df3aedb", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json": "ad20cfc72ab77a205a0946f88ac4ccb54d044cfcdb2f0fb40caa035054b935c4", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json": "f43cf4da3950b7c1ac8865955cb1d1d42ccd694795ed81bba15328e5e63bae69", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png": "4b01f018b4bf3ef69d88ff3810960865e49c9cc6eecba19029982ec9f49d9760", + "artifacts/paste-copy/owned-unicode-tablet200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml": "6deaa65c9ebdf921619ae15728b7ad40248d63bec661c02bf70570b5b647cfc4", + "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png": "3831e52fe344cadf03c93b05ec7c4559c86b13fc406602e34e804adbd8892074", + "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml": "ac46357ae71d51726ad510b94534d3d4ae5f7d890bc6ff9da5305f401162d35d", + "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return-frame.json": "c3adf2b5558ed715cc8136bfd5d4fa0f4dceb945c5d544e87b68ae4ca069cc8c", + "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.png": "32a6caf7cb0fb135837050a4dde59001c8944c915efb17302adc1275991759ae", + "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.xml": "2d13f60f663b5a0d7ba8816e1be1f63f454ceb4f9a0efea8bbb8baa8b70a6862", + "artifacts/paste-copy/owned-keyboard-tablet200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "a53900e879bb4fe4bdf58faff361ff7f33a14eb2a8cc11d1d52ca8417d525b9c", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return-frame.json": "64eda6fa94d2af650183888c9101943c019fe0a4e299b9cd4a4cfc3ec370cd45", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.png": "63b4ab1108af2a286190956c01a69c606324172c42329b78d4d5b8ea216a9368", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.xml": "7cd9d2854ba385289a1f624e900443588f8365ffb3cee7fbf5a10649096d81c1", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved-frame.json": "68153e5512d06dfe590c639cc0437e12988d49328013f86bf2a348b44093353b", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png": "699586f40417745edcf6c382467f18ee83c61ee3f5ee61852ed09f3efeca6485", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.xml": "a9c7d0e9c3f00119a1fab0211d630038a6b705fa6d9b2df969375c1c4fd6a939", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy-frame.json": "aa79655bc10f8042e5a89e9576d6f7b6806a326b08385372c0ae8fc7512d3675", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.png": "c52fcc4d8125a4a984039b91434569855bbcc09de603a3e1850276cb562af5a7", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.xml": "1fc51c62ebfb09fa55ae48d10fb293747940b464e647b08d592ce5e46dc4c9c2", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json": "21b431d1fedab32515e5ef9112b7c8ea0db9cb0a3dab8921a6533005e67f0ad9", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json": "f43cf4da3950b7c1ac8865955cb1d1d42ccd694795ed81bba15328e5e63bae69", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png": "699586f40417745edcf6c382467f18ee83c61ee3f5ee61852ed09f3efeca6485", + "artifacts/paste-copy/owned-unicode-phone200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml": "a9c7d0e9c3f00119a1fab0211d630038a6b705fa6d9b2df969375c1c4fd6a939", + "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png": "a35e907789c954fc28ded9857d40fccc196fb282e52cbc1bbf319d866db4d8c8", + "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml": "98dd0e929f71ee87966c8539077bd1dc75c150dbbfa9ff47cffad94faed0150f", + "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return-frame.json": "c3adf2b5558ed715cc8136bfd5d4fa0f4dceb945c5d544e87b68ae4ca069cc8c", + "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.png": "7e11a12b5fde7fce5d008dca234e37d58134824370fa0165e0bcc0d9d37624c3", + "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.xml": "d544ff6deae15e62c9cd42498e0332a7d54d339d2aabff8211571817081025c5", + "artifacts/paste-copy/owned-keyboard-phone200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "fbe589d8e320b4b0138c97c053c3b95fbae3a811381e57d2a8d0431c7914bad8", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return-frame.json": "64eda6fa94d2af650183888c9101943c019fe0a4e299b9cd4a4cfc3ec370cd45", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.png": "33d9710ed3361d1ebe92ebe33a647da10f41c3ddb8ac604378eda46b7381ccd4", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.xml": "6386763533a13db4189ae4817c51785c1c6da0b29066f24000372e3ce393de0c", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved-frame.json": "68153e5512d06dfe590c639cc0437e12988d49328013f86bf2a348b44093353b", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png": "4f8b73186ca298e5dc8d4f9fd98e51dde1f4f049a6825b8f137b4556bea5ea7c", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.xml": "3c30fa04a13d51eade3af9a816e7cc8eb3f88348bdddebe7c326a99322b988a7", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy-frame.json": "aa79655bc10f8042e5a89e9576d6f7b6806a326b08385372c0ae8fc7512d3675", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.png": "eed5bb375e2f55da1596c1fe0ed3c0d2b3e1035ee6c70ef60a5104499fdddfb2", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.xml": "6db4e5ba1375bc0225ed95507bb0f33d65dca2a9524c219430c7be7d7fe1ebf5", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json": "0f7d603efde284aab27d38f5035a12fe18f94fb6ccc0170a68019743509fb00a", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json": "f43cf4da3950b7c1ac8865955cb1d1d42ccd694795ed81bba15328e5e63bae69", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png": "4f8b73186ca298e5dc8d4f9fd98e51dde1f4f049a6825b8f137b4556bea5ea7c", + "artifacts/paste-copy/owned-unicode-landscape200-v6/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml": "3c30fa04a13d51eade3af9a816e7cc8eb3f88348bdddebe7c326a99322b988a7", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png": "8aef08e4080a63b51be6e5c0b7aa77602fd84f4171c91cdc262b0a618c50e88f", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml": "8ca49ba351242c120c56570e6bd60e2a19ea65e5d589579cb2e862ffb99e63d0", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return-frame.json": "c3adf2b5558ed715cc8136bfd5d4fa0f4dceb945c5d544e87b68ae4ca069cc8c", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.png": "9e84f86f9912207f812725c6638114b3048dbd0861972d047bff2986d4902562", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.xml": "df996e6cf97655b662257db6aa6a91b84a637b50536e315760b2e20423a6c989", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "329488c96964a692e5f50286ca2b058ad5ca771cd8316ae5530b519c7b04b625", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after-frame.json": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.png": "ca59c404dfc4452935c19866bf2eeba56f85191b00d0a79422ac71f9d8441754", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.xml": "83545d3df18ed70ae9d8dbb82fe6312b0e9e320c32aa651e80c8243034d23e71", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before-frame.json": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.png": "57b617926b625c002e5869a1611fcac30106af441e56a3f380520a3d53305ce5", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.xml": "cbd646441b41058ec96966d747059c5338315c18d79c996aa012d0206a17fa95", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-2-after-frame.json": "b00772e8f5a1ba8b6af5e5be2d62e62b8d324cc6f8f218c75d8b8d48f6e4dfd7", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-2-after.png": "cc1b958237606034de1ca3440b3ed3615391bc5b74caa8cc6d815d5719a962cf", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-2-after.xml": "217607fedbe04e063f3b8293d1f42a6e7ee89412a2c393f018431de4a759e5d3", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-2-before-frame.json": "11b812e3c33e82afd5dc606b79c43624de342b92a52157fe5f080b95caf2d2d5", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-2-before.png": "ca59c404dfc4452935c19866bf2eeba56f85191b00d0a79422ac71f9d8441754", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-2-before.xml": "83545d3df18ed70ae9d8dbb82fe6312b0e9e320c32aa651e80c8243034d23e71", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-3-after-frame.json": "11fa5b8971676f3d390f47bf7d5c56e722b3e5870b7370679204658acb6f4132", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-3-after.png": "d7fe08eb1de86b14aab86c7d487768c0e3683bf6cd3d2a71ff1dafd8239fa43e", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-3-after.xml": "6d2642de6a3c2b87f930a741583d7913f24195a1868e91efe5e9ab592f6b85d5", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-3-before-frame.json": "edbe493b0ce7fa21dd289a58218f36fb27fbc1f7033cfe420d8f5b3bee4f78ea", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-3-before.png": "cc1b958237606034de1ca3440b3ed3615391bc5b74caa8cc6d815d5719a962cf", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-3-before.xml": "217607fedbe04e063f3b8293d1f42a6e7ee89412a2c393f018431de4a759e5d3", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-4-after-frame.json": "f4f404eb6c7c88119214e020f65e71880f5500d0181620190460afc0aa233ad1", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-4-after.png": "185bb1bd527179ec70f404603e128732dc1716eee61392436eb31e7563459736", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-4-after.xml": "c667bcface3d350ff401a62749f7ee05d2c9164bf3fd6f809efcd87a52947ced", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-4-before-frame.json": "b74844c231a0be2e028eab092100ca2026f2ceb8bc4895c8335aa13c14601deb", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-4-before.png": "d7fe08eb1de86b14aab86c7d487768c0e3683bf6cd3d2a71ff1dafd8239fa43e", + "artifacts/paste-copy/owned-keyboard-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-4-before.xml": "6d2642de6a3c2b87f930a741583d7913f24195a1868e91efe5e9ab592f6b85d5", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-caller-return-frame.json": "81dfb0778886f9cccd26b556845aee2d942eefa1b99862ced6f6efb75603c542", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-caller-return.png": "b555321fd02d101a9f3a7947d465986d2651424c0c6cc273e912f9eaf1f66a43", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-caller-return.xml": "a5633e5555d0a0979175020172ac847c9ca8e619d7d044f69211400187b1197a", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-entry-frame.json": "e0c574f563a217bb58b3d58730efada18b228f67bbea75a9ee4a90cdde268ba1", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-entry.png": "c8671739701cf0b68f59b9013367d3b9d459ccbe9b17576c4cac9618a858e926", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-entry.xml": "37eece60364ad2f1f40b54d5ca2b62e6364696a6bea87aa3153cf3942d81f005", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-closed-frame.json": "79554390814ae45fcc0f912f5f98db5d1d6a09024fa454894d6e9d20ef237f7b", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-closed.png": "33b40f2619ba3c8512c797a48a8f0e585641de29c5b5b37add7aba6d0fc56282", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-closed.xml": "37eece60364ad2f1f40b54d5ca2b62e6364696a6bea87aa3153cf3942d81f005", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-open-frame.json": "4c7327ffe0306df59026bb661b4b1dd34e636bcf5be0433d3890fb1797a6507d", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-open.png": "2c2a032f67fbae8bf8430d86a335dcecdd3017e503969a68d10786316311eb39", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-open.xml": "7e469010cf188a6507056392ed3ea9ac8e89bffe10d866277f97d96045328dca", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json": "4cb8571d86843bafb4ed742579452ad8f9242a3cc0edfca6062217abcdbedc90", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-results-query-preserved-frame.json": "8c5ef03abb3f44c82887b733b2e23b3bac3238d3e0718216fdbcbfee34c31888", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-results-query-preserved.png": "95039dc02871286f3fb30835faba95583624448faafbf7e3eb7aead59945cfd5", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-results-query-preserved.xml": "bdc1261acb9809894583a400a3c9644182d0d3e015767652c0d034169900d385", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail-frame.json": "c28e5a908a83820176796bc40927a916fec76883a97d62110bca136081750bee", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail.png": "25bb0b077b38b7d1a78064937148a5e8c6d4e56676ac98dd31b0a9f9436e6051", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail.xml": "f2fa476923aee116f32879afb93b53df4142dd40d9904732b6894ca54ea97522", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json": "6f4702b7294c4775078e52014cb3719be1db9248bc419a7aeb5ba5088b4958bf", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-recreated-fresh-owner-frame.json": "4b55d7784dce90ab4ecc3731d8c9400e289eaa0aeee7fa5668ad9ebb8ce6a653", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-recreated-fresh-owner.png": "7f87745b268744d63281ecbc4bafc797032e416ea043a7bb65044d41da5ac792", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-recreated-fresh-owner.xml": "73ebd351ed2c7cc69c54fc443362baa58dbb58460c6f99226c949dba683de837", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-before-submit-frame.json": "fb497cdc287dc62e19d32adc46f3ce5a2c10ce797c5bd5bcb4d872a0c8f6fd37", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-before-submit.png": "3f79f2cb83534edff46f8b98634e7efe2fc5de09ffb6ad2aa5e3a5f641200b26", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-before-submit.xml": "f57053164edf2ff573ceab32b0b8bc1c9f40f8fe77a5321095548b058430add4", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination-frame.json": "48c12312813ea1e184bb7d3ed82a0c70924fbe237c492e97a97e472e50092fc0", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination.png": "6bfae30c83c284ecaef2ab7dddc87e0530664f297fc48a37c9a6a3b80ade69aa", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination.xml": "308d3481771b8204f8098205c237504bb2781a7848062563425e644b35d6f2c9", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-record.json": "1cb0fbeef1f9eeaa652bf1ae151fc67797caab0fb08160ad09bd6e161582dc08", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-destination-frame.json": "a511b86e8763fc90d2f63eb79d9081aac01f236a7edf56f993cd14dd0f94c76d", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-destination.png": "52dc8c663d234e2b96a59b13ca24e3ffc65723a2bf686247870eb3d7d23d9093", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-destination.xml": "7079cd446eb967eaffb7dafaf7bbb937cdedeef7880d56fa1ae899d801318c71", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-edited-frame.json": "66018f4f65ee189197cadbfdb6fe3f488b781382f937dfc529cb07f012108758", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-edited.png": "a01aef2a09157b60f8a4c4f923a793e70f8f831ee1dbb65867e0ef836239869d", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-edited.xml": "261c8eeb57d49d5d0d1026f71e7797a3a3af46684bb3692671ac58faa21da852", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-password-editor-frame.json": "3f8f265efdf7fd3a4f4a7d097875613cd90685aa6f8168946295650d4b48b501", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-password-editor.png": "ab799e3d0ba17f284dac9abd7a812931e78cef5361e8d0a3a579bc212305368d", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-password-editor.xml": "4ae5e10184402a23356acd85835f1ca0fc149895923e1402a60b39421f1f23e9", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-bottom-frame.json": "f387e258b8c70ae9e39627d759553c05f047a45a475cf5a2d4197ce60b90daa6", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-bottom.png": "f68f4c568f340140ac6535332cb96b79a6b342a0879edb68b903f11b19095f29", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-bottom.xml": "0c35b3abaa2a6e8ee7a85c86ddc3ce09e55d96a7b6f446d7e58a720c22e1e0a1", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-top-frame.json": "0bf5672707e5a3545385acb87dee6b1c22eae06545a48a21fbf2e080f97c63dc", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-top.png": "6c2b7ad32686571b8418053d3eb32adc06d36a51be94c60ee3d521d23eb1d8b3", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-top.xml": "40389e3e4668ae4582017c5487b8314571c59f890a12938af66f745268d59327", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-record.json": "129fe0b50bc626803ec6876f3cfcf76a578411416ea4b6dc9c41d5dddb69d324", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-before-escape-frame.json": "76dafdd80f45444c45e57bece915756104b762d090ab1025d2f7b585fd60ea74", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-before-escape.png": "21a41ff51ce69a4dc9a499971b80d4eda4f40cfc0129dba18930e30621dd9976", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-before-escape.xml": "867aa8b87d261abbbf5fcd1fcf6f700f8cf371de8102f340bf7cf1a98471a9b2", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-focused-return-frame.json": "37896650eacef121448be053eb41036284572d744338cb1b559c4ad54fc3b44a", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-focused-return.png": "a3c509ead6e72c241c94c8208eef519755a6d5f9a30e853051189ae7a02b36a8", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-focused-return.xml": "0cc2d3cab6c7bd11dd02be0b574848fe3587ec9093c129d2e4fb965ab4e46ba6", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-keyboard-caller-return-frame.json": "3548181436526b20a81de65219f2fd97cd32f914f541dfcc2b075e5c616bc539", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-keyboard-caller-return.png": "c69797aeada858d3052096ec2dbcec894c9c688da010f08bfeb6ab9fb49e7750", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-keyboard-caller-return.xml": "0678f8e8dab7ab470640a35cac21030cb00b8b225d3387df03f1e48a1b0715e1", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json": "6d9ec817c0aed2b65a367379d0b3365393b1063381b168045b75cddc0278044e", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-caller-return-frame.json": "30848a57ef79e494c5b14a76256941f1872fa6ea9180a0fb02119bddde263269", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-caller-return.png": "316681581f7c35b6c8e1cea913cada53e9fae0959ef1d05d2e0c1bf5dbd037fb", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-caller-return.xml": "1866c949684012c1cfb1a19c3582dce05f873428aa13fbba03d1f3596ac5026a", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-ready-frame.json": "245736cb35ba72392c0a2e789097cc3c3410f589c5656b6924d9b1b1a0bd4c37", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-ready.png": "84623bd17dcb48c22984cd4b8b0c284580ee949eb8a0bd56b8e2bf8c5052e392", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-ready.xml": "0b00ca23e58465a919941bea4436bc37378b61d820197dc6a496263e42179925", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-replacement-ready-frame.json": "60ba03c62433859348388d314acb40e3aa87c0f302d146cd9a6cd3245a1b6cc5", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-replacement-ready.png": "29427e13594ee1adccd5172f20ae3203edbf0df2fcf8d7a7f386e59e5245b260", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-replacement-ready.xml": "0b00ca23e58465a919941bea4436bc37378b61d820197dc6a496263e42179925", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json": "284854c2eaf45fb55bcd99501eb19be5094e8f8625eb2c18d1095b46724a14d5", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-async-host-error-frame.json": "0b7e99fc831f36c0d346ae9e54ae9e163c0150e5bd0520718b068b6815d08f36", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-async-host-error.png": "46542bedc9028557880cd3a286042a6b084ed732600c976fb9d5ee59db973c3b", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-async-host-error.xml": "6a975809530ec9b03dcca27d7aa4f159ab13a4b77c28c40fde495058a9e13228", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json": "e725aab9ca8d6e942c9cac76df5ff17a830cec0a23419ea51052191f04a3380b", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json": "c0790c5cda9e4d67f2271d35bd41ba026b4aa66d8ecf02f2f918f634bf429c3a", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json": "97b15613c4337e43a3aaf9942fb26fd95397876d1420080a9e66b60c9facac00", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json": "984d5a15aad17fae3af496369bf0e00f3fd54654d19cc2f9138545236a03b648", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-ordinary-unavailable-frame.json": "a5c15e02e00687d903d3504b15c5bbc2ac4939d36597449f60241c73f0dbc354", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-ordinary-unavailable.png": "f6e014d46afa543ad150a2978f9420997629e3eee8202a2d9dfdcd5a816cb825", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-ordinary-unavailable.xml": "fa3238d6db65ae6caa982496660da5f418462fd0f8b44b4b9a9f1da34a2ffc49", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json": "cfc08f4b51c88a0192178edea7915723484cf05714742c69bc47edabd19e0aa5", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-caller-frame.json": "dcda984651e6dcddca79b4776dd9fc8235291821417ad3b109f45f37b94e0a15", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-caller.png": "2261aac796b929f7bdf81e80abfd7b426e091ca4f3b8b04787394fb52c89c612", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-caller.xml": "eb986a0a7c20fca4726bd4b96adc42b78275dc432c673997835c5719fc3129b9", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-chosen-frame.json": "60c0c159c9e36b1a542ba5778673a034c91d347f8a8aad59b1623d6b382b4715", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-chosen.png": "671bdd9c0d042ea30e68c84452f567d73578495ffcf6a50b1af66d8f1ca5a435", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-chosen.xml": "274c6fd5c27eaa5b234be7d277926842be9f6a18eef910be0ed678c86541e8b9", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-copied-frame.json": "5b03454166f2f06c9db84891704d3b48666b0528cf6f3037467027edf37aaad6", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-copied.png": "62fded7367a056fbe6e0f93dc58ef40df9784e43fe90384f8674ea3517e667c1", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-copied.xml": "3af40fc3dffd51085f9c5fd4a954e6e545bdbb7ee3b987993710a772f228e52d", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-entry-frame.json": "69cff66da139e6e5a9ac81c87c7264bea875e5c7d3dcbd61ec4052a3cf6e5774", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-entry.png": "17b8ab6bc25a105e328d24687d43ca1f4ac3c17d1ab91f3c7622deb7487a562c", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-entry.xml": "e478f053bbe1959d25980b83835754c10ddab8824c4218329c70c47862ccbf10", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-formatted-frame.json": "9eeea03503affe7cbe65913e35b0f5833913c1e5b02cec5b8bbb41fd2b2c565c", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-formatted.png": "37dde7fca72635d143278001223c90051be757722db8696518d394d488334caa", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-formatted.xml": "6e109684949e96c70478230dbf3458daeb2c483eae17c1ecb7c5a0be463865e0", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json": "f447cdd002310a43327c9b6e106aaa74d5b833e172a882852dea6ffc7c13402f", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-return-frame.json": "2f8d654d925fd6bebafb5766ec96ecf4ad0da2cdfc099d0deca5f11d26246a67", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-return.png": "7ae0ac01ddb92cf25410d0ed286f8f736cadf8d3eefdaf38efecf92df0e33fc3", + "artifacts/paste-copy/regression-callers-tablet100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-return.xml": "48e44c837ade106d732499700ed86725ea6c86265de3ea86afd694a54ee8e0a2", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-caller-return.png": "2dfee00f0560f81e68d0faea3cb6d33550744639bbc9ad2a917a3199f659f340", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-caller-return.xml": "52b6ee1266d72b734feecc97e432dd6433ab967068c430420d6529590f2a5172", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-child-after-queued-callbacks-frame.json": "df318fadc365ca2cf7c9d230c4ac9962924a62cf4b710ef7cf23b2fbbdd6871e", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-child-after-queued-callbacks.png": "8197bcf3a6396588196c174c855c937d49053ed3c99d337110572e37f83e61b9", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-child-after-queued-callbacks.xml": "7b843d4fb9224f84924c3f8ba51872e363a1470ed65c8b289ba901bdfef7f15f", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-parent-before-queued-handoff-frame.json": "f83631d5eeeec3e4bc51a3e26de9eb55d25a7665dcfa909c880298b5f78e1814", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-parent-before-queued-handoff.png": "9912059bfa84695683860f47b4064e59790c28d5bce9505c3e5886913a92713a", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-parent-before-queued-handoff.xml": "8c08d6a62eed0d3923e04f213cd75417fb40b9245dc805370c7f216f9a635bcb", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json": "d2ac1793b6e4e4da2972753f2fa2dccde3027c24341ebffa6b143528ce8dd8e4", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-caller-return.png": "b627a15804b5db8139562eb99a36ffc265c949a47a1c201134f06a39835be886", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-caller-return.xml": "40e2cb52980a7ac8c4e390f2719cf5727476a3b83619e3375aef92e03a5e7ed8", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context-frame.json": "653798a474ce567cb64c9b07c506c2688205fe418ccf29b20db318bf08138bcc", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context.png": "d8d8afde93077b224ef2cbb02cfa2799bdf64c1bb928e71deccb3e02a98c348f", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context.xml": "ea1f42cd23401e3b676db3faedf8c1a0af718725320e570d530fec913f59b9ff", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-exact-context-copy-frame.json": "13c9846e045ab1cf74a37b2ad6ca10f51f99f89e886148d57d3fbb3a8d4b8426", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-exact-context-copy.png": "31efbfadf84a178b95ae306e82d6e083e0af2178a9f1f2300a3c4c9a4d0f0fbc", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-exact-context-copy.xml": "9a66d58e27655b7e48ce91a63a053437eccb5e4844a94624610c5622a6779d49", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-parent-ready-frame.json": "3933d117dcbadba331b8ce58020b422d0b1e4094df287fc46c7a25d94cdb97f0", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-parent-ready.png": "83b3c090fefda69d27a60fd62b5be1cb4e4ff7e9f5548607f355ab5b89f17e8c", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-parent-ready.xml": "ad23a043d5b177076235fd84daf733b8c0b535925f00ccc1583dc90065dfb403", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-record.json": "d8b79d5263d28e05136125d6610dffb2b38ca7be2d2f781a725d207ad4fc7f46", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-caller-return.png": "0875fc43efaa0a29c00e42186065198d9988207b34a507811f95445ec6532412", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-caller-return.xml": "40e2cb52980a7ac8c4e390f2719cf5727476a3b83619e3375aef92e03a5e7ed8", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-child-after-queued-callbacks-frame.json": "df318fadc365ca2cf7c9d230c4ac9962924a62cf4b710ef7cf23b2fbbdd6871e", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-child-after-queued-callbacks.png": "1b1be351e9d0b4c9f627f0facdd6059afbdd1ff75802fc301d74e7cd427888dc", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-child-after-queued-callbacks.xml": "ea1f42cd23401e3b676db3faedf8c1a0af718725320e570d530fec913f59b9ff", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-parent-before-queued-handoff-frame.json": "f83631d5eeeec3e4bc51a3e26de9eb55d25a7665dcfa909c880298b5f78e1814", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-parent-before-queued-handoff.png": "529ca135a4373f9cc6a194d0de0ca0850e31c8b2db7bb38d1414430b97e22a3e", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-parent-before-queued-handoff.xml": "ad23a043d5b177076235fd84daf733b8c0b535925f00ccc1583dc90065dfb403", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-record.json": "fcc35f4020b40fc05ea527bfee90ceeeabaf8992e0783449d221109adced2d4e", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-caller-return-frame.json": "98cc340703fd974888e17451b5f66f87314d76eaad3aa28ffd082e0f32fd9815", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-caller-return.png": "563653cf55bb6111662dcc98583386ee14630e0e43526f0ff30bd83a232a4093", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-caller-return.xml": "40e2cb52980a7ac8c4e390f2719cf5727476a3b83619e3375aef92e03a5e7ed8", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-record.json": "de2c8ff225897a35dfc40bdd8511683a80fda5f06d886eca7d8aa20d8d9f1409", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-rejected-request-feedback-frame.json": "9a3386063581719dd59c9eae35cf489c39d612bf321df38a091a7e2604e1d388", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-rejected-request-feedback.png": "ceea8fe58ed789aa8ad44a1e26229f37f50b4ef58f9dcdb95846b53e37da4204", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-rejected-request-feedback.xml": "68d5a1dba39fe727485e67e1c2fdaa52dacf298e63afa5234b40c8e3436dbfb3", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-caller-return-frame.json": "7a75592fe9b5a8e13de8ce32f36d7edadb83343fc23eb53f47501271b9d7a57c", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-caller-return.png": "1a259b2444029fd80325e97d6f8341fb9c961617c31f1af4abdec6b2d4c7b03b", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-caller-return.xml": "f2c3d140cac707d566a787638474bba0b9bcee1f84de9481c60489394dc0d2a0", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-ordinary-child-without-context-frame.json": "d1224eac695c26684c201836d0efd4c326c76fa6a7556064220034dbeacd89af", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-ordinary-child-without-context.png": "d216a14bb66d5b54f699393b017ebdefbc2b19c1f58b16aab9f0ef844fd928b1", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-ordinary-child-without-context.xml": "0a980dd8b66fb8e118e63621b8c2477f247b20fb6648038637e024a1e72055a8", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-record.json": "30057737936f6530096ac566d875d0290915f7f6abbc070d62d89a3c75350e1b", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-cancelled-caller-frame.json": "7cf746c90ce169d6cf28ef0ebecc964d2c92502548a6ef1064bd0bf007b6f976", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-cancelled-caller.png": "23398536c8f1a513432fa4064704df2314a641fca1b321eb43e80e211947cf6a", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-cancelled-caller.xml": "f4b408ef0936a133fde0281c620651777d5ac54d20c96fead3315d38b0c4d31b", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json": "21ff3a958f957afeaa9e842014afcbf75699601a231d2ddab8f4c890cd5bb205", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-caller-return.png": "2b71782dde782cdd3cafac04b4f40c0909ed5216c28e4b0ea595a8fb4c462166", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-caller-return.xml": "40e2cb52980a7ac8c4e390f2719cf5727476a3b83619e3375aef92e03a5e7ed8", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-record.json": "a1571826e97da3f50f982cc2ab10f25191902c7fba799a76789a5c09b84779dd", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-recreated-child-retains-context-frame.json": "83440af91b63de81635c5610e8395a899c5be7477ccda40b028bee435614d4b1", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-recreated-child-retains-context.png": "fbcfa71d84ba73161520ac40b8d4b1f2bd38f38bc93dc0b045007e2d79057b5e", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-recreated-child-retains-context.xml": "7b843d4fb9224f84924c3f8ba51872e363a1470ed65c8b289ba901bdfef7f15f", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-caller-return-frame.json": "98cc340703fd974888e17451b5f66f87314d76eaad3aa28ffd082e0f32fd9815", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-caller-return.png": "7405381df867c070eaa0e652bd3e3e843d3291814b301fd9dac89c37ab8040b8", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-caller-return.xml": "52b6ee1266d72b734feecc97e432dd6433ab967068c430420d6529590f2a5172", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json": "bd56018802f27f36f0ef4b5a1bf85aa936bb3b5d250f2c3e40fd95650bad063d", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-restored-parent-rejects-old-preferences-frame.json": "956c5a93da812bbab211271b9f2690c128a281ef73b6ebba477b41c5d0303bd7", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-restored-parent-rejects-old-preferences.png": "a66c3b1cbcd4ed3155ec8dd0f0cc24af010906480c26ddecec2d48518bbfb031", + "artifacts/paste-copy/regression-handoff-tablet100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-restored-parent-rejects-old-preferences.xml": "8c08d6a62eed0d3923e04f213cd75417fb40b9245dc805370c7f216f9a635bcb", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-caller-return-frame.json": "7a310bfa70126abf0d4149c0af3df055faf2f49d8d006c00d532848f42a293ab", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-caller-return.png": "0af94853cc6f2789330f07853fdc03cc27b264ef2a539b9f59c7183305ba473c", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-caller-return.xml": "cf0092c73a66b8ed037fb4ff12ea212d5237694584513b70a2a8474e40982e12", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-entry-frame.json": "e0c574f563a217bb58b3d58730efada18b228f67bbea75a9ee4a90cdde268ba1", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-entry.png": "c4ec655781cdaa8a92e7f6d3b8924bd59d5017096cd68d8fda7ecee8bb306d20", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-entry.xml": "7a9377247fcabb6f71cef955b1f547ae2a933ff38382019c176d8235d4f449e4", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-closed-frame.json": "79554390814ae45fcc0f912f5f98db5d1d6a09024fa454894d6e9d20ef237f7b", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-closed.png": "c4ec655781cdaa8a92e7f6d3b8924bd59d5017096cd68d8fda7ecee8bb306d20", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-closed.xml": "7a9377247fcabb6f71cef955b1f547ae2a933ff38382019c176d8235d4f449e4", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-open-frame.json": "4c7327ffe0306df59026bb661b4b1dd34e636bcf5be0433d3890fb1797a6507d", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-open.png": "2fbd72829a0128d72217fabf62399a378e5dda71ecf4d387f550abab7ec81db2", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-list-search-ime-open.xml": "4ad0e94567d14eb2f8261456009cd3b3be354dc72eab74c5e98a52a7bc22f833", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json": "01564a06e761039edae2c425bf28833474e043421eee87447d9a619cbe43eef2", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-results-query-preserved-frame.json": "8118c420b017d00429ada4690eaee6e3d4c9e31566f8b63afbce2d5d2c9acf10", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-results-query-preserved.png": "0c2c55783c83e39d5d9fd83e45a85559b9d70449c44158d59e94f33fe6635849", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-results-query-preserved.xml": "d0269fc3dc78766b69a37957b2968d299b16c622e4b40b6760428aef4a67b82c", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail-frame.json": "c28e5a908a83820176796bc40927a916fec76883a97d62110bca136081750bee", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail.png": "5c19c9e3873152bd97de9e1b8ef567a4c3520e765f29accacc098115e64d6a90", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail.xml": "0735746eab06e5fabc799962ac4fdea13ae34f4e7a41397d77186e6943767851", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json": "5d3b6fb42912c7d0f154c323fa8a2ec7f567b4448e920841823a733c20a5b374", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-recreated-fresh-owner-frame.json": "4b55d7784dce90ab4ecc3731d8c9400e289eaa0aeee7fa5668ad9ebb8ce6a653", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-recreated-fresh-owner.png": "9f5148650724ba2eff8d670a21d7e6822d02680299513ac1af9ee01270528a1c", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/detail-recreationstartsanewownerandrejectsthepriornativecallback-recreated-fresh-owner.xml": "85d983f526e578594b88053fad8e655df57d1722e36513a8f2dc1c654303f72d", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-before-submit-frame.json": "fb497cdc287dc62e19d32adc46f3ce5a2c10ce797c5bd5bcb4d872a0c8f6fd37", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-before-submit.png": "87a71ce4fdb11d57813f53cbddb78fa85438bf84e0cc5d8f5f72cce4d16325bb", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-before-submit.xml": "8fd9d58a7eb791dbc098e8d7fcd374937ce2b67e9a68c2a1833f68aff074515c", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination-frame.json": "48c12312813ea1e184bb7d3ed82a0c70924fbe237c492e97a97e472e50092fc0", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination.png": "d7f15a095beb26e26c0f58a4b3dd9211b8e52b82750d0dd16640bd15e485d6b5", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-corrected-destination.xml": "e0c0bd34472232e711eeb7ba04156eec9858236d35208d7862a25adaaebd867c", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-correctinganerrorsubmitsexactunicodeonce-record.json": "982657130a3e5a49deb4d98423eb3003f36fcbf15c61ae4199c73178129ecc91", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-destination-frame.json": "a511b86e8763fc90d2f63eb79d9081aac01f236a7edf56f993cd14dd0f94c76d", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-destination.png": "80851bf8644c36d9d961a7e6f17e70cf6080de50456e2e8e55cda60bfae51440", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-destination.xml": "a3d610c5663a38b4b16b6e235d4355c26936c0fff9bb6d79ad0429cce9715a1e", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-edited-frame.json": "66018f4f65ee189197cadbfdb6fe3f488b781382f937dfc529cb07f012108758", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-edited.png": "1bdd22e12bf8a7b3061e6be4182d46d69be1ff3d74e8a863af56a3919545a880", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-edited.xml": "4878344b5f8dddb864361f6e632adac673ef50c7bde96a72820d82d584da5f7d", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-password-editor-frame.json": "3f8f265efdf7fd3a4f4a7d097875613cd90685aa6f8168946295650d4b48b501", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-password-editor.png": "47b7ec2769824ee95408b50af4dae27fa3940aa83aacd4b6e7ca4ad8b8b182bf", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-password-editor.xml": "8a27f06d518cecad82054d674c21240de1f40d9aae4a5a2804b805e6a0197fd1", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-bottom-frame.json": "f387e258b8c70ae9e39627d759553c05f047a45a475cf5a2d4197ce60b90daa6", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-bottom.png": "ee0eda55fdb177ea1fb5e60a3575132383a364d6c6787ccc1139da0084578016", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-bottom.xml": "e2f1ecfaa2c7a747fcd44b1f27c42c31f73bebf4a328eacce4b843b0815f7aca", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-top-frame.json": "0bf5672707e5a3545385acb87dee6b1c22eae06545a48a21fbf2e080f97c63dc", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-top.png": "9ad761cc8ca1201ec7f4e7d0d3f522e467720e11478556c657ece105dee8b35c", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-configuration-required-top.xml": "f1f2f771b69deb009cd4a5ac4552941b44b60f4294cae596685fd12eac31b2ff", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-nativeconfigurationeditsvalidatecancelandrun-record.json": "f76b6a6f72a1fc523d26da5aa7f22ebbf35e16643cbbdda90b2466a0700c1af1", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-before-escape-frame.json": "76dafdd80f45444c45e57bece915756104b762d090ab1025d2f7b585fd60ea74", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-before-escape.png": "38b5808268024bc093183c3e178e00a4ffefe1e3615480e7fdccdb2e1d788b07", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-before-escape.xml": "dd562232633e19a5780ca23e3ea3fe1d970f9e0153eedb5333e4381b2b9ec92e", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-focused-return-frame.json": "37896650eacef121448be053eb41036284572d744338cb1b559c4ad54fc3b44a", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-focused-return.png": "74933a10f3996c20351516864552271ee5d135c1da51536d0962980ef3fa2188", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-focused-return.xml": "abf8af53a7ad44ae635909c83e94237b0109187d77fbd77db49331104ccb5c59", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-keyboard-caller-return-frame.json": "3b54beaa3ac7ed7a00ce9a523c124d912272c96b7e7ad6cd67dca4f5b143bb92", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-keyboard-caller-return.png": "2ff14541606e00789a8f1f50b53f1f061f08f7c5425a900d71a4b1b843d54c94", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-completion-keyboard-caller-return.xml": "f1423c38365ed5d9f91d4023c73d7969e1e398cf1baa0f82cf496439f5dbea83", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json": "765023aae3740b2589fe231c7bdb0969330b1c00243b176bf2e7dec0b6e2d6f7", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-caller-return-frame.json": "f1f932f9ec94a14e12a4a8c44cd783bca0c50bfda686d88291756d5604a02012", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-caller-return.png": "37d9f10b8df62ba17ec9b43a6dab88186e1d63e9b1ad5317fb15c4bf03cb8807", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-caller-return.xml": "d4831a7699055695db16c02809b29889c626ec96cfad04a687911de408824047", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-ready-frame.json": "245736cb35ba72392c0a2e789097cc3c3410f589c5656b6924d9b1b1a0bd4c37", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-ready.png": "970374abee1cc1706b055a37934fa5cc2de501adc32c5d72029b381e6bfab610", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-ready.xml": "3dae4791afb0f746288e3ceb5109f68b5edd2c6d2609a92097d5035780e3c084", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-replacement-ready-frame.json": "60ba03c62433859348388d314acb40e3aa87c0f302d146cd9a6cd3245a1b6cc5", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-replacement-ready.png": "970374abee1cc1706b055a37934fa5cc2de501adc32c5d72029b381e6bfab610", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-completion-replacement-ready.xml": "3dae4791afb0f746288e3ceb5109f68b5edd2c6d2609a92097d5035780e3c084", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json": "8c6d1ab47c7aef2b765aefa5ab329da5d8ad97c6a70ad55eaad8dc4ad38d396f", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-async-host-error-frame.json": "0b7e99fc831f36c0d346ae9e54ae9e163c0150e5bd0520718b068b6815d08f36", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-async-host-error.png": "7c95689ad7ba48c5ca9a9d357a5781d9a46801ef6d27cacac54cc8f3f44801dd", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-async-host-error.xml": "e0b5c139a78420e730b8d2784dc902d1ab8901cebc69ca7406710ead76258529", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json": "c7ac014273ae63c7a9a95e3a1d4229856f5a117ca1a66d323784014662b05df6", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json": "06349d46c7b6b5958ae864f151141230c959249dfbeadd9395cd0dc455831ccf", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json": "8ea6e687be10f707e726f06a5c1c5fa8537dc6530c7617f1d884cbe923fbd9ab", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json": "c98180e2cc2a1feae2d937eca3773c043d8dd943f23c4df66e7327c9b082947b", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-ordinary-unavailable-frame.json": "a5c15e02e00687d903d3504b15c5bbc2ac4939d36597449f60241c73f0dbc354", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-ordinary-unavailable.png": "f12e22103a149eb1dd391596a5cfbced10c750448727bb629a498dc68af498da", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-ordinary-unavailable.xml": "10b743a730ca30f0caa84945c1ff966cdc7271e1cf59ec4a99e6f43ca2408027", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json": "3d9ccab1505011ece4a67d23c24a353383ed8a2a37efa50acb4b5b1c1c4f6425", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-caller-frame.json": "dcda984651e6dcddca79b4776dd9fc8235291821417ad3b109f45f37b94e0a15", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-caller.png": "43b9bbc94ea668c503a67287beb431744218d6ad19f2a435610ef770bf5a61a3", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-caller.xml": "958147e4828ac01df409cc4526fa2b241a64c0dc8a59574b832170b5360860b7", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-chosen-frame.json": "60c0c159c9e36b1a542ba5778673a034c91d347f8a8aad59b1623d6b382b4715", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-chosen.png": "aedb56f8538521f9ebf5072b1ce2cdf316db5531e893192bf2dcde443c453258", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-chosen.xml": "80951cea03a6822a8d713d809eab50aa022a7e83971b416730de4903d7e0aef7", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-copied-frame.json": "5b03454166f2f06c9db84891704d3b48666b0528cf6f3037467027edf37aaad6", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-copied.png": "cc817b4fdd58f4619b4a66607eb553c06803faaab69aed44154f9968a5034bfc", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-copied.xml": "4e641ff450564602795c4f28ee7d826dce6b3fc02c489edc1ecc528c2d0fdb54", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-entry-frame.json": "69cff66da139e6e5a9ac81c87c7264bea875e5c7d3dcbd61ec4052a3cf6e5774", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-entry.png": "ae9bcbee95c831aa4cefc26f53ece60a3fe0efa1aa463cf8bb745cfc10ab3ef8", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-entry.xml": "bff580a10159be8c65dbd6371026a0ab245797c0e03735acecd9539da91fb095", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-formatted-frame.json": "9eeea03503affe7cbe65913e35b0f5833913c1e5b02cec5b8bbb41fd2b2c565c", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-formatted.png": "b25ee3f33562bb3d841416eb29b2d34b231825e65706569fb765e67e3261e485", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-formatted.xml": "58d0eaddb9845e295af4fabe0960dda80c923c1dcce647f7630c81fa2f4c697f", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json": "96e36e6ccc94d4602f92b76ee0d97b1ba26ff70b162186a01bc4a0aa760b7119", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-return-frame.json": "2f8d654d925fd6bebafb5766ec96ecf4ad0da2cdfc099d0deca5f11d26246a67", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-return.png": "eed9b4278c7aa3e6423b6e84ff16a98961d8510a4ac06f64eacb6f2628f8aa28", + "artifacts/paste-copy/regression-callers-phone100-v7/cohort/captures/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-return.xml": "c5b5381f97c9bf4cfdcceaeb8563b49eab3aa9a1e82a8ec9eaef3a729090d4e5", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-caller-return.png": "55cd2ecb800751c3a61dba17dbac8b33b968087d10cc126b12a67a944381d985", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-caller-return.xml": "5e9dbef227933ad5a91c4af76939081f549f6fb9efce80a92c9af4ea55eba028", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-child-after-queued-callbacks-frame.json": "df318fadc365ca2cf7c9d230c4ac9962924a62cf4b710ef7cf23b2fbbdd6871e", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-child-after-queued-callbacks.png": "43498b3702e77065bbfa7c756065b7d5e3aeaa5101893c815359ed5b947c4da2", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-child-after-queued-callbacks.xml": "00204096f643d0e713aa7f94f3b6f35b29f3deb0421530fa5b2db0f6474ba202", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-parent-before-queued-handoff-frame.json": "f83631d5eeeec3e4bc51a3e26de9eb55d25a7665dcfa909c880298b5f78e1814", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-parent-before-queued-handoff.png": "904cd83f68ce59dbb629d2e106d7c21f0cc90068a2320ad5fe1c4075adcde80d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-parent-before-queued-handoff.xml": "ad7d89eb7456d735804da4ded2e1989a7ffc38db994dcaf6da9eb84f839e85be", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json": "40ac98236ad52069af1e77003af915a9139a2d7ef5ef023d0aa82d07781c803f", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-caller-return.png": "4689e6937f3791838998346500b8dd18e5979f8c2d70cf55c07574e8c1a4fea1", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-caller-return.xml": "54b53eed548f6352ae143fe184f2d64c45d0edfbc256bb9183689aba1f12e41f", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context-frame.json": "653798a474ce567cb64c9b07c506c2688205fe418ccf29b20db318bf08138bcc", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context.png": "43498b3702e77065bbfa7c756065b7d5e3aeaa5101893c815359ed5b947c4da2", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-child-context.xml": "00204096f643d0e713aa7f94f3b6f35b29f3deb0421530fa5b2db0f6474ba202", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-exact-context-copy-frame.json": "13c9846e045ab1cf74a37b2ad6ca10f51f99f89e886148d57d3fbb3a8d4b8426", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-exact-context-copy.png": "61dca0ffcffd29c58b0853f99c972c2c321471ab21d33669f5c46e037c9f594c", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-exact-context-copy.xml": "9d9d6c00b7cf41f8f08a16b6447c5da91117c6277dc0611e2603ba0158b62b22", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-parent-ready-frame.json": "3933d117dcbadba331b8ce58020b422d0b1e4094df287fc46c7a25d94cdb97f0", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-parent-ready.png": "904cd83f68ce59dbb629d2e106d7c21f0cc90068a2320ad5fe1c4075adcde80d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-parent-ready.xml": "ad7d89eb7456d735804da4ded2e1989a7ffc38db994dcaf6da9eb84f839e85be", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-contextargumentsandfallbackreachchildandcopy-record.json": "4fdf1c96df71c3b52436b1568c065b048a9e06841f87177ac6ce50704480453f", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-caller-return.png": "55cd2ecb800751c3a61dba17dbac8b33b968087d10cc126b12a67a944381d985", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-caller-return.xml": "5e9dbef227933ad5a91c4af76939081f549f6fb9efce80a92c9af4ea55eba028", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-child-after-queued-callbacks-frame.json": "df318fadc365ca2cf7c9d230c4ac9962924a62cf4b710ef7cf23b2fbbdd6871e", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-child-after-queued-callbacks.png": "43498b3702e77065bbfa7c756065b7d5e3aeaa5101893c815359ed5b947c4da2", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-child-after-queued-callbacks.xml": "00204096f643d0e713aa7f94f3b6f35b29f3deb0421530fa5b2db0f6474ba202", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-parent-before-queued-handoff-frame.json": "f83631d5eeeec3e4bc51a3e26de9eb55d25a7665dcfa909c880298b5f78e1814", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-parent-before-queued-handoff.png": "904cd83f68ce59dbb629d2e106d7c21f0cc90068a2320ad5fe1c4075adcde80d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-parent-before-queued-handoff.xml": "ad7d89eb7456d735804da4ded2e1989a7ffc38db994dcaf6da9eb84f839e85be", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-duplicatelaunchrequeststransferonlyonce-record.json": "e1bfa790ecdb94caf4b74cc1a54d664821cdb27a7082cc13eef3a273b79d2690", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-caller-return-frame.json": "98cc340703fd974888e17451b5f66f87314d76eaad3aa28ffd082e0f32fd9815", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-caller-return.png": "55cd2ecb800751c3a61dba17dbac8b33b968087d10cc126b12a67a944381d985", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-caller-return.xml": "e6a3a082a14d68158f0425b4b6bf825e29416e245a173f6d164d0264f2653a1d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-record.json": "cf499a406348e6a1450d94f9e0e47a272cdd1e1a85e902788ded861deee730ba", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-rejected-request-feedback-frame.json": "9a3386063581719dd59c9eae35cf489c39d612bf321df38a091a7e2604e1d388", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-rejected-request-feedback.png": "fff31317fa7b4bae9dd530c3fd99fcb7d78b6139ec5cc2f7bdd68bbfba7b4fde", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-invalidrequestskeeptheparentandclipboard-rejected-request-feedback.xml": "4f0dec4d8dc62c15fbdb287d6f2609e662499eaa1ff5f4561a21ce98593607e5", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-caller-return-frame.json": "7a75592fe9b5a8e13de8ce32f36d7edadb83343fc23eb53f47501271b9d7a57c", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-caller-return.png": "55cd2ecb800751c3a61dba17dbac8b33b968087d10cc126b12a67a944381d985", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-caller-return.xml": "e6a3a082a14d68158f0425b4b6bf825e29416e245a173f6d164d0264f2653a1d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-ordinary-child-without-context-frame.json": "d1224eac695c26684c201836d0efd4c326c76fa6a7556064220034dbeacd89af", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-ordinary-child-without-context.png": "2ce0bacae7ff55389577b86df9c6a0f225867a556c4dc115278deda31efba08d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-ordinary-child-without-context.xml": "3ff8cd765ac876a56aa6ea47ff75f7f327b5905b12301cfdf809f3b07fef7446", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-ordinaryrelaunchclearscontextandfallback-record.json": "94434a7e4a54fb2bcdb1f7a355185fc969b72490a48d69f5fe50d52146de4ee9", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-cancelled-caller-frame.json": "7cf746c90ce169d6cf28ef0ebecc964d2c92502548a6ef1064bd0bf007b6f976", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-cancelled-caller.png": "55cd2ecb800751c3a61dba17dbac8b33b968087d10cc126b12a67a944381d985", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-cancelled-caller.xml": "e6a3a082a14d68158f0425b4b6bf825e29416e245a173f6d164d0264f2653a1d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json": "da82a1f87bc1dda1a3d17f976e83d029096b3672f70ce9766927048c156c1eb8", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-caller-return-frame.json": "09ab93f7af3e8b29049fc3c833c8415d832f6f6440c37bef3a5413c9ee102717", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-caller-return.png": "09f493bb84ce0a50ab884beb03f069cbdffcda3fa8fb17519471e66be904d5ac", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-caller-return.xml": "5e9dbef227933ad5a91c4af76939081f549f6fb9efce80a92c9af4ea55eba028", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-record.json": "a48cc459a8fa1e4327be51c2593ded001a080c65ba8ad2c72e50c8900e77508d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-recreated-child-retains-context-frame.json": "83440af91b63de81635c5610e8395a899c5be7477ccda40b028bee435614d4b1", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-recreated-child-retains-context.png": "43498b3702e77065bbfa7c756065b7d5e3aeaa5101893c815359ed5b947c4da2", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-recreatedchildrejectsdisposedbackcallback-recreated-child-retains-context.xml": "00204096f643d0e713aa7f94f3b6f35b29f3deb0421530fa5b2db0f6474ba202", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-caller-return-frame.json": "98cc340703fd974888e17451b5f66f87314d76eaad3aa28ffd082e0f32fd9815", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-caller-return.png": "55cd2ecb800751c3a61dba17dbac8b33b968087d10cc126b12a67a944381d985", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-caller-return.xml": "e6a3a082a14d68158f0425b4b6bf825e29416e245a173f6d164d0264f2653a1d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json": "327eb25af47e1b9a536d2f45b1c13feb177b51fb8865207fdf0fb3288e356307", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-restored-parent-rejects-old-preferences-frame.json": "956c5a93da812bbab211271b9f2690c128a281ef73b6ebba477b41c5d0303bd7", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-restored-parent-rejects-old-preferences.png": "904cd83f68ce59dbb629d2e106d7c21f0cc90068a2320ad5fe1c4075adcde80d", + "artifacts/paste-copy/regression-handoff-phone100-v7/cohort/captures/handoff-returnedcommandrejectsdisposedpreferencescallback-restored-parent-rejects-old-preferences.xml": "ad7d89eb7456d735804da4ded2e1989a7ffc38db994dcaf6da9eb84f839e85be", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "2a8200c0c6cb7a41dc09b32b8a64ee646dbfe1fb38a6b0fe9c80d72d7c3862cf", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "f3229e09b5d170639b7240097db5cddf31c06edfee145389dc413bb7eb40b3ea", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "05dd4fd08cd49a5c14aa4e0fb895e8f5ec348b6b99f5ba3f73d7f954c5036c8a", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-failure-frame.json": "7ed22bf947060aab1179502490360cf7a86976a014089521abf0432114196840", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-failure.png": "b72da18b50c3695f2bd3b59c85f2e70f884a4fbb4446fd5629c748fe7f2e41c9", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-failure.xml": "8b8f60f307c76fb19f1ed7ca550e7178d3a537d5ab321b5ee3861b5ff9561b60", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "94d0e11449fef13a2433a414baf6c61c64e3b24bb1654d6e4f1edb8b9532c742", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "336b14c3af4db8ba037b99bec8c46d2500d68f7b3c9122abf726214551dd88e2", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "b6eb8db686a71580f2497f46a48244058c4133060ac7de8370d77b64af2d27f8", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "a78bf3f019c26ac007f1e8f7964462b7d11c93e149c1cfe7cf94e47a2fec6eba", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "9585f168ff72658f5d17285d26d817e311e7e3ca39a0434324396191bdd52af3", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "2ffb49581bf017fb55dcb35a4e93fb5f71953cbb68748016da581a930706ee34", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "dfa1dc0739d2e2177557f42cbeb549e2061e2948188f72c13d72c7dac9b9a1a9", + "artifacts/paste-copy/matched-old-tablet100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "d75e4c1c467b9aa827832cbad69108ec6b4334ccdc1330615cd799e84adb1519", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "2a8200c0c6cb7a41dc09b32b8a64ee646dbfe1fb38a6b0fe9c80d72d7c3862cf", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "213b8b2a739fde690138fc0ca37e8ee25ccbc6fdb7e7f024dbf9165d07375455", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "cd64b44d2db3a66201079256bb7b4dc24c00a67034d3bb50406d65af5bebacbc", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-failure-frame.json": "7ed22bf947060aab1179502490360cf7a86976a014089521abf0432114196840", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-failure.png": "5857db312d6bfdd824f8a2a6cffd5ab03ac3d6b87552b79ad343259ff7425d1a", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-failure.xml": "d9eae81b11c63371296c024915d6d172462b4aec21f6646c65c3c338df11c610", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "c3e861af47cc33cea6505495cb111fc009b891be6cce7d94b9177160d11dd83b", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "0224b372bd1a0648b29823ab7046677c585f2b22dcf5a44708adc5c82426c4b0", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "402f373525790b1c8ec3fd9d692b69ffd64809c1eb09fd30e1fd4c9e2be4a17f", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "a78bf3f019c26ac007f1e8f7964462b7d11c93e149c1cfe7cf94e47a2fec6eba", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "d6cbbf1e074cd670aa1e3dc2fe4062a70bd6672c9c222e93a6be4c303906e4ab", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "869b9d9fc896443d2ac6cf9e87bb1694aadbe4f36330eb3950eb6e5e7ad93a2e", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "83cfb6a07e0a74685711de9a5b7ebf0d4f0677dde7a09ed02ea01048dd51b533", + "artifacts/paste-copy/matched-old-phone100-v2/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "7356943621e104b53cd60d0b185e4e9c0b11494e8b60da5188c17b95c80731df", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure-frame.json": "4307d48f810ee3514f91a6ce2e3fe1715608bcd012768c2c494ad64a12c9c83b", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure.png": "15c014d457d7bb8437b0ae3c8d68c94c78e7326d55320bd99575aaa765b19781", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure.xml": "aff2aaf61d2ebc89d88e913d243f133bd51f0b5567d81e775bb2ac4318bfabe8", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "9a86f7e18400af59e3736b9c55a54ffec92c236eb13f9159e7a935da40e1f982", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after-frame.json": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.png": "15c014d457d7bb8437b0ae3c8d68c94c78e7326d55320bd99575aaa765b19781", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-after.xml": "aff2aaf61d2ebc89d88e913d243f133bd51f0b5567d81e775bb2ac4318bfabe8", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before-frame.json": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.png": "9d7f0cb1f87017fa41e9d3ba11e70c7c6d6191dcb277c88b5ebfaaf4accc2922", + "artifacts/paste-copy/matched-legacy-reveal-landscape200-v7/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-reveal-1-before.xml": "30ac363b069746bd97dd31fa2d793f2eb94660ccb54e0fd009efdc78fbbb7d0f", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry-frame.json": "2a8200c0c6cb7a41dc09b32b8a64ee646dbfe1fb38a6b0fe9c80d72d7c3862cf", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.png": "ccae705cf9eb8fa45fca4d0fda67122e4b2d03d5b9c4c6163c776668445b08c8", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-entry.xml": "a0a4a14b26d377c7c74f7d1c0f473da6f74eda0b751b75b000a51486db243822", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "ae61e2e3017492fc6e12b8467bb0f6760670bff8bdbdf98b286bdddf4980ab6e", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller-frame.json": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.png": "bfeddd655089dee738f3fed272ff94783c92774bf3437295e2570e918db90a6d", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-caller.xml": "7c1d640b35ff374d155d73b648e792ee83e8d2c29c18d57a5e61a7ecaebaeba2", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen-frame.json": "a78bf3f019c26ac007f1e8f7964462b7d11c93e149c1cfe7cf94e47a2fec6eba", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.png": "82770cb71226f52bc14338701db7ff8ad2afc38e4957dcb869167579ec51f769", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-chosen.xml": "067f2f2f3116e05b09647468d4be000b6ff077ad3183a7ce18f620889141b483", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return-frame.json": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.png": "38479fc51d5f75ff46772960b4b2bc5e906ccbd5fdb33af6e103961855c737ca", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-context-return.xml": "bee4c4dc1fd30bc2d1c07a968caed779ddf0306c2aa6a1a26c5d94a98356bd6c", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.png": "ef6a9b60709d9373e0fbd0e6ed7c03788c4042693361854cd57885813366b6d7", + "artifacts/paste-copy/paste-pending-tablet100-v1/cohort/captures/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-translation-paste-unavailable.xml": "5baffc677247244ad33bdae3ef4722e00b2ab2be385129ac7cf1f6716cc4f870", + "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-failure-frame.json": "b909a971fb6e8500c405cb1208d9275437f00a8ab67616d40538862d5fa46f35", + "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-failure.png": "1da2a5d9210ed9540a1cceea0ddf1b430aa7825b610aa7045af5c9fb0563d78d", + "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-failure.xml": "1fd70bdc1438bff6a57476971d14f11dd96c2172b5bfd26f9a34e180601f0397", + "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy-frame.json": "fda333d66587dba3377b9fb09cc088a253428d7fb656345c670ac6759de3403d", + "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.png": "1377ee9f00c501ba4b8219aea5230fa99a79c9b0b926dd5506fe50b2c73fdde5", + "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.xml": "36634b304587c3250705823a7d645bb9a4a6d4a11d67a465339d01ce8b23d00d", + "artifacts/paste-copy/owned-unicode-tablet100-v3/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json": "8b80af38afcbf7ebe8dd2eb3aaf149fb793e9e2b35731df2be60a412887da798", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return.png": "c92ffc7174b211afcab6a701b90fb1bf1747a98b9d581b4292388e18afc8ed3c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-caller-return.xml": "253378c85cfa7778cc0d79f7e0253f7c90b56a11a35f012e63314147259bef0c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy-frame.json": "4094da2885f184d3e71c5a6384755e3bc7447439a43132ff19bb15ed8da6873c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy.png": "6730e93ac3feec3e9e6dd18339d75c8097b662ac788dc431e1c29bb82e241503", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-current-native-owner-copy.xml": "4f0c5fbeb011474498534711f1b3e890940eefa708784514e469b59e8de58cf5", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-closingotherenginescannotclearthecurrentowner-record.json": "235be41fb161b169de3a092a8c3071a335c6d67d9a18a57d70fa46726c954a2c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-failure-frame.json": "b909a971fb6e8500c405cb1208d9275437f00a8ab67616d40538862d5fa46f35", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-failure.png": "7d7e5deb1cf06da1af4944ec6597eba32f44a3753d12eb141a929b18865c3775", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-failure.xml": "3290b875666952cdcb8411d62d4fa8370ead6d116dda1e9d521904a5ae6d58df", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json": "fae33d5c1e123397b58b4b88ba6eee2d40582d1a0fb20a6ee235157db057cc66", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused-frame.json": "7fc9f28143104e9a8a4792ef9b29ce9cb54a509f123f33d53d702d5b2de74781", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.png": "ae497295cf56b4e8c5f3c5a13bbf55b541b31eb26b5e0c52fa9a111a21440b03", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-copy-keyboard-focused.xml": "c6c05c06185fcb495acdaa76b16b975765b1018a5b837497946895cb22943de4", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return-frame.json": "b359225e383f769f6be0508389413d7ef23b3a879add7f7659fed959fe419742", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.png": "b1b425c31ecc5f1373f16341e2b886a0f53d74fe34a5055648d806892862892c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-keyboard-caller-return.xml": "c0c0f1be2a0434a618d7715e749b0716d295c454faf8ca400d487ab8f214df9d", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "14e0a32cfdb6079457c4a62a3b0c6356e953c6eda6aacfb6e98c9d857160fee4", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-failure-frame.json": "b909a971fb6e8500c405cb1208d9275437f00a8ab67616d40538862d5fa46f35", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-failure.png": "79f1cc28f0d31256419d1c695c0b262dbbdcc055693e892507a43ec83633366a", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-failure.xml": "3794a2af902ab7d459ec1347851284452e054716623c6ae3f0023c1f2cd1cafc", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-losingwindowfocusrejectsretainedcopy-record.json": "feb409ed20940b4704e67dd34592df3beb27af6a2cf0f7e1b902598e63bc1603", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.png": "ddf01f17ea04959bc5b428cb9060c48f7ede88f74eb62b65e7e1d0af4d0883e6", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-caller-return.xml": "253378c85cfa7778cc0d79f7e0253f7c90b56a11a35f012e63314147259bef0c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved-frame.json": "89b0aca48a5bdf1313f4b645ab6f584a6b690a994717375cd584e708dbfef72e", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png": "73a341baebfa41c6525ce13cf2f529c4ec02b3fb53a137fc9948d8ed55efcf63", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-duplicate-sentinel-preserved.xml": "fd92fb4c858f119ec21bb690c9ad8bb69daec9c36951eb2b0c27269c3a5b9e00", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy-frame.json": "fda333d66587dba3377b9fb09cc088a253428d7fb656345c670ac6759de3403d", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.png": "0aa39561d8f7d6b20e41053db695bbf40a2271e4ea51a099911539acce0b7dc7", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-pending-before-copy.xml": "24016bcc0bea083014f1c2e6183f7d165764ab119ebdf2ad958720cbb5daf39b", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-record.json": "b4c90f059a8f9dab7e5dc926c147e66146191b6a96cb606d31a216cc0e0b55cb", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy-frame.json": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.png": "62838d5bd457e93d4878b0324349752b2be6583e8aa4fd977713141c14515b00", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-pointercopyisexactonceandreturns-unicode-exact-copy.xml": "fd92fb4c858f119ec21bb690c9ad8bb69daec9c36951eb2b0c27269c3a5b9e00", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return.png": "1d259340951cf91c4a1f72d38c2b32a226e8f8077cea2550ee73ea1122aae191", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-caller-return.xml": "5211728ed0de076b98c812f7b309ed7e0f68c6c5fed5c6e6c235d311c321174c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json": "4c53b914f4180e436e733d7f47f0b4285d64e1f0218d29ad705423b8038cefd7", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output-frame.json": "f691201a65606bcdec24908430bcb16007d3041e18535797b1049da05f5e4cc1", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.png": "91f645a58771cf4d3b062fb45910d3cfcfdf62dd808aae464d20e232a027378f", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.xml": "983536745fe61da5ff16c7f6914349508e799409c3703c0e38371cefe9c2115a", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return.png": "8c123bcd35988968fda7fba5fa47073228871bde8e6eb9f73c1f23dfa149a293", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-caller-return.xml": "2b3eb54c35bd540d5ad298c21aca1ce82fd05f7490e39f5e216ab516887278d2", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-record.json": "1d88408a4ac9932b443af104c92b60d6fb06e5fa62543bd1b105aa4c843b2371", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer-frame.json": "8138e4fd3aece10e3eedfcddd47ab26975b61ac0bb27bfbcc4ce6d0f1ff78708", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.png": "f7229ca8c3cd932ae3fa31a6b4e7cecd21010bcb77da9e9df1c14065483fe6e0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.xml": "636e53122c640331402862204de2887c450c81f2f51d86af701315d0099cf323", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return-frame.json": "7fc6a88fa51def9fa9232153f28d7f1ba8c5dbf4bb63a3a5b70f4ef2e4bb5e46", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return.png": "88be3ec60d582712cfc806300227fa17c261a8183fdddc801dd1377149e4f4a0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-caller-return.xml": "e0b41a54d6bc1a8403a6ee571279858ae6d0b1bd8a1b3f441e3c1f3a7d885c23", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy-frame.json": "d5eb95f2c9242459d760c66ac1aa4a83978b916c26772f00ba85a894125a8d80", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy.png": "070a2a390e2735b0d1550f11823684948aba381ee5540827fa92753f3605403c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-fresh-replacement-copy.xml": "c7e32015942292c102326a1109bb5e0c892ee29b6d5fc227108cc81fea7335f1", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json": "6f1b6ca70cfb27fee9c9df98d6af11668acd49e82855ae2a0c520d2bec9701aa", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller-frame.json": "59d045dc4f699a627d4eb654f4fce358259fab5506f242a136352571d19de00d", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller.png": "1b6ba34fddba011b1a60525a7589525a0210d6d53543d4d45b8b47de2c037d22", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-cancelled-caller.xml": "2b3eb54c35bd540d5ad298c21aca1ce82fd05f7490e39f5e216ab516887278d2", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return-frame.json": "ba3d6b3e3023d474128401b17976d081cfa7574ff20f7b7298cfd85b65ae32e0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return.png": "f8de7e57a8d23952e108af7a67f55f2383b8ef305cf18e581a84e1dbb6ac9414", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-pending-before-return.xml": "10bb6270e1b11c9c014b87722a481a2ee7954ef4517421500eb910ca4e6bc7b9", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-returnandescapecancelwithoutcopy-record.json": "368c899e60d06dc0d640812273047a4aea5ae5fd53e1b58381f21b32a6fcc6d1", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return-frame.json": "eb8ac3a6e086d7651b48223e5d5c6632924cc97ea8ae82708f5e4a626794ffc0", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return.png": "f7c486a3c5adf94e9519035df50349e2809ec9c3aa83a7befc527fd8ccbd34dc", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-caller-return.xml": "253378c85cfa7778cc0d79f7e0253f7c90b56a11a35f012e63314147259bef0c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied-frame.json": "5044e7dcffa0c2d32ad11dbcaf932bee45b59ecd284efc31cafc226a4d8ee8ce", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied.png": "580202237a86a7ded87697415b38f7e0cb9d725d439f30631825b80d9cccaecd", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-newest-output-copied.xml": "4f0c5fbeb011474498534711f1b3e890940eefa708784514e469b59e8de58cf5", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json": "54ceddd6c7d233dcce4e0d26aba3c2c6373e50ecbb4c67e616fd03ddf0a5e02c", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return-frame.json": "7fc6a88fa51def9fa9232153f28d7f1ba8c5dbf4bb63a3a5b70f4ef2e4bb5e46", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return.png": "6d82aac4e7572cc36b7073bcf3f0c7adbb3a28b17f2e077beb83d3ce9ba46e6f", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-caller-return.xml": "681d10bdfde7c999f272d2e3257362bbb72abc8361e7ffe25fe72f217776f9df", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json": "3f042ed38505c3ce9569803076205ccaa84260a94d344598a09228a3e5f91489", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy-frame.json": "348dde590d293fc6fee114e440d243ddd8a15d88cf704257d928c01e41dab919", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.png": "5ebadb0ba5b335487d6b72ee788f644f4a06ebdc43f71aafdedceaeadec60e05", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.xml": "b2b169486b2a96ed1454cf5d1430508a897f6a2ea74777a5f2d6c9e0f82bc754", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer-frame.json": "941a7e70ef79327e79c5c379f24b30311449834a0b653fa74cac9d7ac05e3f3d", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.png": "d071b9938690a4836b1e6c60e48bc081a9fbe8f12be8c06e8cda4959f026f1b2", + "artifacts/paste-copy/owned-full-tablet100-v5/cohort/captures/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.xml": "95887678add40c7eabdbfd73b826d3aa8163952b9aad17b7c6bf1ee5039df8a3", + "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure-frame.json": "4307d48f810ee3514f91a6ce2e3fe1715608bcd012768c2c494ad64a12c9c83b", + "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure.png": "e4b020ec6f51ebc5a9647143dfb675f4c2fc0cc21a472edf80e092f0324a09a7", + "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-failure.xml": "3ccd5bc556585bcf0eed728cc41cc7a86103702ed8fd02be515e4a90a9c3d6bf", + "artifacts/paste-copy/owned-keyboard-landscape200-v6/cohort/captures/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "c06ba635054a7d279d2805e9664254f4a83fe7b8cce6dc0b049df0d3c2e63764" + }, + "cohorts": [ + { + "name": "frozen-copy-tablet100-v2", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "frozen-copy-tablet200-v2", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "frozen-copy-phone100-v2", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "frozen-copy-phone200-v2", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "frozen-copy-landscape100-v2", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "frozen-copy-landscape200-v2", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "owned-full-tablet100-v6", + "category": "final-positive", + "executions": 13, + "passes": 13, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + }, + { + "name": "owned-full-phone100-v6", + "category": "final-positive", + "executions": 13, + "passes": 13, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + }, + { + "name": "owned-unicode-tablet200-v6", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + }, + { + "name": "owned-keyboard-tablet200-v6", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + }, + { + "name": "owned-unicode-phone200-v6", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + }, + { + "name": "owned-keyboard-phone200-v6", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + }, + { + "name": "owned-unicode-landscape200-v6", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + }, + { + "name": "owned-keyboard-landscape200-v7", + "category": "final-positive", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f" + }, + { + "name": "regression-callers-tablet100-v7", + "category": "final-positive", + "executions": 12, + "passes": 12, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f" + }, + { + "name": "regression-handoff-tablet100-v7", + "category": "final-positive", + "executions": 8, + "passes": 8, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f" + }, + { + "name": "regression-callers-phone100-v7", + "category": "final-positive", + "executions": 12, + "passes": 12, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f" + }, + { + "name": "regression-handoff-phone100-v7", + "category": "final-positive", + "executions": 8, + "passes": 8, + "failures": 0, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f" + }, + { + "name": "matched-old-tablet100-v2", + "category": "matched-old-negative", + "executions": 1, + "passes": 0, + "failures": 1, + "restoration_checks": 18, + "app_sha256": "2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "matched-old-phone100-v2", + "category": "matched-old-negative", + "executions": 1, + "passes": 0, + "failures": 1, + "restoration_checks": 20, + "app_sha256": "2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86" + }, + { + "name": "matched-legacy-reveal-landscape200-v7", + "category": "matched-gesture-negative", + "executions": 1, + "passes": 0, + "failures": 1, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f" + }, + { + "name": "paste-pending-tablet100-v1", + "category": "historical-excluded", + "executions": 1, + "passes": 1, + "failures": 0, + "restoration_checks": 18, + "app_sha256": "636a7a10f664f29e64d61a6dc8f98ce596080b4dfb13eac5b54057ab172475d8", + "test_apk_sha256": "7379458fa7785309cf8184c5865801d77345b491fb7c333041677fc4638a127f" + }, + { + "name": "owned-unicode-tablet100-v3", + "category": "historical-excluded", + "executions": 1, + "passes": 0, + "failures": 1, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "69bdc18400ec48bd09278a45bd7b2660252eeff637e93bec4c661049b03a054a" + }, + { + "name": "owned-full-tablet100-v5", + "category": "historical-excluded", + "executions": 11, + "passes": 9, + "failures": 2, + "restoration_checks": 18, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "597a2c3a4122cbc5aa5b79fe3ffcae889f6655f7fabd187f4ffbfbb16d1c9065" + }, + { + "name": "owned-keyboard-landscape200-v6", + "category": "historical-excluded", + "executions": 1, + "passes": 0, + "failures": 1, + "restoration_checks": 20, + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71" + } + ], + "public_files": { + "docs/screenshots/paste-copy/landscape100-copied.png": "2c208ffd75a697e2281997019fc3604b02f2c6ff77f2ae480e1052dc3c0541ee", + "docs/screenshots/paste-copy/landscape100-pending.png": "abf4caabbbca026ed8bc3255d42e2a04bc46b9308ffe7832f44a13ad86ba76a2", + "docs/screenshots/paste-copy/landscape100-source-return.png": "29733d3df53a7e0c402e1259cee63730199707cf1fd40f28437f6d9ec3a7eeb1", + "docs/screenshots/paste-copy/landscape200-copied.png": "c66a50340827e8c0aaf217bc23d3783aa41c67420014f7664e036a7c5e9ad23d", + "docs/screenshots/paste-copy/landscape200-interior-reveal-after.png": "ca59c404dfc4452935c19866bf2eeba56f85191b00d0a79422ac71f9d8441754", + "docs/screenshots/paste-copy/landscape200-interior-reveal-before.png": "57b617926b625c002e5869a1611fcac30106af441e56a3f380520a3d53305ce5", + "docs/screenshots/paste-copy/landscape200-keyboard-focus.png": "8aef08e4080a63b51be6e5c0b7aa77602fd84f4171c91cdc262b0a618c50e88f", + "docs/screenshots/paste-copy/landscape200-legacy-reveal-after.png": "15c014d457d7bb8437b0ae3c8d68c94c78e7326d55320bd99575aaa765b19781", + "docs/screenshots/paste-copy/landscape200-legacy-reveal-before.png": "9d7f0cb1f87017fa41e9d3ba11e70c7c6d6191dcb277c88b5ebfaaf4accc2922", + "docs/screenshots/paste-copy/landscape200-original-keyboard-failure.png": "e4b020ec6f51ebc5a9647143dfb675f4c2fc0cc21a472edf80e092f0324a09a7", + "docs/screenshots/paste-copy/landscape200-pending.png": "8a3a6225ffcdb5779b0c181f22e219ee25a7f30b4f5e40bda9aa2e0a6651bc4e", + "docs/screenshots/paste-copy/landscape200-source-return.png": "12e03b793735423d713c51d50616eb7b96f1cf17af90880651481eabde90978d", + "docs/screenshots/paste-copy/phone100-before.png": "83cfb6a07e0a74685711de9a5b7ebf0d4f0677dde7a09ed02ea01048dd51b533", + "docs/screenshots/paste-copy/phone100-copied.png": "73267743e5faadba26226dc12b5e34cb22ccbaec4a31105ddf2ca933d0dd0d50", + "docs/screenshots/paste-copy/phone100-detail-regression.png": "5c19c9e3873152bd97de9e1b8ef567a4c3520e765f29accacc098115e64d6a90", + "docs/screenshots/paste-copy/phone100-form-regression.png": "d7f15a095beb26e26c0f58a4b3dd9211b8e52b82750d0dd16640bd15e485d6b5", + "docs/screenshots/paste-copy/phone100-handoff-regression.png": "43498b3702e77065bbfa7c756065b7d5e3aeaa5101893c815359ed5b947c4da2", + "docs/screenshots/paste-copy/phone100-parent-restored.png": "1bc88132ed8cf775940408cfddef01406b5f60ea3ac73425b2b771f840921d90", + "docs/screenshots/paste-copy/phone100-pending.png": "d5866db245fe21e3a00ede3b67cf56fdf9ec06748f8f3f868b731da37204174b", + "docs/screenshots/paste-copy/phone100-post-copy-sentinel-probe.png": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "docs/screenshots/paste-copy/phone100-recreated.png": "e1e2a69bd702fcf19fd99307ec811f5dbf1df751c821d7a95fb995d949fc9f40", + "docs/screenshots/paste-copy/phone100-source-before.png": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "docs/screenshots/paste-copy/phone100-source-return.png": "d69f58bc5eeb60b1bd4e46cfafbc4aac2ffee371691e3de49cddb4aa78febdb7", + "docs/screenshots/paste-copy/phone100-unicode-copy.png": "2297b86d395bb89bee4f9c47585ce39b320477b1038a79169016c39d3fa137c2", + "docs/screenshots/paste-copy/phone200-copied.png": "51037b91f7dcfcb729e822ee3772e39574de5fc40c4c75a1df1482dcd346a309", + "docs/screenshots/paste-copy/phone200-keyboard-focus.png": "a35e907789c954fc28ded9857d40fccc196fb282e52cbc1bbf319d866db4d8c8", + "docs/screenshots/paste-copy/phone200-pending.png": "1ec7a14db79e96bb8f37f0e40578c147df24a8d20faaa5d1529eadd01faf74c8", + "docs/screenshots/paste-copy/phone200-source-return.png": "d461f15cfa7050a129b2d968cbf75bfd8ec8aa853e28a0f2faa83f52cdff359e", + "docs/screenshots/paste-copy/tablet100-before.png": "dfa1dc0739d2e2177557f42cbeb549e2061e2948188f72c13d72c7dac9b9a1a9", + "docs/screenshots/paste-copy/tablet100-copied.png": "4dfe74af7b0577be2379bc024c7f647a4ae0805fb04968ed662f41005f82f0d6", + "docs/screenshots/paste-copy/tablet100-new-source.png": "b9725b9bc830f08d59e7e3ebb2777e86b642f7c006cb6f52e14f3eb281401250", + "docs/screenshots/paste-copy/tablet100-pending.png": "c5fc50261a2d214d2690e06055a1d76d9f3ad0d18db9be10c7a612c1f4b993ea", + "docs/screenshots/paste-copy/tablet100-source-return.png": "78faaef6d78386b25d58f4e11ecd9f401b80192b364c81cab5f45d296ad70448", + "docs/screenshots/paste-copy/tablet100-uncaught-copy.png": "7f60b4e69c28d6658084803655a1a0e6b774225ae3d71d85fd7b3ba883bcea69", + "docs/screenshots/paste-copy/tablet100-uncaught-offer.png": "5faa13937d1a5bd9b25760033b16a520b43a4525da870b947c3f6508210b4ae0", + "docs/screenshots/paste-copy/tablet100-unicode-copy.png": "0dcfd7c7710ab8d4a86cb2613ddbd6aa5fe69afff30f629d2c932ef0f20b1fa2", + "docs/screenshots/paste-copy/tablet200-copied.png": "95aef3551f1c2c1dc7ebda5a76043994f1ad1cbf59f07bcd8f17ff55f391220f", + "docs/screenshots/paste-copy/tablet200-keyboard-focus.png": "3831e52fe344cadf03c93b05ec7c4559c86b13fc406602e34e804adbd8892074", + "docs/screenshots/paste-copy/tablet200-pending.png": "cc9ee90d00a28d464ae765bf7c6be23ba6bad63885d622c43571f3228a215524", + "docs/screenshots/paste-copy/tablet200-source-return.png": "378820908f5caf71f68de057c3fc20d7fbf97113c5d47aa1cd7007bbd8643b07", + "docs/validation/paste-copy/cases/frozen-copy-landscape100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "2f9bd5e0e4a34956f14e8b1b3d6df386ba7eb0a90fd705397e44d4e169852a1f", + "docs/validation/paste-copy/cases/frozen-copy-landscape200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "4e17acaa4c7c815b996d5d895d0dfddd074b36c1301bad3e97bb7c420f99af57", + "docs/validation/paste-copy/cases/frozen-copy-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "d5366f23412be9567c58b1c4dba82e4b21c866fdc4b1f95604cbc80b9b32d3cc", + "docs/validation/paste-copy/cases/frozen-copy-phone200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "5eb1bca9dbc63d7be40cb9cf0674cf7a06903472357cfc3e61d5195d3d9ade97", + "docs/validation/paste-copy/cases/frozen-copy-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "81517c08a11fbac15e266f4953772908d800d6561006f5b85b4ed28a257e71b4", + "docs/validation/paste-copy/cases/frozen-copy-tablet200-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "93262f6e989920bc3d9e8f31b380c2303035ad964ac2bc5a946d4b80d1f0cc61", + "docs/validation/paste-copy/cases/matched-legacy-reveal-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "9a86f7e18400af59e3736b9c55a54ffec92c236eb13f9159e7a935da40e1f982", + "docs/validation/paste-copy/cases/matched-old-phone100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "c3e861af47cc33cea6505495cb111fc009b891be6cce7d94b9177160d11dd83b", + "docs/validation/paste-copy/cases/matched-old-tablet100-v2/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "94d0e11449fef13a2433a414baf6c61c64e3b24bb1654d6e4f1edb8b9532c742", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json": "323e9975191061985e50d19a3686b2bd97022293ca8d3a84176808ed031e0c81", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json": "9dc7feaf9f2c91c0e7ffe7e6d0e668d40460f77f61b6b672f1a875cb23cb5cb6", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "6e8926818a4228323c9b3cd234d9be2ecefbdf898d41b2a92879c49c5aac10bc", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json": "911cd77c205d6df6c456be5e5a1da57b9099cb4338becd3f4c04e619a89b5e47", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-pointercopyisexactonceandreturns-record.json": "738f0f7b0966b753dc0abc7c575fd37de41eed0c1099313c2eb281473bf72c34", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json": "a97150d69f90b372fd5f6166010b3f0f3a1554362a3924d399dbfe6d6b3d895f", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json": "2a52576ccf4ddb4262419906fc136074caee6f430f0c4cd3d064b523689c56e9", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json": "443ebb8debe6bf1a745fcfdbd3a47f6aa421bfcd6a785fe2677e1018a564a77f", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json": "e52b8e77ba284c3cdcf516af57704ebeacdcdf68f23d138b2c81264b49b12629", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json": "650cd4ef2afae8ec4c898738bb8e9ce6e013d097ea2836b5e956fba499d278db", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json": "9ff95354a80250080998c64d190ef67224434741f073b79439fe4675ddcbc5a5", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json": "ee6861878364a9ae18a756b28580915f74d3565d96a45a933c485e04a3fa1fb5", + "docs/validation/paste-copy/cases/owned-full-phone100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json": "e6fdc34dc168ca0a5428149d8eeaa9ea1009f41d61fc492aad8d3edf8ace1308", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-closingotherenginescannotclearthecurrentowner-record.json": "235be41fb161b169de3a092a8c3071a335c6d67d9a18a57d70fa46726c954a2c", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json": "fae33d5c1e123397b58b4b88ba6eee2d40582d1a0fb20a6ee235157db057cc66", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "14e0a32cfdb6079457c4a62a3b0c6356e953c6eda6aacfb6e98c9d857160fee4", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-losingwindowfocusrejectsretainedcopy-record.json": "feb409ed20940b4704e67dd34592df3beb27af6a2cf0f7e1b902598e63bc1603", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-pointercopyisexactonceandreturns-record.json": "b4c90f059a8f9dab7e5dc926c147e66146191b6a96cb606d31a216cc0e0b55cb", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json": "4c53b914f4180e436e733d7f47f0b4285d64e1f0218d29ad705423b8038cefd7", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-recreationclearsthebufferanddisposedcopy-record.json": "1d88408a4ac9932b443af104c92b60d6fb06e5fa62543bd1b105aa4c843b2371", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json": "6f1b6ca70cfb27fee9c9df98d6af11668acd49e82855ae2a0c520d2bec9701aa", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-returnandescapecancelwithoutcopy-record.json": "368c899e60d06dc0d640812273047a4aea5ae5fd53e1b58381f21b32a6fcc6d1", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json": "54ceddd6c7d233dcce4e0d26aba3c2c6373e50ecbb4c67e616fd03ddf0a5e02c", + "docs/validation/paste-copy/cases/owned-full-tablet100-v5/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json": "3f042ed38505c3ce9569803076205ccaa84260a94d344598a09228a3e5f91489", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-closingotherenginescannotclearthecurrentowner-record.json": "4c4c2701430dc35596b268d0a0853a7520a886b85b89799d37f5d40e732b1f52", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-invalidrequestsclearprioroutputwithoutcopy-record.json": "fa3449cc785ec08924358ac86c353b61c9e1ed5ed485bb50f1bf945f4be57196", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "15a00a406a35a08ac38d1e1d2cf59df9b6af837e6bfd3cb192a5c2811a73ed11", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-losingwindowfocusrejectsretainedcopy-record.json": "f30e374d7c8c2bc9a538d2cf33e591ec50609c51fa5b3730390bebda4084e28e", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-pointercopyisexactonceandreturns-record.json": "5ba86776bd4658bf8d9796ae55611c5cd71624f2ce6a330bec6bfac65eb88e94", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-portablenullnormalizationisnotarawnullrequest-record.json": "db6ab188c6b7b79aa0be569a3b4890a65da0a17806760b8990fe2e5a4c65ec7f", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-preferencesdisposalandhiddenrequestscannotcopy-record.json": "574ace642760801f68e1d6f740737cca77602e8a01f555153c70518c6ac8c8e4", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-recreationclearsthebufferanddisposedcopy-record.json": "885255c06245c0236a3a782b3afb74c191fd2cfd88b75eda22d67d6c2c46a507", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-replacementrejectsqueuedcopybeforerecomposition-record.json": "534108bd8f67848a9a0467e91497a55d0120e7e98c7cef587b50e598f8d1083a", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-returnandescapecancelwithoutcopy-record.json": "b92c2b84e7e937f01ed59122e94bc519cef3c04cab49cfdc55495f34f5b223a5", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-samesessionreplacementcannotcopytheprioroutput-record.json": "7deb11e965c1cae47585fbd5c8c2ec9d3f59c340f8362675ae987b28e12665e6", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-sourcereplacementclearsoutputbeforeanyqueuedcopy-record.json": "4fdec7debffb2f9e8e5adb85f7f55af46d324b29ba97a462afea1b3e651b6d06", + "docs/validation/paste-copy/cases/owned-full-tablet100-v6/pastecopy-uncaughtpastefailurestillrequiresexplicitcopy-record.json": "0b4ddd6947f7ae426ccf89eab3793006eec2f3a4c406d32b0f117c3b196bc761", + "docs/validation/paste-copy/cases/owned-keyboard-landscape200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "c06ba635054a7d279d2805e9664254f4a83fe7b8cce6dc0b049df0d3c2e63764", + "docs/validation/paste-copy/cases/owned-keyboard-landscape200-v7/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "329488c96964a692e5f50286ca2b058ad5ca771cd8316ae5530b519c7b04b625", + "docs/validation/paste-copy/cases/owned-keyboard-phone200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "fbe589d8e320b4b0138c97c053c3b95fbae3a811381e57d2a8d0431c7914bad8", + "docs/validation/paste-copy/cases/owned-keyboard-tablet200-v6/pastecopy-keyboardcopyhidesimeandescapereturns-record.json": "a53900e879bb4fe4bdf58faff361ff7f33a14eb2a8cc11d1d52ca8417d525b9c", + "docs/validation/paste-copy/cases/owned-unicode-landscape200-v6/pastecopy-pointercopyisexactonceandreturns-record.json": "0f7d603efde284aab27d38f5035a12fe18f94fb6ccc0170a68019743509fb00a", + "docs/validation/paste-copy/cases/owned-unicode-phone200-v6/pastecopy-pointercopyisexactonceandreturns-record.json": "21b431d1fedab32515e5ef9112b7c8ea0db9cb0a3dab8921a6533005e67f0ad9", + "docs/validation/paste-copy/cases/owned-unicode-tablet100-v3/pastecopy-pointercopyisexactonceandreturns-record.json": "8b80af38afcbf7ebe8dd2eb3aaf149fb793e9e2b35731df2be60a412887da798", + "docs/validation/paste-copy/cases/owned-unicode-tablet200-v6/pastecopy-pointercopyisexactonceandreturns-record.json": "ad20cfc72ab77a205a0946f88ac4ccb54d044cfcdb2f0fb40caa035054b935c4", + "docs/validation/paste-copy/cases/paste-pending-tablet100-v1/text-selectedtranslationrunsonlyafterreviewandreportsexactcopyorservicefailure-record.json": "ae61e2e3017492fc6e12b8467bb0f6760670bff8bdbdf98b286bdddf4980ab6e", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json": "01564a06e761039edae2c425bf28833474e043421eee87447d9a619cbe43eef2", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json": "5d3b6fb42912c7d0f154c323fa8a2ec7f567b4448e920841823a733c20a5b374", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json": "982657130a3e5a49deb4d98423eb3003f36fcbf15c61ae4199c73178129ecc91", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json": "f76b6a6f72a1fc523d26da5aa7f22ebbf35e16643cbbdda90b2466a0700c1af1", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json": "765023aae3740b2589fe231c7bdb0969330b1c00243b176bf2e7dec0b6e2d6f7", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json": "8c6d1ab47c7aef2b765aefa5ab329da5d8ad97c6a70ad55eaad8dc4ad38d396f", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json": "c7ac014273ae63c7a9a95e3a1d4229856f5a117ca1a66d323784014662b05df6", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json": "06349d46c7b6b5958ae864f151141230c959249dfbeadd9395cd0dc455831ccf", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json": "8ea6e687be10f707e726f06a5c1c5fa8537dc6530c7617f1d884cbe923fbd9ab", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json": "c98180e2cc2a1feae2d937eca3773c043d8dd943f23c4df66e7327c9b082947b", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json": "3d9ccab1505011ece4a67d23c24a353383ed8a2a37efa50acb4b5b1c1c4f6425", + "docs/validation/paste-copy/cases/regression-callers-phone100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json": "96e36e6ccc94d4602f92b76ee0d97b1ba26ff70b162186a01bc4a0aa760b7119", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-listtouchdetailpreservesqueryselectionexactcopyandcaller-record.json": "4cb8571d86843bafb4ed742579452ad8f9242a3cc0edfca6062217abcdbedc90", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/detail-recreationstartsanewownerandrejectsthepriornativecallback-record.json": "6f4702b7294c4775078e52014cb3719be1db9248bc419a7aeb5ba5088b4958bf", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-correctinganerrorsubmitsexactunicodeonce-record.json": "1cb0fbeef1f9eeaa652bf1ae151fc67797caab0fb08160ad09bd6e161582dc08", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-nativeconfigurationeditsvalidatecancelandrun-record.json": "129fe0b50bc626803ec6876f3cfcf76a578411416ea4b6dc9c41d5dddb69d324", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnacceptsfocusedenterandpreservesescape-record.json": "6d9ec817c0aed2b65a367379d0b3365393b1063381b168045b75cddc0278044e", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/form-ownednoviewreturnrejectsdisposedandreplacedcallbacks-record.json": "284854c2eaf45fb55bcd99501eb19be5094e8f8625eb2c18d1095b46724a14d5", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-rejectedasyncandsynchostcallsreleaseapprovedinput-record.json": "e725aab9ca8d6e942c9cac76df5ff17a830cec0a23419ea51052191f04a3380b", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-resetcloseerrorandordinarylaunchrevokeinput-record.json": "c0790c5cda9e4d67f2271d35bd41ba026b4aa66d8ecf02f2f918f634bf429c3a", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-runtimecancellationregistrationcannotbedetachedbyanoldruntime-record.json": "97b15613c4337e43a3aaf9942fb26fd95397876d1420080a9e66b60c9facac00", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-lifecycle-staleruntimecannotpublishorwriteafterreplacement-record.json": "984d5a15aad17fae3af496369bf0e00f3fd54654d19cc2f9138545236a03b648", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-ordinarycommanddoesnotreceiveclipboardasselectedtext-record.json": "cfc08f4b51c88a0192178edea7915723484cf05714742c69bc47edabd19e0aa5", + "docs/validation/paste-copy/cases/regression-callers-tablet100-v7/text-selectedjsonrunsonlyafterreviewthencopiesandreturns-record.json": "f447cdd002310a43327c9b6e106aaa74d5b833e172a882852dea6ffc7c13402f", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json": "40ac98236ad52069af1e77003af915a9139a2d7ef5ef023d0aa82d07781c803f", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json": "4fdf1c96df71c3b52436b1568c065b048a9e06841f87177ac6ce50704480453f", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json": "e1bfa790ecdb94caf4b74cc1a54d664821cdb27a7082cc13eef3a273b79d2690", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json": "cf499a406348e6a1450d94f9e0e47a272cdd1e1a85e902788ded861deee730ba", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json": "94434a7e4a54fb2bcdb1f7a355185fc969b72490a48d69f5fe50d52146de4ee9", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json": "da82a1f87bc1dda1a3d17f976e83d029096b3672f70ce9766927048c156c1eb8", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json": "a48cc459a8fa1e4327be51c2593ded001a080c65ba8ad2c72e50c8900e77508d", + "docs/validation/paste-copy/cases/regression-handoff-phone100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json": "327eb25af47e1b9a536d2f45b1c13feb177b51fb8865207fdf0fb3288e356307", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-acknowledgementrevokesparentbeforechildcomposition-record.json": "d2ac1793b6e4e4da2972753f2fa2dccde3027c24341ebffa6b143528ce8dd8e4", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-contextargumentsandfallbackreachchildandcopy-record.json": "d8b79d5263d28e05136125d6610dffb2b38ca7be2d2f781a725d207ad4fc7f46", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-duplicatelaunchrequeststransferonlyonce-record.json": "fcc35f4020b40fc05ea527bfee90ceeeabaf8992e0783449d221109adced2d4e", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-invalidrequestskeeptheparentandclipboard-record.json": "de2c8ff225897a35dfc40bdd8511683a80fda5f06d886eca7d8aa20d8d9f1409", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-ordinaryrelaunchclearscontextandfallback-record.json": "30057737936f6530096ac566d875d0290915f7f6abbc070d62d89a3c75350e1b", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-queuedrequestcannotlaunchafterparentcancellation-record.json": "21ff3a958f957afeaa9e842014afcbf75699601a231d2ddab8f4c890cd5bb205", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-recreatedchildrejectsdisposedbackcallback-record.json": "a1571826e97da3f50f982cc2ab10f25191902c7fba799a76789a5c09b84779dd", + "docs/validation/paste-copy/cases/regression-handoff-tablet100-v7/handoff-returnedcommandrejectsdisposedpreferencescallback-record.json": "bd56018802f27f36f0ef4b5a1bf85aa936bb3b5d250f2c3e40fd95650bad063d", + "docs/validation/paste-copy/checks/apk-manifest-inspection.json": "b1e23f28ee5e562afdc40be43c6aff3cb8276b33e336201b8fba3b61418de869", + "docs/validation/paste-copy/checks/candidate-v2-benchmark-build.log": "5c6eb8455e6911f950628593a320ad69cc0d3556915328197a48dfcbf0ef87d3", + "docs/validation/paste-copy/checks/candidate-v2-build.log": "799278b0f6ec34429533fc76adefa3cfe43d644aeca2f337833175596ca59961", + "docs/validation/paste-copy/checks/current-benchmark-lint.json": "6eefb332188e60ec6e3cd261e9df6f7028cc66e16ef7a25ea8e1041e436f9bd4", + "docs/validation/paste-copy/checks/initial-benchmark.json": "13baf5ffbd039dc8e782ce73c6e5aa577d51b169c893f15406714617d4a67988", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml": "1383fd8f23ae4781ad3c532ee563d1f1af9557d1cd8b8497c43cbf73a24fe7ab", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml": "65ba4abe3c1bce63801e3960bc74eca84a1f24aaaf86abfd043c749294236b7c", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml": "fddfcd51f693ca805edf91e9dd4091b980c6355e2ea2d9ac6105079f22e0461c", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml": "bdd54b88f3e357f51eeec01189b248600dc43ae6b73369c312c0fb07ffc4028d", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml": "7769f3fcb846884300441a767b8ea6fc9587cacae4e7d93ca33cebc5a8b6132c", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml": "f066e8c2cb2315714825f8d9bb9a6373e967f7de214104677578ac64febb7f7b", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml": "de47c94bc70fbadc1a447df97ee58277f8d0f61dda62ec55f5c79f8f83b4ecc1", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml": "dec02d64856aaef6aa6544807055de61dac1a2dba10b75be0a372ace9ca8a3ce", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml": "9a54b47a39316f7c00ced9f9c874fdcf3641b9f96a89446ee8c451d4c126927a", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml": "8a83b87d70b6c552044ea59b97fdd2d7d8b0d1ef27284ba6b0a644ea1c828709", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml": "319b004f61d2522c31551b65a1f05ab81b99b11c0f2f96e0a0d6b575fb923366", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml": "2b5916755a6fe3a6946206b8d578f43c4d1517f54443979c4f5234c68747a9c2", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml": "819a1007fc96c6a32c41e52710c2fed4b08fb71a9289ec63704f03a82cdbeaba", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml": "5c9a988addae411248b2a35dac0cc56826e5b728fe14b0482b799afe0d3380d4", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml": "6a3085d6692a2e7a97483e7e66457c422092fc66246ad371d73318e1304e8485", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml": "52485f09031918f98f87b3284ba1b1e2420ccebed626ca310fbb0076ec106e96", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml": "f4fd7ec879125da1e2d0c09537fd604febea9df37c6e935e3c1e88f635a8d7a4", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml": "27912af47bbe5f212b1fbc5ae893164aa051d6e80bad4388093ce7690614056b", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml": "8349a1b973bd97c55e94b339c899e19e1d5a3cb4e683d3e5c3a905a5fd930f6f", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml": "d26897ef239617155cb5f79169925251d2173a94490121ebdacd1d0178827919", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml": "f0ded4e177ecbe64d12d4689c4c8ff2c9bae6ec37cd4039f5730248944b57fbb", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml": "b641eacd55c899db4dfe1231db710d37e1a6821732f420347ba32eefd05bdf74", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml": "5f569facb9e194cd8ff4c0c87774501f1b0c462cd04e5a9ce1800630c1bbe27c", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml": "88d627f6ac6a859036960d1e87134f93143265f17b4587886923b17978768936", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml": "904aa26c87157d98c280f8e3bdc40e4562d673816893576de744d7d1d5b46ef0", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml": "d1d21861fc652502fbde00f09b340195da9da3190583459c11091dd1673a6f0c", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml": "4d1044281b904d0030f87651b25e803e15aaa871370ceb4e520b0ebd5baa9a22", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml": "c0fb3fced9100c8ca404ceffaba6238754a18339b8ab5e870f7ecfc82c616d85", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml": "d8e227034efc399f052a5c0e2f8c2180564418e6cb36676ce34010e452c5d129", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml": "8981ee171fb2b4ec47b91198e82bece3ce9f29e651b227d6952cc92822b8a062", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml": "5a28634e73be7725ca970589ee52e80bd1f27e4595e2f4b6144d1400f3d06e02", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml": "a5a4b898651ee0fc4f4ccd294a7b050fff3b261ef9dd2f342948ac42f0675183", + "docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml": "bca475111bd0cbd7b5b30a6514f7549dc8c87311d492de93e87fae74c4112ee7", + "docs/validation/paste-copy/checks/lint-results-benchmark.xml": "2f51a55071685e65e5f03cb6337f1bca99cd3365066193136ac39807fb01337f", + "docs/validation/paste-copy/checks/lint-results-debug.xml": "2f51a55071685e65e5f03cb6337f1bca99cd3365066193136ac39807fb01337f", + "docs/validation/paste-copy/checks/owned-harness-v3-build.log": "6cab68831e29a3ff3f786fbf3acbd015b8a48bb2d4388529612bd7f33e201491", + "docs/validation/paste-copy/checks/owned-harness-v5-build.log": "6cab68831e29a3ff3f786fbf3acbd015b8a48bb2d4388529612bd7f33e201491", + "docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint-v2.log": "505e2db8034b7096cc3d35329fddcef3b08728c3951ab939f14572f10a883dd8", + "docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint.log": "6b781fc36812e933e079a3eb3449b5d9e68c447e7c893865de07782f99ae6edd", + "docs/validation/paste-copy/checks/owned-harness-v6-build.log": "c3eb59da251212219e4c79c00774a494624cf88863e42906149a1513e954fd12", + "docs/validation/paste-copy/checks/owned-harness-v7-benchmark-lint.log": "234492620faff19cc33f0a9cb5a9505626c8c47269fe85e9ceda3be1c2df33f1", + "docs/validation/paste-copy/checks/owned-harness-v7-build.log": "4743e44d7e9c84972f1137bfb525b5977c969c23d1189e3b2129b7f4825660c4", + "docs/validation/paste-copy/checks/python-owned-optimized-v3.log": "7a92f689360dbe419facf2c941a60dadc306784c9571d07c25f31a2c3fccc3dd", + "docs/validation/paste-copy/checks/python-owned-v3.log": "89cf949e94708407e1ee86f21f8c5936872d65a988ad69ddae77b8bf8d60849a", + "docs/validation/paste-copy/checks/python-reveal-optimized-v7.log": "eb806f402e0160a063966682c9d051dd901c4a112794b6716dec521c960e0cc5", + "docs/validation/paste-copy/checks/python-reveal-v7.log": "edc7358fdaca198626c4563bbdb9a468bb3e3177cda41e5ae6ee19ebf13f7d23", + "docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/runner.json": "2030690519e2c0e25bcada5d4c8f432b43a3b66d480ca27061746df7313d7de5", + "docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/state.json": "094bf096ff526072c157fa8c29f77b218f5dbd47c6f49a82e39246adb927d3f3", + "docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/tests.log": "2f86bbd2ce4bc5a87b65888c4257c2e8aef504f4ed3a3317903e0e22f8fc49d8", + "docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/runner.json": "d0a727029e0b619701a3dfb3fb3d2469abb0ce70ad6ec1fe29dc573eb235fcd4", + "docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/state.json": "5eae3c469d419fb39b15059825788d237f6febf1d8a741214ad2c18b41a738e3", + "docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/tests.log": "48c318e6ea34ab93b17ec3a5e48e08feed9fe6475a34dba8cc3c3d09b02678da", + "docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/runner.json": "5ae37863ea8f513e8f69ef02c48aae6699cc82d3149dc28d94c6b45e71f8ce02", + "docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/state.json": "96128691ddc002642fac30a27d12485aa28b9ca6749bf32a14470c9c1cb9b539", + "docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/tests.log": "0d52c67926f49a8030adab05b829a6588c1d0092fda5a4c1610c31f8d4fcce5e", + "docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/runner.json": "97e641892df6ad509a96de05d20b40fa4c7a7b2ed6e99d2c8ef70e609c93908f", + "docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/state.json": "20a8549e170cb3333bd30e49f68868e5c4f345d225e40c8482aa637a4c874780", + "docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/tests.log": "60eca4d5ad2074846ecd3e526edfbdcaa44f7b225d500ee789b0ed590ccc3c8b", + "docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/runner.json": "1c57857e5187e22c24505d8e4da82ea7af9de19bcbdfbc11de1a36d16bc85e6a", + "docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/state.json": "d0a9b911ff8a9ea2647d03c067f98b72ddbfa709470ea60334132ca4cc3116a1", + "docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/tests.log": "fe67a4586a673f85e8e53d7e90da5140c6fd31efa058162e651ca62a4e7b7460", + "docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/runner.json": "403d21a7028c61acad8efd90140ba535922e03063d7b206ac98490c4eaf3e288", + "docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/state.json": "46ee5585774a1edadebf4f98033640935056b7a38cfc32dba768957c03b6e3d0", + "docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/tests.log": "5ab573c0e0c141f2f75aa9286150a05e8663ea4073020d0d277995184d8c8e2f", + "docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/runner.json": "22aaf7f34744c3290dfcba1593d0c8dc26bb5936d691102589232205719aecb0", + "docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/state.json": "503ddc8d66b13553f9d3f4e0cc60e0d90872497ee44137fd9f94bd2d4939d697", + "docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/tests.log": "f7371ca562324375d38fd0776a616b388dbd9e32dafa466c44c85c6629542255", + "docs/validation/paste-copy/cohorts/matched-old-phone100-v2/runner.json": "2883d6af8f33774bb34ac6b4f5f2dea06589e88b34c8d0da61a5360221776acd", + "docs/validation/paste-copy/cohorts/matched-old-phone100-v2/state.json": "baa3983aa87e343a4ecb348f2b0be205375a0bbcff1788cf18a4a63c60b115a8", + "docs/validation/paste-copy/cohorts/matched-old-phone100-v2/tests.log": "cd2d30ff37b8fef08950e81142eb096df30102b417b83e95d8a63e05c5ff4d63", + "docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/runner.json": "dedac5f87e571b94c9660dc5e561ded861e568fb46159c24e0279a505d1db281", + "docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/state.json": "a34c1247331d31fc93c845e9721e533e8a5057a079b9cba14127f0cbcc7156ea", + "docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/tests.log": "1e90fca6cd0ee1ab2f0df7912ff6f6935965b6f40bab037a858f4eb1b894671d", + "docs/validation/paste-copy/cohorts/owned-full-phone100-v6/runner.json": "4bf1dc995437dc0b449432a014a40e0d7813fcb8be9223f01feb60bcd68b5621", + "docs/validation/paste-copy/cohorts/owned-full-phone100-v6/state.json": "5ad56708a934df757f5870b531fa696aada588ea56f3715d38ad6e1c1b9b7f9d", + "docs/validation/paste-copy/cohorts/owned-full-phone100-v6/tests.log": "88cc2d6ceafc92ef4227155decaf32c022768416516a1197c4f56d6bb39d213e", + "docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/runner.json": "a2f622c1a349e39953053265b6cdd8b85ec232701940a2b795ced499c85ca328", + "docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/state.json": "ba768bc24bbada7e430f99b0fd29fbf44df6e638fb32ebbda8af06644e6bc0e5", + "docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/tests.log": "750d81dbc22d1c61689d5bf1e82963ab7b198103e69069f8b613281cf9b61e5a", + "docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/runner.json": "87372f1e099147cb09247baa0776f3ebf5b2f6daee357532935a8376327a6fe9", + "docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/state.json": "ba3593ba33a3e46098b960fdfc3fe8a47741c3192a228126902ccff8bbe72535", + "docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/tests.log": "60d9d8fd95d9cadde6e2cfb53e6fc8fcff260e7acb327f71b77788c13dc4c043", + "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/runner.json": "47af286e698bf2519f4a76fd52c698aab7b0b46475ef0107369a290ce8d0b3d5", + "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/state.json": "48cba4b8ac32422ee2d88ccce2db5beab8bb5f71bb84dab2d304d032b59099e2", + "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/tests.log": "256a517050cba61752e40b958f38ec4ef610c77bdc3320035166763789515731", + "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/runner.json": "ecdd1fc140624f5b035d659db9990e91501dabbbb7e04c65f7759d2c73442402", + "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/state.json": "cc949a2c1b067f458ea82dc4d5b05ce2d45a1a6569d0755e1ff3994fb7cebf45", + "docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/tests.log": "30de57f3ebc1a265958896bbe32699e4ce9e335079819c065418469ae4cca755", + "docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/runner.json": "46fbaabe26ca57fe9e9461d9dd2b09f350f351dfaf3803b9b487f3c60f7dfe41", + "docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/state.json": "b4a72358c45f2d1b99302d90f32f15d72157be69c9ad20eea58e47b60d633bee", + "docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/tests.log": "dbf0126342e4b4851e40e18eb1339b58075bbcace76a225660d0511b2e2e31f7", + "docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/runner.json": "8348aa077aff3db3738666dfc1d48de40dc10a8ee4dfbb48d7ead503b861b7fc", + "docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/state.json": "3f692b26d09c9d39e8ff10814db1e0836d195524af654fc44bcf7c9b9c87ff75", + "docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/tests.log": "756e976d536677fa347c01c77be67bdc91238cae9bebe4df3d487fe156705697", + "docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/runner.json": "b7d0dc2cd56cc75604b02e3977186511938a0da7a148201aa23210b98711ab1c", + "docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/state.json": "1c7ce58e35cc923e72bc671bb507df50ffbce9b44d5e298e89023b98310331a5", + "docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/tests.log": "33014f341bf3360e4f1dbdb601b723254165a21bb8f2e5dd44f7561078904b83", + "docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/runner.json": "3f8f64ac4a13148798b7e25a431246165ae0465cdfe112e098ac1dc02f80a0ce", + "docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/state.json": "467d29888e4ee342f4a0cc14e89d032863d87dbc9d97d3f554192854208202b4", + "docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/tests.log": "b9d7adfc2dee81b845a0aaa2ea0d1ef9c1a47444eb6f410b56c79b5f4dba7ee9", + "docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/runner.json": "5925f9a64a8f86aefb2a78bfce3f2e41626e7ded0f5b9f1bf5daec8bbe65d89c", + "docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/state.json": "294fa440b124a76e92e3c84b25fdeb260ae4eb2667ed5bf6607c9f8172830b65", + "docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/tests.log": "e3209c3acec284f5ac00d0a11a98e6dd19a37ec35750fe89f69eed5a06dc8030", + "docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/runner.json": "42f1f0e0e958c554c862a4527c457ea48c72078ca28da39bb32155cd967b4992", + "docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/state.json": "bb603d5742695e5d0d64d6acaed28ae8594d35093777a071b9d7c8801a0a080e", + "docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/tests.log": "4ebbf51ad22daff8f886c4d3f7751e4a7f8e300f6109c0c0d59a691618a50df0", + "docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/runner.json": "c6bbb3538d93a8da364fa92cca21400f85304e404dc37a5d5a4c8239cc97e89e", + "docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/state.json": "42420da86916a8e3e7c000aef69a97bd68528a0560fffcf0d3145507f5bf38e0", + "docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/tests.log": "e8c712d77dbbe68f89bd859895fc7599a82cf2aec74b6abcc5bb4a720bb504dc", + "docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/runner.json": "4a00002b4bb04bb30e23b5990055eb95761245f3ccbbd85973980995a2bc0784", + "docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/state.json": "a6ea5587df1a50f14d459fea5b7decdde145e3307a74efa0e79d7f0f9652d800", + "docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/tests.log": "725139daf98d7ac4a875a88d890416b569c90932d9a425de20f33d45508db2b5", + "docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/runner.json": "9de76dc9c85212be7ded7942287281a08e4732ea0582ce27f72083a76fe2f964", + "docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/state.json": "76a8b17526a296f46baae99857224c325e027541fac4096f5d0d4f7aeaca8b4f", + "docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/tests.log": "f18f876dcead5ead050df11b2697a49727667975e128681ba29ff87a73bba745", + "docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/runner.json": "9476eefd511f88adabe479256b31b8d5e1e490626fb265528b25b38cf09cda3e", + "docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/state.json": "3d0449743421e394cc1a34bcce870155a75c6b45d8dc06c911a42770c6d9f2b1", + "docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/tests.log": "1984ff040d1de505bbfb8b9f73a5ddfa4e5f08963827487da6863844fc32d49e", + "docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/runner.json": "29d1452ca21e115e4456c2ab8713529d318d38c5bf3502b057b769fd12d3c8f5", + "docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/state.json": "4cc9963e67535490419a8ced35d2fbdc22e032184c0e0f0def91b3e820370889", + "docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/tests.log": "4de74f9618ae8217120adacb13b4bd907c6cf620cc44818eb4862ce59ed62fd7", + "docs/validation/paste-copy/collectors/preservation.py": "06e94bdfb6254f2928225e9fc0f369837f21a3e4ceb177130f8a1b41322b2cea", + "docs/validation/paste-copy/collectors/publish-v2.py": "95cd652d44ce18da184de5b961652070425f08de59edc9f4e09152267c7d26ce", + "docs/validation/paste-copy/collectors/run-continuation-v7.py": "680787a89f4906efa9d9be74577b317068898046c2a0a06a8133bd15fd33fa29", + "docs/validation/paste-copy/collectors/run-final-matrix-v6.py": "b6943c2129c761775af5bd454b64aa6084da70ace51b1bd9ca2728a562a2ef51", + "docs/validation/paste-copy/collectors/run-frozen-paste-v2.py": "7eba5935a748db4213359208951a0e5d9641494d27f075ffce0c56bd977e0a09", + "docs/validation/paste-copy/collectors/run-owned-v3.py": "425873f7652de1587b52ffc9a858ba22557fcf9d0fa6461f4692872f28aa6b62", + "docs/validation/paste-copy/collectors/run-owned-v5.py": "6a1525caa4d1ddaef6746f19ca4f579b05340580af71bccdff51d62b4e041391", + "docs/validation/paste-copy/collectors/run-owned-v6.py": "30a6ca3825ffa649ae900c1fcd2e13a5a1dedf45fe55ec1dbefb7df2b7e1796a", + "docs/validation/paste-copy/collectors/run-owned-v7.py": "b87ac2ebefb8ed98cf669e3cbf46e0a14b15409f6ddf35f9b52b2bb71e36a728", + "docs/validation/paste-copy/collectors/run-regressions-v6.py": "b7ddfcc591acc700531b458a2d431112bc538ca681598960a1f9c8f37b7fa9f8", + "docs/validation/paste-copy/collectors/run-regressions-v7.py": "fb033fd19e05eeb0268ccf27b876c7fc6bbbb60ab7e2aa5de1b135ff846759fe", + "docs/validation/paste-copy/frames/landscape100-copied-frame.json": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "docs/validation/paste-copy/frames/landscape100-copied.xml": "53642be2c03acc86dfc3779f5d9f3f16cc604f997668e53ab134ece38622a1f9", + "docs/validation/paste-copy/frames/landscape100-pending-frame.json": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "docs/validation/paste-copy/frames/landscape100-pending.xml": "05c9314121159fb59f0f35c0600c43e777aa426a89a40514b6cfa106925565df", + "docs/validation/paste-copy/frames/landscape100-source-return-frame.json": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "docs/validation/paste-copy/frames/landscape100-source-return.xml": "efed08a0d8ad53e3acf44410d6282a5c5c0bd0ca195daea1edfd4dd436c6f9b5", + "docs/validation/paste-copy/frames/landscape200-copied-frame.json": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "docs/validation/paste-copy/frames/landscape200-copied.xml": "56566a2dcaa97238106e5b83a83b57c02b6d5a94b836a1d21b17c166fc32b6a8", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-after-frame.json": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-after.xml": "83545d3df18ed70ae9d8dbb82fe6312b0e9e320c32aa651e80c8243034d23e71", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-before-frame.json": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "docs/validation/paste-copy/frames/landscape200-interior-reveal-before.xml": "cbd646441b41058ec96966d747059c5338315c18d79c996aa012d0206a17fa95", + "docs/validation/paste-copy/frames/landscape200-keyboard-focus-frame.json": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "docs/validation/paste-copy/frames/landscape200-keyboard-focus.xml": "8ca49ba351242c120c56570e6bd60e2a19ea65e5d589579cb2e862ffb99e63d0", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-after-frame.json": "fabb694f3a48669df432723bf83143c6a21a713b2ac739f8d66d30077380e0e2", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-after.xml": "aff2aaf61d2ebc89d88e913d243f133bd51f0b5567d81e775bb2ac4318bfabe8", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-before-frame.json": "8eace7805f183cb6c0ea3f331cce242088f4754ba1a7f50e2463eae9d3dbaac7", + "docs/validation/paste-copy/frames/landscape200-legacy-reveal-before.xml": "30ac363b069746bd97dd31fa2d793f2eb94660ccb54e0fd009efdc78fbbb7d0f", + "docs/validation/paste-copy/frames/landscape200-original-keyboard-failure-frame.json": "4307d48f810ee3514f91a6ce2e3fe1715608bcd012768c2c494ad64a12c9c83b", + "docs/validation/paste-copy/frames/landscape200-original-keyboard-failure.xml": "3ccd5bc556585bcf0eed728cc41cc7a86103702ed8fd02be515e4a90a9c3d6bf", + "docs/validation/paste-copy/frames/landscape200-pending-frame.json": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "docs/validation/paste-copy/frames/landscape200-pending.xml": "9d3cc9d132b59186084aae32ad8dcded35184d3401c81894a035adde56c2e64b", + "docs/validation/paste-copy/frames/landscape200-source-return-frame.json": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "docs/validation/paste-copy/frames/landscape200-source-return.xml": "393a526747c9868a23bd2d44c1877053586e468de8e3bfb149edc245935e726a", + "docs/validation/paste-copy/frames/phone100-before-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "docs/validation/paste-copy/frames/phone100-before.xml": "7356943621e104b53cd60d0b185e4e9c0b11494e8b60da5188c17b95c80731df", + "docs/validation/paste-copy/frames/phone100-copied-frame.json": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "docs/validation/paste-copy/frames/phone100-copied.xml": "4d5011527e6932c03eaa6af53b03f6459093fb5f71460a08c33a5db4775f3d43", + "docs/validation/paste-copy/frames/phone100-detail-regression-frame.json": "c28e5a908a83820176796bc40927a916fec76883a97d62110bca136081750bee", + "docs/validation/paste-copy/frames/phone100-detail-regression.xml": "0735746eab06e5fabc799962ac4fdea13ae34f4e7a41397d77186e6943767851", + "docs/validation/paste-copy/frames/phone100-form-regression-frame.json": "48c12312813ea1e184bb7d3ed82a0c70924fbe237c492e97a97e472e50092fc0", + "docs/validation/paste-copy/frames/phone100-form-regression.xml": "e0c0bd34472232e711eeb7ba04156eec9858236d35208d7862a25adaaebd867c", + "docs/validation/paste-copy/frames/phone100-handoff-regression-frame.json": "653798a474ce567cb64c9b07c506c2688205fe418ccf29b20db318bf08138bcc", + "docs/validation/paste-copy/frames/phone100-handoff-regression.xml": "00204096f643d0e713aa7f94f3b6f35b29f3deb0421530fa5b2db0f6474ba202", + "docs/validation/paste-copy/frames/phone100-parent-restored-frame.json": "f691201a65606bcdec24908430bcb16007d3041e18535797b1049da05f5e4cc1", + "docs/validation/paste-copy/frames/phone100-parent-restored.xml": "fe43b42533a73e40e2c6712741ffb02833822974ee025fdd77d94f890bed8fa8", + "docs/validation/paste-copy/frames/phone100-pending-frame.json": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "docs/validation/paste-copy/frames/phone100-pending.xml": "9e4cd513636f81f02c3972c7246f4e5bd4ede0d03106e73a951876dea970e7bf", + "docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe-frame.json": "89b0aca48a5bdf1313f4b645ab6f584a6b690a994717375cd584e708dbfef72e", + "docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe.xml": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "docs/validation/paste-copy/frames/phone100-recreated-frame.json": "8138e4fd3aece10e3eedfcddd47ab26975b61ac0bb27bfbcc4ce6d0f1ff78708", + "docs/validation/paste-copy/frames/phone100-recreated.xml": "bb5286db9a986232dbe16b3fb162fc3991af68699667197396c2ff157e34bf7f", + "docs/validation/paste-copy/frames/phone100-source-before-frame.json": "fd178b2d5911ac7e9f229987fcd9a251d9644034671ea6de225eb108974e1abd", + "docs/validation/paste-copy/frames/phone100-source-before.xml": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "docs/validation/paste-copy/frames/phone100-source-return-frame.json": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "docs/validation/paste-copy/frames/phone100-source-return.xml": "ff064eabb4f30fa12b5cad3ba53be8c8d23e8d461e038f351f34ba09d2729678", + "docs/validation/paste-copy/frames/phone100-unicode-copy-frame.json": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "docs/validation/paste-copy/frames/phone100-unicode-copy.xml": "58937a87d448829eb1a29544f16d828686f2eba653188ef5791e76b2521b8db8", + "docs/validation/paste-copy/frames/phone200-copied-frame.json": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "docs/validation/paste-copy/frames/phone200-copied.xml": "56797a379cd51fad4bd80b59d35ac9d63784800f673f249466563712074880fe", + "docs/validation/paste-copy/frames/phone200-keyboard-focus-frame.json": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "docs/validation/paste-copy/frames/phone200-keyboard-focus.xml": "98dd0e929f71ee87966c8539077bd1dc75c150dbbfa9ff47cffad94faed0150f", + "docs/validation/paste-copy/frames/phone200-pending-frame.json": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "docs/validation/paste-copy/frames/phone200-pending.xml": "84c67c5106abdf20adfe6c333b4dad21e645463d03b943ef6d52f11b757c2118", + "docs/validation/paste-copy/frames/phone200-source-return-frame.json": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "docs/validation/paste-copy/frames/phone200-source-return.xml": "037c91c7966ea2db57b5d29f3289a1b660a8ec530bb530bf1c137b4aaa55ece6", + "docs/validation/paste-copy/frames/tablet100-before-frame.json": "061c2366d5241426ff35fd15f4984dbeab57899e56622ae794f2b30a90669154", + "docs/validation/paste-copy/frames/tablet100-before.xml": "d75e4c1c467b9aa827832cbad69108ec6b4334ccdc1330615cd799e84adb1519", + "docs/validation/paste-copy/frames/tablet100-copied-frame.json": "89a7e93ac6a7c9b0539154ea9e2616583f5ce588e227b65f2431dfba0ce6d323", + "docs/validation/paste-copy/frames/tablet100-copied.xml": "61fc70bc7d92e81ddf1eda65552a636bdbb1064bc2b2e1d0b944e291c6e107d8", + "docs/validation/paste-copy/frames/tablet100-new-source-frame.json": "597fc5e5de6b69a04a91b2a078c71f71dad4c71fb9ba28f7f6dfd2614b5422fb", + "docs/validation/paste-copy/frames/tablet100-new-source.xml": "de8d3b32719709399e095cd9fe5997b9723b6b168b82d8349747bb4a14070426", + "docs/validation/paste-copy/frames/tablet100-pending-frame.json": "36182a948b1b876550ee8a1a13dcb9972c09608ce1b2b7abd619982c408b72f8", + "docs/validation/paste-copy/frames/tablet100-pending.xml": "ca597830cb26cb460733662715c8194b5de72ca1b59dcb78f6519fef1849b787", + "docs/validation/paste-copy/frames/tablet100-source-return-frame.json": "aba2d7d081815e103f7226694b335a24e4eca246fd55b033047bc3a8a578555f", + "docs/validation/paste-copy/frames/tablet100-source-return.xml": "49f647a2647d56adddeb212c65bd3bcb7813751bdd5b2ca757b22f525e8ed4c7", + "docs/validation/paste-copy/frames/tablet100-uncaught-copy-frame.json": "348dde590d293fc6fee114e440d243ddd8a15d88cf704257d928c01e41dab919", + "docs/validation/paste-copy/frames/tablet100-uncaught-copy.xml": "fe95bb05c6e7a7fdd2c64224ff2aa979f49eb32f05b074a2c7f19eb379cd2453", + "docs/validation/paste-copy/frames/tablet100-uncaught-offer-frame.json": "941a7e70ef79327e79c5c379f24b30311449834a0b653fa74cac9d7ac05e3f3d", + "docs/validation/paste-copy/frames/tablet100-uncaught-offer.xml": "81efe8f0c095cbf793ef236868a48182139943028e8a479ec4c5d410275efab3", + "docs/validation/paste-copy/frames/tablet100-unicode-copy-frame.json": "703b4c05dde56a42c23e6c8f282391b647c24ac0f26ff3c5390208e3fcf1def5", + "docs/validation/paste-copy/frames/tablet100-unicode-copy.xml": "96a8d334611c54bc34bbd6cb8c40d1a02bb00e014cc11b9a4c58d2891d559230", + "docs/validation/paste-copy/frames/tablet200-copied-frame.json": "0191695b9fda93e822404fd439c8288f3dcf39061e8bcfaf44bd6806ab02a559", + "docs/validation/paste-copy/frames/tablet200-copied.xml": "1852060ae14440d4d0e54105cdf3ba51a968fb599cb010182ef7a9fe34f251ee", + "docs/validation/paste-copy/frames/tablet200-keyboard-focus-frame.json": "3c6f320a8a514ed6a285c295c8500c26bf6dc5c2352ed49fcc66006b62ac85da", + "docs/validation/paste-copy/frames/tablet200-keyboard-focus.xml": "ac46357ae71d51726ad510b94534d3d4ae5f7d890bc6ff9da5305f401162d35d", + "docs/validation/paste-copy/frames/tablet200-pending-frame.json": "5ba9217e1947f0c52fbccb5ee9ac87ab4fd58cf985e4a8ebe6d238dfdeb743d8", + "docs/validation/paste-copy/frames/tablet200-pending.xml": "0295994a33d510e8b627cd9f357bc6ca123054212d86bdb6b0b82dbbe3cd5678", + "docs/validation/paste-copy/frames/tablet200-source-return-frame.json": "da2bd62233151e6b305b39ab92cda7a2a1879924189c3732b1202fab7ea07d7b", + "docs/validation/paste-copy/frames/tablet200-source-return.xml": "ecd6750343df9d8c8f5dedf47454433112681aad9fc538513125b56368f9c612", + "docs/validation/paste-copy/identities/candidate-v1.json": "d39cef69b7510b465f582ddf014eb1a16208909dad5de228bdd54076efe9a8f9", + "docs/validation/paste-copy/identities/candidate-v2.json": "2ea0a8d734207d2939dbbbcad57bb477ffd8654ebcad099490d26e394dc84dc8", + "docs/validation/paste-copy/identities/owned-harness-v3.json": "27a1f0ff401d329ba507953548ffa603ee0e8c40a6b25d9f323e064acdd543c1", + "docs/validation/paste-copy/identities/owned-harness-v5.json": "71deeea6e49316822744df14cd485e2435879ae8e1112ad89d732efb56ed3de7", + "docs/validation/paste-copy/identities/owned-harness-v6.json": "c0a0dcef59a75dc7cd62b0dbe57ce0922563c59e334067b9aa02b8eaad23d667", + "docs/validation/paste-copy/identities/owned-harness-v7.json": "ea8705e5e750b7b2bc472f05a9540e95e12347df6c063a23db566e739d897009", + "docs/validation/paste-copy/pipelines/continuation-v7.json": "5e0515bdaac533943def17bb76c73080d3246335d5572c1fb4e9dd3e135a5bf7", + "docs/validation/paste-copy/pipelines/final-matrix-v6.json": "47c36cdc6f7b54a899bfe40f9f32b2a4a02d044b6e0e284a43947868dd1b8e54" + }, + "totals": { + "final-positive": { + "cohorts": 18, + "executions": 78, + "passes": 78, + "failures": 0, + "restoration_checks": 346 + }, + "matched-old-negative": { + "cohorts": 2, + "executions": 2, + "passes": 0, + "failures": 2, + "restoration_checks": 38 + }, + "matched-gesture-negative": { + "cohorts": 1, + "executions": 1, + "passes": 0, + "failures": 1, + "restoration_checks": 20 + }, + "historical-excluded": { + "cohorts": 4, + "executions": 14, + "passes": 10, + "failures": 4, + "restoration_checks": 74 + } + }, + "unchanged_packaged_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" + }, + "current_harness_payload_difference": [ + "classes3.dex", + "classes4.dex" + ] +} diff --git a/docs/validation/paste-copy/checks/apk-manifest-inspection.json b/docs/validation/paste-copy/checks/apk-manifest-inspection.json new file mode 100644 index 00000000..b600856e --- /dev/null +++ b/docs/validation/paste-copy/checks/apk-manifest-inspection.json @@ -0,0 +1,23 @@ +{ + "artifacts/paste-copy/candidate-v2/app-debug.apk": [ + " E: meta-data (line=46)", + " A: http://schemas.android.com/apk/res/android:name(0x01010003)=\"dev.droidcast.BUILD_COMMIT\" (Raw: \"dev.droidcast.BUILD_COMMIT\")", + " A: http://schemas.android.com/apk/res/android:value(0x01010024)=\"08210fa24674be924a6ebc93ce09b4fd170dfbc5\" (Raw: \"08210fa24674be924a6ebc93ce09b4fd170dfbc5\")", + " E: activity (line=50)" + ], + "artifacts/paste-copy/owned-harness-v6/final-checks/benchmark-app.apk": [ + " E: meta-data (line=45)", + " A: http://schemas.android.com/apk/res/android:name(0x01010003)=\"dev.droidcast.BUILD_COMMIT\" (Raw: \"dev.droidcast.BUILD_COMMIT\")", + " A: http://schemas.android.com/apk/res/android:value(0x01010024)=\"local\" (Raw: \"local\")", + " E: activity (line=49)" + ], + "artifacts/paste-copy/owned-harness-v7/final-checks/benchmark-app.apk": [ + " E: meta-data (line=45)", + " A: http://schemas.android.com/apk/res/android:name(0x01010003)=\"dev.droidcast.BUILD_COMMIT\" (Raw: \"dev.droidcast.BUILD_COMMIT\")", + " A: http://schemas.android.com/apk/res/android:value(0x01010024)=\"local\" (Raw: \"local\")", + " E: activity (line=49)" + ], + "artifacts/paste-copy/owned-harness-v7/app-debug-androidTest.apk": [ + "No application BUILD_COMMIT metadata in this APK" + ] +} diff --git a/docs/validation/paste-copy/checks/candidate-v2-benchmark-build.log b/docs/validation/paste-copy/checks/candidate-v2-benchmark-build.log new file mode 100644 index 00000000..104de828 --- /dev/null +++ b/docs/validation/paste-copy/checks/candidate-v2-benchmark-build.log @@ -0,0 +1,142 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preBenchmarkBuild UP-TO-DATE +> Task :app:mergeBenchmarkJniLibFolders +> Task :app:mergeBenchmarkNativeLibs +> Task :app:desugarBenchmarkFileDependencies + +> 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:generateBenchmarkBuildConfig +> Task :app:mergeBenchmarkArtProfile +> Task :app:extractBenchmarkNativeSymbolTables +> Task :app:generateBenchmarkResources +> Task :app:mergeBenchmarkNativeDebugMetadata NO-SOURCE +> Task :app:packageBenchmarkResources +> Task :app:processBenchmarkNavigationResources +> Task :app:javaPreCompileBenchmark +> Task :app:mapBenchmarkSourceSetPaths +> Task :app:parseBenchmarkLocalResources +> Task :app:compileBenchmarkNavigationResources +> Task :app:checkBenchmarkAarMetadata +> Task :app:createBenchmarkCompatibleScreenManifests +> Task :app:extractDeepLinksBenchmark +> Task :app:generateBenchmarkRFile +> Task :app:processBenchmarkMainManifest +> Task :app:mergeBenchmarkResources +> Task :app:processBenchmarkManifest +> Task :app:processBenchmarkManifestForPackage +> Task :app:mergeBenchmarkStartupProfile +> Task :app:generateBenchmarkAssets UP-TO-DATE +> Task :app:checkBenchmarkDuplicateClasses +> Task :app:mergeBenchmarkAssets +> Task :app:extractBenchmarkVersionControlInfo +> Task :app:extractProguardFiles UP-TO-DATE +> Task :app:compressBenchmarkAssets +> Task :app:collectBenchmarkDependencies +> Task :app:sdkBenchmarkDependencyData +> Task :app:validateSigningBenchmark +> Task :app:writeBenchmarkAppMetadata +> Task :app:writeBenchmarkSigningConfigVersions +> Task :app:preBenchmarkAndroidTestBuild SKIPPED +> Task :app:processBenchmarkAndroidTestManifest +> Task :app:generateBenchmarkAndroidTestBuildConfig +> Task :app:generateBenchmarkAndroidTestResources +> Task :app:packageBenchmarkAndroidTestResources +> Task :app:processBenchmarkAndroidTestNavigationResources +> Task :app:generateBenchmarkAndroidTestAssets UP-TO-DATE +> Task :app:parseBenchmarkAndroidTestLocalResources +> Task :app:javaPreCompileBenchmarkAndroidTest +> Task :app:mergeBenchmarkAndroidTestAssets +> Task :app:processBenchmarkResources +> Task :app:generateBenchmarkAndroidTestRFile +> Task :app:compressBenchmarkAndroidTestAssets +> Task :app:desugarBenchmarkAndroidTestFileDependencies +> Task :app:checkBenchmarkAndroidTestAarMetadata +> Task :app:mapBenchmarkAndroidTestSourceSetPaths +> Task :app:compileBenchmarkAndroidTestNavigationResources +> Task :app:optimizeBenchmarkResources +> Task :app:mergeBenchmarkAndroidTestJniLibFolders +> Task :app:checkBenchmarkAndroidTestDuplicateClasses +> Task :app:mergeBenchmarkAndroidTestNativeLibs NO-SOURCE +> Task :app:stripBenchmarkAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningBenchmarkAndroidTest +> Task :app:writeBenchmarkAndroidTestSigningConfigVersions +> Task :app:preBenchmarkUnitTestBuild UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestResources +> Task :app:processBenchmarkAndroidTestResources +> Task :app:mergeExtDexBenchmarkAndroidTest +> Task :app:mergeExtDexBenchmark + +> 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:212:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:226:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:compileBenchmarkJavaWithJavac +> Task :app:dexBuilderBenchmark +> Task :app:mergeBenchmarkGlobalSynthetics +> Task :app:generateBenchmarkLintVitalReportModel +> Task :app:processBenchmarkJavaRes +> Task :app:generateBenchmarkLintReportModel +> Task :app:bundleBenchmarkClassesToCompileJar +> Task :app:generateBenchmarkAndroidTestLintModel +> Task :app:generateBenchmarkUnitTestLintModel +> Task :app:mergeBenchmarkJavaResource + +> 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:mergeDexBenchmark +> Task :app:compileBenchmarkAndroidTestJavaWithJavac +> Task :app:compileBenchmarkArtProfile +> Task :app:dexBuilderBenchmarkAndroidTest +> Task :app:mergeBenchmarkAndroidTestGlobalSynthetics +> Task :app:processBenchmarkAndroidTestJavaRes +> Task :app:mergeBenchmarkAndroidTestJavaResource +> Task :app:mergeDexBenchmarkAndroidTest +> Task :app:packageBenchmarkAndroidTest +> Task :app:createBenchmarkAndroidTestApkListingFileRedirect +> Task :app:assembleBenchmarkAndroidTest +> Task :app:lintAnalyzeBenchmarkUnitTest +> Task :app:lintVitalAnalyzeBenchmark +> Task :app:lintAnalyzeBenchmark +> Task :app:lintAnalyzeBenchmarkAndroidTest +> Task :app:lintVitalReportBenchmark SKIPPED +> Task :app:lintVitalBenchmark SKIPPED +> Task :app:packageBenchmark +> Task :app:createBenchmarkApkListingFileRedirect +> Task :app:assembleBenchmark + +> Task :app:lintReportBenchmark +Wrote HTML report to file:///app/build/reports/lint-results-benchmark.html + +> Task :app:lintBenchmark + +BUILD SUCCESSFUL in 1m 51s +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/paste-copy/checks/candidate-v2-build.log b/docs/validation/paste-copy/checks/candidate-v2-build.log new file mode 100644 index 00000000..649c74aa --- /dev/null +++ b/docs/validation/paste-copy/checks/candidate-v2-build.log @@ -0,0 +1,111 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:javaPreCompileDebug 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 +> Task :app:processDebugMainManifest +> Task :app:processDebugManifest +> Task :app:preDebugUnitTestBuild UP-TO-DATE +> Task :app:javaPreCompileDebugUnitTest UP-TO-DATE +> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE +> Task :app:generateDebugAssets UP-TO-DATE +> Task :app:mergeDebugAssets UP-TO-DATE +> Task :app:compressDebugAssets UP-TO-DATE +> Task :app:generateDebugGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebug UP-TO-DATE +> Task :app:mergeLibDexDebug UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:stripDebugDebugSymbols UP-TO-DATE +> Task :app:validateSigningDebug UP-TO-DATE +> Task :app:writeDebugAppMetadata UP-TO-DATE +> Task :app:writeDebugSigningConfigVersions UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources +> 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:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:extractProguardFiles UP-TO-DATE +> Task :app:processDebugManifestForPackage +> Task :app:processDebugResources + +> Task :app:compileDebugKotlin +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:212:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:226:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:compileDebugJavaWithJavac +> Task :app:processDebugJavaRes UP-TO-DATE +> Task :app:mergeDebugJavaResource UP-TO-DATE +> Task :app:bundleDebugClassesToRuntimeJar +> Task :app:bundleDebugClassesToCompileJar +> Task :app:dexBuilderDebug +> Task :app:compileDebugUnitTestKotlin +> Task :app:generateDebugAndroidTestLintModel +> Task :app:compileDebugUnitTestJavaWithJavac NO-SOURCE +> Task :app:processDebugUnitTestJavaRes UP-TO-DATE +> Task :app:mergeProjectDexDebug + +> 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. + +> Task :app:testDebugUnitTest +> Task :app:compileDebugAndroidTestJavaWithJavac +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:generateDebugLintReportModel +> Task :app:generateDebugUnitTestLintModel +> Task :app:packageDebug +> Task :app:createDebugApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebug +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest +> Task :app:lintAnalyzeDebugUnitTest +> Task :app:lintAnalyzeDebug +> Task :app:lintAnalyzeDebugAndroidTest + +> Task :app:lintReportDebug +Wrote HTML report to file:///app/build/reports/lint-results-debug.html + +> Task :app:lintDebug + +BUILD SUCCESSFUL in 1m 29s +84 actionable tasks: 32 executed, 52 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/paste-copy/checks/current-benchmark-lint.json b/docs/validation/paste-copy/checks/current-benchmark-lint.json new file mode 100644 index 00000000..1d100a35 --- /dev/null +++ b/docs/validation/paste-copy/checks/current-benchmark-lint.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "source_commit": "51de2cab70d14afb980d396288ca889685587421", + "hashes": { + "benchmark-app.apk": "20ae1e5a84c8229fc920b49572aadb04f21b851fffb44a3f9a761733af08959c", + "benchmark-test.apk": "3e493f52247d212265f5ad1103ab9ce0c7b07498fa2b0fb8e41cdc64eb74a56c", + "lint-results-debug.xml": "cfc9f573ae5677bde9f73dd5f2664ec6f8a178f51749334c9d1098ff40045c92", + "lint-results-benchmark.xml": "cfc9f573ae5677bde9f73dd5f2664ec6f8a178f51749334c9d1098ff40045c92" + }, + "checks": { + "lint-results-debug.xml": { + "Error": 0, + "Fatal": 0, + "Warning": 55 + }, + "lint-results-benchmark.xml": { + "Error": 0, + "Fatal": 0, + "Warning": 55 + } + }, + "log_sha256": "234492620faff19cc33f0a9cb5a9505626c8c47269fe85e9ceda3be1c2df33f1" +} diff --git a/docs/validation/paste-copy/checks/initial-benchmark.json b/docs/validation/paste-copy/checks/initial-benchmark.json new file mode 100644 index 00000000..7742826c --- /dev/null +++ b/docs/validation/paste-copy/checks/initial-benchmark.json @@ -0,0 +1,13 @@ +{ + "source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "apk_hashes": { + "app-benchmark-androidTest.apk": "9d27731d192f0cb18dcbc48490cf2c32c6c2d7e57284f658d49b8fb6af87ef79", + "app-benchmark.apk": "445ceeebed5234736834b344a4dd697447f737cf1d16a1fd17f2c021a255cf85" + }, + "lint": { + "Error": 0, + "Fatal": 0, + "Warning": 55 + }, + "build_log_sha256": "887eb80aa8e7bcf05dfbae9523608206979bc376a0590e1fc503f9eef503d763" +} diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml new file mode 100644 index 00000000..7ff6d0c0 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml new file mode 100644 index 00000000..6ede03e0 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml new file mode 100644 index 00000000..c28a7769 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml new file mode 100644 index 00000000..0faad6c6 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml new file mode 100644 index 00000000..003bfa77 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml new file mode 100644 index 00000000..55bdbd2a --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml new file mode 100644 index 00000000..3ae523b6 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml new file mode 100644 index 00000000..e44ea401 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml new file mode 100644 index 00000000..6b812875 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml new file mode 100644 index 00000000..e3d4f018 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml new file mode 100644 index 00000000..c596fdfb --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml new file mode 100644 index 00000000..5cc6dd8c --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml new file mode 100644 index 00000000..ed9fbb7d --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml new file mode 100644 index 00000000..05ca96c5 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml new file mode 100644 index 00000000..3a82f78c --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml new file mode 100644 index 00000000..6d672979 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml new file mode 100644 index 00000000..b7b1fafa --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml new file mode 100644 index 00000000..c1954bc9 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml new file mode 100644 index 00000000..6bbf3d4d --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml new file mode 100644 index 00000000..4d10f541 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml new file mode 100644 index 00000000..1bc54aa7 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml new file mode 100644 index 00000000..e502c92d --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml new file mode 100644 index 00000000..8ccefc9c --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml new file mode 100644 index 00000000..fa19f589 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml new file mode 100644 index 00000000..aba73aa1 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml new file mode 100644 index 00000000..3547395e --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml new file mode 100644 index 00000000..f8c4666b --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml new file mode 100644 index 00000000..600eebff --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml new file mode 100644 index 00000000..b5c3e981 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml new file mode 100644 index 00000000..694a4ae6 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml new file mode 100644 index 00000000..13acab0c --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml new file mode 100644 index 00000000..e4a198f6 --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml new file mode 100644 index 00000000..e7d2a37b --- /dev/null +++ b/docs/validation/paste-copy/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/lint-results-benchmark.xml b/docs/validation/paste-copy/checks/lint-results-benchmark.xml new file mode 100644 index 00000000..31d12604 --- /dev/null +++ b/docs/validation/paste-copy/checks/lint-results-benchmark.xml @@ -0,0 +1,886 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/lint-results-debug.xml b/docs/validation/paste-copy/checks/lint-results-debug.xml new file mode 100644 index 00000000..31d12604 --- /dev/null +++ b/docs/validation/paste-copy/checks/lint-results-debug.xml @@ -0,0 +1,886 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/paste-copy/checks/owned-harness-v3-build.log b/docs/validation/paste-copy/checks/owned-harness-v3-build.log new file mode 100644 index 00000000..256aa35f --- /dev/null +++ b/docs/validation/paste-copy/checks/owned-harness-v3-build.log @@ -0,0 +1,68 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:javaPreCompileDebug 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 +> Task :app:processDebugMainManifest +> Task :app:processDebugManifest +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources +> 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:processDebugManifestForPackage +> Task :app:processDebugResources +> Task :app:compileDebugKotlin +> Task :app:compileDebugJavaWithJavac +> Task :app:bundleDebugClassesToCompileJar + +> 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. + +> Task :app:compileDebugAndroidTestJavaWithJavac +> 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 18s +53 actionable tasks: 18 executed, 35 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/paste-copy/checks/owned-harness-v5-build.log b/docs/validation/paste-copy/checks/owned-harness-v5-build.log new file mode 100644 index 00000000..256aa35f --- /dev/null +++ b/docs/validation/paste-copy/checks/owned-harness-v5-build.log @@ -0,0 +1,68 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:javaPreCompileDebug 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 +> Task :app:processDebugMainManifest +> Task :app:processDebugManifest +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources +> 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:processDebugManifestForPackage +> Task :app:processDebugResources +> Task :app:compileDebugKotlin +> Task :app:compileDebugJavaWithJavac +> Task :app:bundleDebugClassesToCompileJar + +> 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. + +> Task :app:compileDebugAndroidTestJavaWithJavac +> 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 18s +53 actionable tasks: 18 executed, 35 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/paste-copy/checks/owned-harness-v6-benchmark-lint-v2.log b/docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint-v2.log new file mode 100644 index 00000000..585e1888 --- /dev/null +++ b/docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint-v2.log @@ -0,0 +1,130 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preBenchmarkBuild UP-TO-DATE +> Task :app:mergeBenchmarkJniLibFolders UP-TO-DATE +> Task :app:mergeBenchmarkNativeLibs UP-TO-DATE +> Task :app:stripBenchmarkDebugSymbols UP-TO-DATE +> Task :app:extractBenchmarkNativeSymbolTables UP-TO-DATE +> Task :app:mergeBenchmarkNativeDebugMetadata NO-SOURCE +> Task :app:mergeBenchmarkArtProfile UP-TO-DATE +> Task :app:desugarBenchmarkFileDependencies UP-TO-DATE +> Task :app:generateBenchmarkBuildConfig +> Task :app:generateBenchmarkResources UP-TO-DATE +> Task :app:packageBenchmarkResources UP-TO-DATE +> Task :app:processBenchmarkNavigationResources +> Task :app:parseBenchmarkLocalResources UP-TO-DATE +> Task :app:generateBenchmarkRFile UP-TO-DATE +> Task :app:javaPreCompileBenchmark 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 +> Task :app:processBenchmarkMainManifest +> Task :app:processBenchmarkManifest +> Task :app:checkBenchmarkDuplicateClasses UP-TO-DATE +> Task :app:mergeBenchmarkStartupProfile UP-TO-DATE +> Task :app:mergeExtDexBenchmark UP-TO-DATE +> Task :app:generateBenchmarkAssets UP-TO-DATE +> Task :app:mergeBenchmarkAssets UP-TO-DATE +> Task :app:compressBenchmarkAssets UP-TO-DATE +> Task :app:extractBenchmarkVersionControlInfo UP-TO-DATE +> Task :app:extractProguardFiles UP-TO-DATE +> Task :app:collectBenchmarkDependencies UP-TO-DATE +> Task :app:sdkBenchmarkDependencyData UP-TO-DATE +> Task :app:validateSigningBenchmark UP-TO-DATE +> Task :app:writeBenchmarkAppMetadata UP-TO-DATE +> Task :app:writeBenchmarkSigningConfigVersions UP-TO-DATE +> Task :app:preBenchmarkAndroidTestBuild SKIPPED +> Task :app:processBenchmarkAndroidTestManifest +> Task :app:generateBenchmarkAndroidTestBuildConfig +> Task :app:generateBenchmarkAndroidTestResources UP-TO-DATE +> Task :app:packageBenchmarkAndroidTestResources UP-TO-DATE +> Task :app:processBenchmarkAndroidTestNavigationResources +> Task :app:parseBenchmarkAndroidTestLocalResources UP-TO-DATE +> Task :app:generateBenchmarkAndroidTestRFile UP-TO-DATE +> Task :app:javaPreCompileBenchmarkAndroidTest 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:checkBenchmarkAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:mergeExtDexBenchmarkAndroidTest UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestJniLibFolders 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:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:extractDeepLinksDebug +> Task :app:processDebugMainManifest +> Task :app:preBenchmarkUnitTestBuild UP-TO-DATE +> Task :app:processBenchmarkManifestForPackage +> Task :app:processBenchmarkResources +> Task :app:optimizeBenchmarkResources +> Task :app:compileBenchmarkKotlin +> Task :app:compileDebugKotlin +> Task :app:compileBenchmarkJavaWithJavac +> Task :app:dexBuilderBenchmark +> Task :app:mergeBenchmarkGlobalSynthetics UP-TO-DATE +> Task :app:generateBenchmarkLintVitalReportModel +> Task :app:processBenchmarkJavaRes UP-TO-DATE +> Task :app:mergeBenchmarkJavaResource UP-TO-DATE +> Task :app:bundleBenchmarkClassesToCompileJar +> Task :app:compileDebugJavaWithJavac +> Task :app:generateDebugLintReportModel +> Task :app:generateBenchmarkAndroidTestLintModel +> Task :app:generateBenchmarkLintReportModel +> Task :app:generateBenchmarkUnitTestLintModel + +> 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. + +> Task :app:compileBenchmarkAndroidTestJavaWithJavac +> Task :app:dexBuilderBenchmarkAndroidTest +> Task :app:mergeBenchmarkAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:processBenchmarkAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestJavaResource UP-TO-DATE +> Task :app:mergeDexBenchmarkAndroidTest +> Task :app:packageBenchmarkAndroidTest +> Task :app:createBenchmarkAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleBenchmarkAndroidTest +> Task :app:mergeDexBenchmark +> Task :app:compileBenchmarkArtProfile +> Task :app:lintVitalAnalyzeBenchmark +> Task :app:lintAnalyzeDebug +> Task :app:lintAnalyzeBenchmark +> Task :app:lintAnalyzeBenchmarkAndroidTest +> Task :app:lintVitalReportBenchmark SKIPPED +> Task :app:lintVitalBenchmark SKIPPED +> Task :app:packageBenchmark +> Task :app:createBenchmarkApkListingFileRedirect UP-TO-DATE +> Task :app:assembleBenchmark +> Task :app:lintAnalyzeBenchmarkUnitTest + +> Task :app:lintReportBenchmark +Wrote HTML report to file:///app/build/reports/lint-results-benchmark.html + +> Task :app:lintBenchmark + +> Task :app:lintReportDebug +Wrote HTML report to file:///app/build/reports/lint-results-debug.html + +> Task :app:lintDebug + +BUILD SUCCESSFUL in 2m 27s +102 actionable tasks: 43 executed, 59 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/paste-copy/checks/owned-harness-v6-benchmark-lint.log b/docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint.log new file mode 100644 index 00000000..77a38340 --- /dev/null +++ b/docs/validation/paste-copy/checks/owned-harness-v6-benchmark-lint.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 1s diff --git a/docs/validation/paste-copy/checks/owned-harness-v6-build.log b/docs/validation/paste-copy/checks/owned-harness-v6-build.log new file mode 100644 index 00000000..ea2fda32 --- /dev/null +++ b/docs/validation/paste-copy/checks/owned-harness-v6-build.log @@ -0,0 +1,68 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:javaPreCompileDebug 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 +> Task :app:processDebugMainManifest +> Task :app:processDebugManifest +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources +> 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:processDebugManifestForPackage +> 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:processDebugResources +> Task :app:compileDebugKotlin +> Task :app:compileDebugJavaWithJavac +> Task :app:bundleDebugClassesToCompileJar + +> 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. + +> Task :app:compileDebugAndroidTestJavaWithJavac +> 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 7s +53 actionable tasks: 18 executed, 35 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/paste-copy/checks/owned-harness-v7-benchmark-lint.log b/docs/validation/paste-copy/checks/owned-harness-v7-benchmark-lint.log new file mode 100644 index 00000000..e6cca634 --- /dev/null +++ b/docs/validation/paste-copy/checks/owned-harness-v7-benchmark-lint.log @@ -0,0 +1,120 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preBenchmarkBuild UP-TO-DATE +> Task :app:mergeBenchmarkJniLibFolders UP-TO-DATE +> Task :app:mergeBenchmarkNativeLibs UP-TO-DATE +> Task :app:stripBenchmarkDebugSymbols UP-TO-DATE +> Task :app:extractBenchmarkNativeSymbolTables UP-TO-DATE +> Task :app:mergeBenchmarkNativeDebugMetadata NO-SOURCE +> Task :app:mergeBenchmarkArtProfile UP-TO-DATE +> Task :app:desugarBenchmarkFileDependencies 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:dexBuilderBenchmark UP-TO-DATE +> Task :app:mergeBenchmarkGlobalSynthetics UP-TO-DATE +> Task :app:checkBenchmarkDuplicateClasses UP-TO-DATE +> Task :app:mergeBenchmarkStartupProfile UP-TO-DATE +> Task :app:mergeExtDexBenchmark UP-TO-DATE +> Task :app:mergeDexBenchmark UP-TO-DATE +> Task :app:compileBenchmarkArtProfile UP-TO-DATE +> Task :app:generateBenchmarkAssets UP-TO-DATE +> Task :app:mergeBenchmarkAssets UP-TO-DATE +> Task :app:compressBenchmarkAssets UP-TO-DATE +> Task :app:extractBenchmarkVersionControlInfo UP-TO-DATE +> Task :app:extractProguardFiles UP-TO-DATE +> Task :app:generateBenchmarkLintVitalReportModel UP-TO-DATE +> Task :app:lintVitalAnalyzeBenchmark UP-TO-DATE +> Task :app:lintVitalReportBenchmark SKIPPED +> Task :app:lintVitalBenchmark SKIPPED +> Task :app:processBenchmarkJavaRes UP-TO-DATE +> Task :app:mergeBenchmarkJavaResource UP-TO-DATE +> Task :app:optimizeBenchmarkResources UP-TO-DATE +> Task :app:collectBenchmarkDependencies UP-TO-DATE +> Task :app:sdkBenchmarkDependencyData UP-TO-DATE +> Task :app:validateSigningBenchmark UP-TO-DATE +> Task :app:writeBenchmarkAppMetadata UP-TO-DATE +> Task :app:writeBenchmarkSigningConfigVersions UP-TO-DATE +> Task :app:packageBenchmark UP-TO-DATE +> Task :app:createBenchmarkApkListingFileRedirect UP-TO-DATE +> Task :app:assembleBenchmark 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:javaPreCompileBenchmarkAndroidTest 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:checkBenchmarkAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:mergeExtDexBenchmarkAndroidTest UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestJniLibFolders 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: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:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:generateDebugLintReportModel UP-TO-DATE +> Task :app:lintAnalyzeDebug UP-TO-DATE +> Task :app:lintReportDebug UP-TO-DATE +> Task :app:lintDebug +> Task :app:generateBenchmarkAndroidTestLintModel +> 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:lintAnalyzeBenchmarkUnitTest UP-TO-DATE +> Task :app:compileBenchmarkAndroidTestKotlin +> Task :app:compileBenchmarkAndroidTestJavaWithJavac 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:mergeDexBenchmarkAndroidTest +> Task :app:packageBenchmarkAndroidTest +> Task :app:createBenchmarkAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleBenchmarkAndroidTest +> Task :app:lintAnalyzeBenchmarkAndroidTest +> Task :app:lintReportBenchmark UP-TO-DATE +> Task :app:lintBenchmark + +BUILD SUCCESSFUL in 58s +102 actionable tasks: 8 executed, 94 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/paste-copy/checks/owned-harness-v7-build.log b/docs/validation/paste-copy/checks/owned-harness-v7-build.log new file mode 100644 index 00000000..19bf2798 --- /dev/null +++ b/docs/validation/paste-copy/checks/owned-harness-v7-build.log @@ -0,0 +1,68 @@ +> 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 +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources +> 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:processDebugManifestForPackage +> Task :app:processDebugResources +> Task :app:bundleDebugClassesToCompileJar + +> 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. + +> Task :app:compileDebugAndroidTestJavaWithJavac +> 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 7s +53 actionable tasks: 12 executed, 41 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/paste-copy/checks/python-owned-optimized-v3.log b/docs/validation/paste-copy/checks/python-owned-optimized-v3.log new file mode 100644 index 00000000..8789acb8 --- /dev/null +++ b/docs/validation/paste-copy/checks/python-owned-optimized-v3.log @@ -0,0 +1,6 @@ +.................................................................................................................. +---------------------------------------------------------------------- +Ran 114 tests in 19.687s + +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/paste-copy/checks/python-owned-v3.log b/docs/validation/paste-copy/checks/python-owned-v3.log new file mode 100644 index 00000000..219e3fbd --- /dev/null +++ b/docs/validation/paste-copy/checks/python-owned-v3.log @@ -0,0 +1,6 @@ +.................................................................................................................. +---------------------------------------------------------------------- +Ran 114 tests in 24.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/paste-copy/checks/python-reveal-optimized-v7.log b/docs/validation/paste-copy/checks/python-reveal-optimized-v7.log new file mode 100644 index 00000000..b7bb2101 --- /dev/null +++ b/docs/validation/paste-copy/checks/python-reveal-optimized-v7.log @@ -0,0 +1,6 @@ +................................................................................................................... +---------------------------------------------------------------------- +Ran 115 tests in 15.914s + +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/paste-copy/checks/python-reveal-v7.log b/docs/validation/paste-copy/checks/python-reveal-v7.log new file mode 100644 index 00000000..ea56790b --- /dev/null +++ b/docs/validation/paste-copy/checks/python-reveal-v7.log @@ -0,0 +1,6 @@ +................................................................................................................... +---------------------------------------------------------------------- +Ran 115 tests in 15.915s + +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/paste-copy/cohorts/frozen-copy-landscape100-v2/runner.json b/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/runner.json new file mode 100644 index 00000000..845d9988 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/runner.json @@ -0,0 +1,113 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "landscape", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/state.json b/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/state.json new file mode 100644 index 00000000..aaf3c9c8 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/state.json @@ -0,0 +1,22 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "landscape", + "font": 1.0, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "app": "new" +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/tests.log b/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/tests.log new file mode 100644 index 00000000..118843cc --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-landscape100-v2/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 17.961 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/runner.json b/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/runner.json new file mode 100644 index 00000000..3014ca67 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/runner.json @@ -0,0 +1,113 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "landscape", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/state.json b/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/state.json new file mode 100644 index 00000000..f1a47aa0 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/state.json @@ -0,0 +1,22 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "landscape", + "font": 2.0, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "app": "new" +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/tests.log b/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/tests.log new file mode 100644 index 00000000..2241764e --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-landscape200-v2/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 20.93 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/runner.json b/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/runner.json new file mode 100644 index 00000000..48a2e89a --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/runner.json @@ -0,0 +1,113 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/state.json b/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/state.json new file mode 100644 index 00000000..537c1c6a --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/state.json @@ -0,0 +1,22 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "phone", + "font": 1.0, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "app": "new" +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/tests.log b/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/tests.log new file mode 100644 index 00000000..e34eb06a --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-phone100-v2/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 14.685 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/runner.json b/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/runner.json new file mode 100644 index 00000000..abcffc20 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/runner.json @@ -0,0 +1,113 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/state.json b/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/state.json new file mode 100644 index 00000000..e8106bff --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/state.json @@ -0,0 +1,22 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "phone", + "font": 2.0, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "app": "new" +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/tests.log b/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/tests.log new file mode 100644 index 00000000..3d44035b --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-phone200-v2/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 13.754 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/runner.json b/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/runner.json new file mode 100644 index 00000000..07f6c886 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/runner.json @@ -0,0 +1,107 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/state.json b/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/state.json new file mode 100644 index 00000000..1535145a --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/state.json @@ -0,0 +1,22 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "tablet", + "font": 1, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "app": "new" +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/tests.log b/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/tests.log new file mode 100644 index 00000000..fcd8242b --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-tablet100-v2/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 14.708 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/runner.json b/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/runner.json new file mode 100644 index 00000000..1a9f0677 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/runner.json @@ -0,0 +1,107 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/state.json b/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/state.json new file mode 100644 index 00000000..991fa2a6 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/state.json @@ -0,0 +1,22 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "tablet", + "font": 2.0, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-explicit-copy-fallback", + "app": "new" +} diff --git a/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/tests.log b/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/tests.log new file mode 100644 index 00000000..21dc46de --- /dev/null +++ b/docs/validation/paste-copy/cohorts/frozen-copy-tablet200-v2/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 14.095 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/runner.json b/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/runner.json new file mode 100644 index 00000000..c1062a8c --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/runner.json @@ -0,0 +1,113 @@ +{ + "completed": false, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "landscape", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "runner_sha256": "7fedf586b094eb01160878d0af4e5529b681d2ac95ee2ebb34b52422d14c18a7", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "paste_copy_legacy_reveal": true, + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 0, + "tests_completed": false, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/state.json b/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/state.json new file mode 100644 index 00000000..fb3ef995 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/state.json @@ -0,0 +1,24 @@ +{ + "completed": true, + "scope": "Matched legacy test-gesture control; no application regression credit", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "collector_sha256": "e14f8a9d04a456d6dd5c94a1e688eba11b022d17fd827aac68ae1d129efc71e1", + "layout": "landscape", + "font": 2.0, + "method": "keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "passes": 0, + "runner_exit_code": 1, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1, + "expected_negative": true +} diff --git a/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/tests.log b/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/tests.log new file mode 100644 index 00000000..83155a31 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-legacy-reveal-landscape200-v7/tests.log @@ -0,0 +1,86 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Failed: assertExists. +The node is no longer in the tree, last known semantics: +Node #171 at (l=1031.0, t=647.0, r=1820.0, b=800.0)px, Tag: 'extension-primary' +ContentDescription = '[Try owned paste]' +Role = 'Button' +Focused = 'false' +Text = '[Try owned paste]' +Actions = [OnClick, RequestFocus, SetTextSubstitution, ShowTextSubstitution, ClearTextSubstitution, GetTextLayoutResult] +MergeDescendants = 'true' +Has 1 sibling +Original selector: TestTag = 'extension-primary' + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:165) + 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.ExtensionPasteCopyDeviceTest.tap(ExtensionPasteCopyDeviceTest.kt:259) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pending(ExtensionPasteCopyDeviceTest.kt:227) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.keyboardCopyHidesImeAndEscapeReturns(ExtensionPasteCopyDeviceTest.kt:467) + +INSTRUMENTATION_STATUS: stream= +Error in keyboardCopyHidesImeAndEscapeReturns(dev.tinycast.android.ExtensionPasteCopyDeviceTest): +java.lang.AssertionError: Failed: assertExists. +The node is no longer in the tree, last known semantics: +Node #171 at (l=1031.0, t=647.0, r=1820.0, b=800.0)px, Tag: 'extension-primary' +ContentDescription = '[Try owned paste]' +Role = 'Button' +Focused = 'false' +Text = '[Try owned paste]' +Actions = [OnClick, RequestFocus, SetTextSubstitution, ShowTextSubstitution, ClearTextSubstitution, GetTextLayoutResult] +MergeDescendants = 'true' +Has 1 sibling +Original selector: TestTag = 'extension-primary' + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:165) + 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.ExtensionPasteCopyDeviceTest.tap(ExtensionPasteCopyDeviceTest.kt:259) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pending(ExtensionPasteCopyDeviceTest.kt:227) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.keyboardCopyHidesImeAndEscapeReturns(ExtensionPasteCopyDeviceTest.kt:467) + +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 14.208 +There was 1 failure: +1) keyboardCopyHidesImeAndEscapeReturns(dev.tinycast.android.ExtensionPasteCopyDeviceTest) +java.lang.AssertionError: Failed: assertExists. +The node is no longer in the tree, last known semantics: +Node #171 at (l=1031.0, t=647.0, r=1820.0, b=800.0)px, Tag: 'extension-primary' +ContentDescription = '[Try owned paste]' +Role = 'Button' +Focused = 'false' +Text = '[Try owned paste]' +Actions = [OnClick, RequestFocus, SetTextSubstitution, ShowTextSubstitution, ClearTextSubstitution, GetTextLayoutResult] +MergeDescendants = 'true' +Has 1 sibling +Original selector: TestTag = 'extension-primary' + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:165) + 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.ExtensionPasteCopyDeviceTest.tap(ExtensionPasteCopyDeviceTest.kt:259) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pending(ExtensionPasteCopyDeviceTest.kt:227) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.keyboardCopyHidesImeAndEscapeReturns(ExtensionPasteCopyDeviceTest.kt:467) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/runner.json b/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/runner.json new file mode 100644 index 00000000..fb7ce991 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/runner.json @@ -0,0 +1,113 @@ +{ + "completed": false, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 0, + "tests_completed": false, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/state.json b/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/state.json new file mode 100644 index 00000000..bb8c70e3 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "56134f31f74211d7ec4d8faaf18ef5f84658242e", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "phone", + "font": 1.0, + "passes": 0, + "runner_exit_code": 1, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-unsupported", + "expected_negative": true, + "app": "old" +} diff --git a/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/tests.log b/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/tests.log new file mode 100644 index 00000000..67e468db --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-old-phone100-v2/tests.log @@ -0,0 +1,47 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: A rejected paste with owned output must offer Copy result instead expected:<1> but was:<0> + 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 dev.tinycast.android.ReviewedTextDeviceTest.observeContextTranslation(ReviewedTextDeviceTest.kt:665) + at dev.tinycast.android.ReviewedTextDeviceTest.selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(ReviewedTextDeviceTest.kt:707) + +INSTRUMENTATION_STATUS: stream= +Error in selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(dev.tinycast.android.ReviewedTextDeviceTest): +java.lang.AssertionError: A rejected paste with owned output must offer Copy result instead expected:<1> but was:<0> + 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 dev.tinycast.android.ReviewedTextDeviceTest.observeContextTranslation(ReviewedTextDeviceTest.kt:665) + at dev.tinycast.android.ReviewedTextDeviceTest.selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(ReviewedTextDeviceTest.kt:707) + +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 23.175 +There was 1 failure: +1) selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(dev.tinycast.android.ReviewedTextDeviceTest) +java.lang.AssertionError: A rejected paste with owned output must offer Copy result instead expected:<1> but was:<0> + 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 dev.tinycast.android.ReviewedTextDeviceTest.observeContextTranslation(ReviewedTextDeviceTest.kt:665) + at dev.tinycast.android.ReviewedTextDeviceTest.selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(ReviewedTextDeviceTest.kt:707) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/runner.json b/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/runner.json new file mode 100644 index 00000000..4b0d8efa --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/runner.json @@ -0,0 +1,107 @@ +{ + "completed": false, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "expect_paste_copy_fallback": true, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 0, + "tests_completed": false, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/state.json b/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/state.json new file mode 100644 index 00000000..528d91a0 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Explicit native Copy fallback; actual insertion remains unsupported/partial", + "runtime_source_commit": "56134f31f74211d7ec4d8faaf18ef5f84658242e", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d", + "test_apk_sha256": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "collector_sha256": "31efd580acd7b5c0efbe840063543705bf2e2f93b5b2985fc35f5f01808ab40a", + "layout": "tablet", + "font": 1.0, + "passes": 0, + "runner_exit_code": 1, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-unsupported", + "expected_negative": true, + "app": "old" +} diff --git a/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/tests.log b/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/tests.log new file mode 100644 index 00000000..09a98ff9 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/matched-old-tablet100-v2/tests.log @@ -0,0 +1,47 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: A rejected paste with owned output must offer Copy result instead expected:<1> but was:<0> + 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 dev.tinycast.android.ReviewedTextDeviceTest.observeContextTranslation(ReviewedTextDeviceTest.kt:665) + at dev.tinycast.android.ReviewedTextDeviceTest.selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(ReviewedTextDeviceTest.kt:707) + +INSTRUMENTATION_STATUS: stream= +Error in selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(dev.tinycast.android.ReviewedTextDeviceTest): +java.lang.AssertionError: A rejected paste with owned output must offer Copy result instead expected:<1> but was:<0> + 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 dev.tinycast.android.ReviewedTextDeviceTest.observeContextTranslation(ReviewedTextDeviceTest.kt:665) + at dev.tinycast.android.ReviewedTextDeviceTest.selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(ReviewedTextDeviceTest.kt:707) + +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 30.558 +There was 1 failure: +1) selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(dev.tinycast.android.ReviewedTextDeviceTest) +java.lang.AssertionError: A rejected paste with owned output must offer Copy result instead expected:<1> but was:<0> + 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 dev.tinycast.android.ReviewedTextDeviceTest.observeContextTranslation(ReviewedTextDeviceTest.kt:665) + at dev.tinycast.android.ReviewedTextDeviceTest.selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure(ReviewedTextDeviceTest.kt:707) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/runner.json new file mode 100644 index 00000000..1cc65572 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/runner.json @@ -0,0 +1,112 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest", + "expected": 13, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 13, + "tests_completed": true, + "owned_extension_count": 13, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/state.json b/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/state.json new file mode 100644 index 00000000..bada030e --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "phone", + "font": 1, + "method": null, + "expected": 13, + "passes": 13, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 13 +} diff --git a/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/tests.log new file mode 100644 index 00000000..d6167a4c --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-phone100-v6/tests.log @@ -0,0 +1,191 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=replacementRejectsQueuedCopyBeforeRecomposition +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=replacementRejectsQueuedCopyBeforeRecomposition +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=sameSessionReplacementCannotCopyThePriorOutput +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=sameSessionReplacementCannotCopyThePriorOutput +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=sourceReplacementClearsOutputBeforeAnyQueuedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=sourceReplacementClearsOutputBeforeAnyQueuedCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=closingOtherEnginesCannotClearTheCurrentOwner +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=closingOtherEnginesCannotClearTheCurrentOwner +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recreationClearsTheBufferAndDisposedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recreationClearsTheBufferAndDisposedCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=losingWindowFocusRejectsRetainedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=losingWindowFocusRejectsRetainedCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=returnAndEscapeCancelWithoutCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=returnAndEscapeCancelWithoutCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=preferencesDisposalAndHiddenRequestsCannotCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=preferencesDisposalAndHiddenRequestsCannotCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=uncaughtPasteFailureStillRequiresExplicitCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=uncaughtPasteFailureStillRequiresExplicitCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=invalidRequestsClearPriorOutputWithoutCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=invalidRequestsClearPriorOutputWithoutCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=13 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=portableNullNormalizationIsNotARawNullRequest +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=13 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=portableNullNormalizationIsNotARawNullRequest +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 120.858 + +OK (13 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/runner.json b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/runner.json new file mode 100644 index 00000000..50dce312 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/runner.json @@ -0,0 +1,106 @@ +{ + "completed": false, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest", + "expected": 11, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "597a2c3a4122cbc5aa5b79fe3ffcae889f6655f7fabd187f4ffbfbb16d1c9065", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 9, + "tests_completed": false, + "owned_extension_count": 11, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/state.json b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/state.json new file mode 100644 index 00000000..168de696 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/state.json @@ -0,0 +1,23 @@ +{ + "completed": false, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "d29139e620f07509a3c8804debf5ed725d394638", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "597a2c3a4122cbc5aa5b79fe3ffcae889f6655f7fabd187f4ffbfbb16d1c9065", + "collector_sha256": "519579dfb1008d4f0c77ced8d5ed26cfcc5045420658f8159ce05423a3717896", + "layout": "tablet", + "font": 1, + "method": null, + "expected": 11, + "passes": 9, + "runner_exit_code": 1, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 11 +} diff --git a/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/tests.log b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/tests.log new file mode 100644 index 00000000..466e73b7 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v5/tests.log @@ -0,0 +1,200 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=replacementRejectsQueuedCopyBeforeRecomposition +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=replacementRejectsQueuedCopyBeforeRecomposition +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=sameSessionReplacementCannotCopyThePriorOutput +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=sameSessionReplacementCannotCopyThePriorOutput +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=closingOtherEnginesCannotClearTheCurrentOwner +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=closingOtherEnginesCannotClearTheCurrentOwner +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recreationClearsTheBufferAndDisposedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recreationClearsTheBufferAndDisposedCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=losingWindowFocusRejectsRetainedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stack=java.lang.RuntimeException: Can't create handler inside thread Thread[Instr: androidx.test.runner.AndroidJUnitRunner,5,main] that has not called Looper.prepare() + at android.os.Handler.(Handler.java:231) + at android.os.Handler.(Handler.java:133) + at android.app.Dialog.(Dialog.java:138) + at android.app.Dialog.(Dialog.java:171) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.losingWindowFocusRejectsRetainedCopy(ExtensionPasteCopyDeviceTest.kt:381) + +INSTRUMENTATION_STATUS: stream= +Error in losingWindowFocusRejectsRetainedCopy(dev.tinycast.android.ExtensionPasteCopyDeviceTest): +java.lang.RuntimeException: Can't create handler inside thread Thread[Instr: androidx.test.runner.AndroidJUnitRunner,5,main] that has not called Looper.prepare() + at android.os.Handler.(Handler.java:231) + at android.os.Handler.(Handler.java:133) + at android.app.Dialog.(Dialog.java:138) + at android.app.Dialog.(Dialog.java:171) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.losingWindowFocusRejectsRetainedCopy(ExtensionPasteCopyDeviceTest.kt:381) + +INSTRUMENTATION_STATUS: test=losingWindowFocusRejectsRetainedCopy +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=returnAndEscapeCancelWithoutCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=returnAndEscapeCancelWithoutCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=preferencesDisposalAndHiddenRequestsCannotCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=preferencesDisposalAndHiddenRequestsCannotCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=uncaughtPasteFailureStillRequiresExplicitCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=uncaughtPasteFailureStillRequiresExplicitCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=invalidRequestsClearPriorOutputWithoutCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=11 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Assert failed: The component is not displayed! + at androidx.compose.ui.test.AssertionsKt.assertIsDisplayed(Assertions.kt:34) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.invalidRequestsClearPriorOutputWithoutCopy(ExtensionPasteCopyDeviceTest.kt:353) + +INSTRUMENTATION_STATUS: stream= +Error in invalidRequestsClearPriorOutputWithoutCopy(dev.tinycast.android.ExtensionPasteCopyDeviceTest): +java.lang.AssertionError: Assert failed: The component is not displayed! + at androidx.compose.ui.test.AssertionsKt.assertIsDisplayed(Assertions.kt:34) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.invalidRequestsClearPriorOutputWithoutCopy(ExtensionPasteCopyDeviceTest.kt:353) + +INSTRUMENTATION_STATUS: test=invalidRequestsClearPriorOutputWithoutCopy +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 188 +There were 2 failures: +1) losingWindowFocusRejectsRetainedCopy(dev.tinycast.android.ExtensionPasteCopyDeviceTest) +java.lang.RuntimeException: Can't create handler inside thread Thread[Instr: androidx.test.runner.AndroidJUnitRunner,5,main] that has not called Looper.prepare() + at android.os.Handler.(Handler.java:231) + at android.os.Handler.(Handler.java:133) + at android.app.Dialog.(Dialog.java:138) + at android.app.Dialog.(Dialog.java:171) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.losingWindowFocusRejectsRetainedCopy(ExtensionPasteCopyDeviceTest.kt:381) +2) invalidRequestsClearPriorOutputWithoutCopy(dev.tinycast.android.ExtensionPasteCopyDeviceTest) +java.lang.AssertionError: Assert failed: The component is not displayed! + at androidx.compose.ui.test.AssertionsKt.assertIsDisplayed(Assertions.kt:34) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.invalidRequestsClearPriorOutputWithoutCopy(ExtensionPasteCopyDeviceTest.kt:353) + +FAILURES!!! +Tests run: 11, Failures: 2 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/runner.json new file mode 100644 index 00000000..6d2f2826 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/runner.json @@ -0,0 +1,106 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest", + "expected": 13, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 13, + "tests_completed": true, + "owned_extension_count": 13, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/state.json b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/state.json new file mode 100644 index 00000000..5babbbab --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "tablet", + "font": 1, + "method": null, + "expected": 13, + "passes": 13, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 13 +} diff --git a/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/tests.log new file mode 100644 index 00000000..b47ffa9a --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-full-tablet100-v6/tests.log @@ -0,0 +1,191 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=replacementRejectsQueuedCopyBeforeRecomposition +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=replacementRejectsQueuedCopyBeforeRecomposition +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=sameSessionReplacementCannotCopyThePriorOutput +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=sameSessionReplacementCannotCopyThePriorOutput +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=sourceReplacementClearsOutputBeforeAnyQueuedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=sourceReplacementClearsOutputBeforeAnyQueuedCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=closingOtherEnginesCannotClearTheCurrentOwner +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=closingOtherEnginesCannotClearTheCurrentOwner +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recreationClearsTheBufferAndDisposedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recreationClearsTheBufferAndDisposedCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=losingWindowFocusRejectsRetainedCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=losingWindowFocusRejectsRetainedCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=returnAndEscapeCancelWithoutCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=returnAndEscapeCancelWithoutCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=preferencesDisposalAndHiddenRequestsCannotCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=preferencesDisposalAndHiddenRequestsCannotCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=uncaughtPasteFailureStillRequiresExplicitCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=uncaughtPasteFailureStillRequiresExplicitCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=invalidRequestsClearPriorOutputWithoutCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=invalidRequestsClearPriorOutputWithoutCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=13 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=portableNullNormalizationIsNotARawNullRequest +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=13 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=13 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=portableNullNormalizationIsNotARawNullRequest +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 197.845 + +OK (13 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/runner.json new file mode 100644 index 00000000..eb3f8046 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/runner.json @@ -0,0 +1,112 @@ +{ + "completed": false, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "landscape", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 0, + "tests_completed": false, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/state.json b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/state.json new file mode 100644 index 00000000..10f98a5d --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": false, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "landscape", + "font": 2.0, + "method": "keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "passes": 0, + "runner_exit_code": 1, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/tests.log new file mode 100644 index 00000000..571517fd --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v6/tests.log @@ -0,0 +1,86 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Failed: assertExists. +The node is no longer in the tree, last known semantics: +Node #171 at (l=1031.0, t=647.0, r=1820.0, b=800.0)px, Tag: 'extension-primary' +ContentDescription = '[Try owned paste]' +Role = 'Button' +Focused = 'false' +Text = '[Try owned paste]' +Actions = [OnClick, RequestFocus, SetTextSubstitution, ShowTextSubstitution, ClearTextSubstitution, GetTextLayoutResult] +MergeDescendants = 'true' +Has 1 sibling +Original selector: TestTag = 'extension-primary' + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:165) + 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.ExtensionPasteCopyDeviceTest.tap(ExtensionPasteCopyDeviceTest.kt:258) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pending(ExtensionPasteCopyDeviceTest.kt:227) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.keyboardCopyHidesImeAndEscapeReturns(ExtensionPasteCopyDeviceTest.kt:436) + +INSTRUMENTATION_STATUS: stream= +Error in keyboardCopyHidesImeAndEscapeReturns(dev.tinycast.android.ExtensionPasteCopyDeviceTest): +java.lang.AssertionError: Failed: assertExists. +The node is no longer in the tree, last known semantics: +Node #171 at (l=1031.0, t=647.0, r=1820.0, b=800.0)px, Tag: 'extension-primary' +ContentDescription = '[Try owned paste]' +Role = 'Button' +Focused = 'false' +Text = '[Try owned paste]' +Actions = [OnClick, RequestFocus, SetTextSubstitution, ShowTextSubstitution, ClearTextSubstitution, GetTextLayoutResult] +MergeDescendants = 'true' +Has 1 sibling +Original selector: TestTag = 'extension-primary' + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:165) + 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.ExtensionPasteCopyDeviceTest.tap(ExtensionPasteCopyDeviceTest.kt:258) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pending(ExtensionPasteCopyDeviceTest.kt:227) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.keyboardCopyHidesImeAndEscapeReturns(ExtensionPasteCopyDeviceTest.kt:436) + +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 16.865 +There was 1 failure: +1) keyboardCopyHidesImeAndEscapeReturns(dev.tinycast.android.ExtensionPasteCopyDeviceTest) +java.lang.AssertionError: Failed: assertExists. +The node is no longer in the tree, last known semantics: +Node #171 at (l=1031.0, t=647.0, r=1820.0, b=800.0)px, Tag: 'extension-primary' +ContentDescription = '[Try owned paste]' +Role = 'Button' +Focused = 'false' +Text = '[Try owned paste]' +Actions = [OnClick, RequestFocus, SetTextSubstitution, ShowTextSubstitution, ClearTextSubstitution, GetTextLayoutResult] +MergeDescendants = 'true' +Has 1 sibling +Original selector: TestTag = 'extension-primary' + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:165) + 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.ExtensionPasteCopyDeviceTest.tap(ExtensionPasteCopyDeviceTest.kt:258) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pending(ExtensionPasteCopyDeviceTest.kt:227) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.keyboardCopyHidesImeAndEscapeReturns(ExtensionPasteCopyDeviceTest.kt:436) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/runner.json b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/runner.json new file mode 100644 index 00000000..2f1b61d2 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/runner.json @@ -0,0 +1,113 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "landscape", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "runner_sha256": "7fedf586b094eb01160878d0af4e5529b681d2ac95ee2ebb34b52422d14c18a7", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "paste_copy_legacy_reveal": false, + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/state.json b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/state.json new file mode 100644 index 00000000..0b564e40 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "collector_sha256": "e14f8a9d04a456d6dd5c94a1e688eba11b022d17fd827aac68ae1d129efc71e1", + "layout": "landscape", + "font": 2.0, + "method": "keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/tests.log b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/tests.log new file mode 100644 index 00000000..82a5280b --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-landscape200-v7/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 17.131 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/runner.json new file mode 100644 index 00000000..f40cccfd --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/runner.json @@ -0,0 +1,112 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/state.json b/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/state.json new file mode 100644 index 00000000..fe98e9f0 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "phone", + "font": 2.0, + "method": "keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/tests.log new file mode 100644 index 00000000..0f698e38 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-phone200-v6/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 9.254 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/runner.json new file mode 100644 index 00000000..2998aac3 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/runner.json @@ -0,0 +1,106 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/state.json b/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/state.json new file mode 100644 index 00000000..72df7ad1 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "tablet", + "font": 2.0, + "method": "keyboardCopyHidesImeAndEscapeReturns", + "expected": 1, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/tests.log new file mode 100644 index 00000000..86770dd5 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-keyboard-tablet200-v6/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=keyboardCopyHidesImeAndEscapeReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 18.456 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/runner.json new file mode 100644 index 00000000..b0a1c4b6 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/runner.json @@ -0,0 +1,112 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "landscape", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#pointerCopyIsExactOnceAndReturns", + "expected": 1, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/state.json b/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/state.json new file mode 100644 index 00000000..ac088cab --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "landscape", + "font": 2.0, + "method": "pointerCopyIsExactOnceAndReturns", + "expected": 1, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/tests.log new file mode 100644 index 00000000..2bf6dd2a --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-landscape200-v6/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 10.689 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/runner.json new file mode 100644 index 00000000..71ebf872 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/runner.json @@ -0,0 +1,112 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#pointerCopyIsExactOnceAndReturns", + "expected": 1, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/state.json b/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/state.json new file mode 100644 index 00000000..f96c619b --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "phone", + "font": 2.0, + "method": "pointerCopyIsExactOnceAndReturns", + "expected": 1, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/tests.log new file mode 100644 index 00000000..29d7de9f --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-phone200-v6/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 12.428 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/runner.json b/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/runner.json new file mode 100644 index 00000000..a128bbf6 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/runner.json @@ -0,0 +1,106 @@ +{ + "completed": false, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#pointerCopyIsExactOnceAndReturns", + "expected": 1, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "69bdc18400ec48bd09278a45bd7b2660252eeff637e93bec4c661049b03a054a", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 0, + "tests_completed": false, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/state.json b/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/state.json new file mode 100644 index 00000000..2b983f63 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/state.json @@ -0,0 +1,23 @@ +{ + "completed": false, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "3501a79f9ce2d87d9abccd6504ce6f04b565dfe1", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "69bdc18400ec48bd09278a45bd7b2660252eeff637e93bec4c661049b03a054a", + "collector_sha256": "e071b0e8e361696e818e71ea9292db836818b4143b03b42441921d05aa576bdb", + "layout": "tablet", + "font": 1, + "method": "pointerCopyIsExactOnceAndReturns", + "expected": 1, + "passes": 0, + "runner_exit_code": 1, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/tests.log b/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/tests.log new file mode 100644 index 00000000..5f36d2af --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-tablet100-v3/tests.log @@ -0,0 +1,53 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: expected:<1> but was:<2> + 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.ExtensionPasteCopyDeviceTest.copyExpected(ExtensionPasteCopyDeviceTest.kt:217) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.copyExpected$default(ExtensionPasteCopyDeviceTest.kt:213) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pointerCopyIsExactOnceAndReturns(ExtensionPasteCopyDeviceTest.kt:293) + +INSTRUMENTATION_STATUS: stream= +Error in pointerCopyIsExactOnceAndReturns(dev.tinycast.android.ExtensionPasteCopyDeviceTest): +java.lang.AssertionError: expected:<1> but was:<2> + 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.ExtensionPasteCopyDeviceTest.copyExpected(ExtensionPasteCopyDeviceTest.kt:217) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.copyExpected$default(ExtensionPasteCopyDeviceTest.kt:213) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pointerCopyIsExactOnceAndReturns(ExtensionPasteCopyDeviceTest.kt:293) + +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 17.465 +There was 1 failure: +1) pointerCopyIsExactOnceAndReturns(dev.tinycast.android.ExtensionPasteCopyDeviceTest) +java.lang.AssertionError: expected:<1> but was:<2> + 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.ExtensionPasteCopyDeviceTest.copyExpected(ExtensionPasteCopyDeviceTest.kt:217) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.copyExpected$default(ExtensionPasteCopyDeviceTest.kt:213) + at dev.tinycast.android.ExtensionPasteCopyDeviceTest.pointerCopyIsExactOnceAndReturns(ExtensionPasteCopyDeviceTest.kt:293) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/runner.json b/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/runner.json new file mode 100644 index 00000000..36b5a9ff --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/runner.json @@ -0,0 +1,106 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 2.0, + "classes": "dev.tinycast.android.ExtensionPasteCopyDeviceTest#pointerCopyIsExactOnceAndReturns", + "expected": 1, + "runner_sha256": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 1, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/state.json b/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/state.json new file mode 100644 index 00000000..84432cac --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/state.json @@ -0,0 +1,23 @@ +{ + "completed": true, + "scope": "Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "collector_sha256": "0d52ca0c425abd6c9fa6647c1694c3a239fa55f469333ac17ede5fedcd8db7db", + "layout": "tablet", + "font": 2.0, + "method": "pointerCopyIsExactOnceAndReturns", + "expected": 1, + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "case_records": 1 +} diff --git a/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/tests.log b/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/tests.log new file mode 100644 index 00000000..852e5962 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/owned-unicode-tablet200-v6/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionPasteCopyDeviceTest: +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionPasteCopyDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=pointerCopyIsExactOnceAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 18.133 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/runner.json b/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/runner.json new file mode 100644 index 00000000..946074bc --- /dev/null +++ b/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/runner.json @@ -0,0 +1,106 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1.0, + "classes": "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "expected": 1, + "runner_sha256": "2c13b94e4dfe29ba2f8726bbb79bf2d8f147fab13847c66a50d1603a0f54b510", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": { + "translate": "9ecbb40257fbc1d0d32778efa95c1392fc6c46d03eb6099e3995a73b6e16eec2" + }, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-paste", + "expect_completion_return": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "636a7a10f664f29e64d61a6dc8f98ce596080b4dfb13eac5b54057ab172475d8", + "test_apk_sha256": "7379458fa7785309cf8184c5865801d77345b491fb7c333041677fc4638a127f", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 1, + "tests_completed": true, + "owned_extension_count": 3, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/state.json b/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/state.json new file mode 100644 index 00000000..e1219262 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/state.json @@ -0,0 +1,19 @@ +{ + "completed": true, + "scope": "Intermediate app: real paste-rejection/native-offer smoke only; no explicit Copy or final-runtime credit", + "runtime_source_commit": "235fe997aa5a0d07a3b535abc3d406ef93c52d44", + "test_source_commit": "77bec8fcfcc501c58707db2d939236943a14f479", + "app_sha256": "636a7a10f664f29e64d61a6dc8f98ce596080b4dfb13eac5b54057ab172475d8", + "test_apk_sha256": "7379458fa7785309cf8184c5865801d77345b491fb7c333041677fc4638a127f", + "collector_sha256": "6e13f2fb0aadc17c40ec6a67e89aa7534fafae73c596db9dd402dbe9e779b84f", + "passes": 1, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528, + "workflow_outcome": "partial-paste-unsupported" +} diff --git a/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/tests.log b/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/tests.log new file mode 100644 index 00000000..a55a662e --- /dev/null +++ b/docs/validation/paste-copy/cohorts/paste-pending-tablet100-v1/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 12.934 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/runner.json b/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/runner.json new file mode 100644 index 00000000..a80d902b --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/runner.json @@ -0,0 +1,113 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 1, + "classes": "dev.tinycast.android.ExtensionFormDeviceTest#nativeConfigurationEditsValidateCancelAndRun,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnRejectsDisposedAndReplacedCallbacks,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape,dev.tinycast.android.ExtensionFormDeviceTest#correctingAnErrorSubmitsExactUnicodeOnce,dev.tinycast.android.ExtensionDetailDeviceTest#listTouchDetailPreservesQuerySelectionExactCopyAndCaller,dev.tinycast.android.ExtensionDetailDeviceTest#recreationStartsAnewOwnerAndRejectsThePriorNativeCallback,dev.tinycast.android.ReviewedTextDeviceTest#selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns,dev.tinycast.android.ReviewedTextDeviceTest#ordinaryCommandDoesNotReceiveClipboardAsSelectedText,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#resetCloseErrorAndOrdinaryLaunchRevokeInput,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#staleRuntimeCannotPublishOrWriteAfterReplacement,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#rejectedAsyncAndSyncHostCallsReleaseApprovedInput", + "expected": 12, + "runner_sha256": "7fedf586b094eb01160878d0af4e5529b681d2ac95ee2ebb34b52422d14c18a7", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "paste_copy_legacy_reveal": false, + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 12, + "tests_completed": true, + "owned_extension_count": 14, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/state.json b/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/state.json new file mode 100644 index 00000000..605c465b --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/state.json @@ -0,0 +1,21 @@ +{ + "completed": true, + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "collector_sha256": "830c55ba75a0074f73c0001e845c798a7d098b3ce27b1daac1eb70617b51348c", + "layout": "phone", + "group": "callers", + "classes": "dev.tinycast.android.ExtensionFormDeviceTest#nativeConfigurationEditsValidateCancelAndRun,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnRejectsDisposedAndReplacedCallbacks,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape,dev.tinycast.android.ExtensionFormDeviceTest#correctingAnErrorSubmitsExactUnicodeOnce,dev.tinycast.android.ExtensionDetailDeviceTest#listTouchDetailPreservesQuerySelectionExactCopyAndCaller,dev.tinycast.android.ExtensionDetailDeviceTest#recreationStartsAnewOwnerAndRejectsThePriorNativeCallback,dev.tinycast.android.ReviewedTextDeviceTest#selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns,dev.tinycast.android.ReviewedTextDeviceTest#ordinaryCommandDoesNotReceiveClipboardAsSelectedText,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#resetCloseErrorAndOrdinaryLaunchRevokeInput,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#staleRuntimeCannotPublishOrWriteAfterReplacement,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#rejectedAsyncAndSyncHostCallsReleaseApprovedInput", + "expected": 12, + "passes": 12, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528 +} diff --git a/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/tests.log b/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/tests.log new file mode 100644 index 00000000..837dc1f4 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-callers-phone100-v7/tests.log @@ -0,0 +1,180 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionFormDeviceTest: +INSTRUMENTATION_STATUS: test=nativeConfigurationEditsValidateCancelAndRun +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=nativeConfigurationEditsValidateCancelAndRun +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=ownedNoViewReturnRejectsDisposedAndReplacedCallbacks +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ownedNoViewReturnRejectsDisposedAndReplacedCallbacks +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=correctingAnErrorSubmitsExactUnicodeOnce +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=correctingAnErrorSubmitsExactUnicodeOnce +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionDetailDeviceTest: +INSTRUMENTATION_STATUS: test=listTouchDetailPreservesQuerySelectionExactCopyAndCaller +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=listTouchDetailPreservesQuerySelectionExactCopyAndCaller +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recreationStartsAnewOwnerAndRejectsThePriorNativeCallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recreationStartsAnewOwnerAndRejectsThePriorNativeCallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=ordinaryCommandDoesNotReceiveClipboardAsSelectedText +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ordinaryCommandDoesNotReceiveClipboardAsSelectedText +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextLifecycleDeviceTest: +INSTRUMENTATION_STATUS: test=staleRuntimeCannotPublishOrWriteAfterReplacement +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=staleRuntimeCannotPublishOrWriteAfterReplacement +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=rejectedAsyncAndSyncHostCallsReleaseApprovedInput +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=rejectedAsyncAndSyncHostCallsReleaseApprovedInput +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=resetCloseErrorAndOrdinaryLaunchRevokeInput +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=resetCloseErrorAndOrdinaryLaunchRevokeInput +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 71.701 + +OK (12 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/runner.json b/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/runner.json new file mode 100644 index 00000000..236491f9 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/runner.json @@ -0,0 +1,107 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1, + "classes": "dev.tinycast.android.ExtensionFormDeviceTest#nativeConfigurationEditsValidateCancelAndRun,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnRejectsDisposedAndReplacedCallbacks,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape,dev.tinycast.android.ExtensionFormDeviceTest#correctingAnErrorSubmitsExactUnicodeOnce,dev.tinycast.android.ExtensionDetailDeviceTest#listTouchDetailPreservesQuerySelectionExactCopyAndCaller,dev.tinycast.android.ExtensionDetailDeviceTest#recreationStartsAnewOwnerAndRejectsThePriorNativeCallback,dev.tinycast.android.ReviewedTextDeviceTest#selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns,dev.tinycast.android.ReviewedTextDeviceTest#ordinaryCommandDoesNotReceiveClipboardAsSelectedText,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#resetCloseErrorAndOrdinaryLaunchRevokeInput,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#staleRuntimeCannotPublishOrWriteAfterReplacement,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#rejectedAsyncAndSyncHostCallsReleaseApprovedInput", + "expected": 12, + "runner_sha256": "7fedf586b094eb01160878d0af4e5529b681d2ac95ee2ebb34b52422d14c18a7", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "paste_copy_legacy_reveal": false, + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 12, + "tests_completed": true, + "owned_extension_count": 14, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/state.json b/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/state.json new file mode 100644 index 00000000..b9b907f6 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/state.json @@ -0,0 +1,21 @@ +{ + "completed": true, + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "collector_sha256": "830c55ba75a0074f73c0001e845c798a7d098b3ce27b1daac1eb70617b51348c", + "layout": "tablet", + "group": "callers", + "classes": "dev.tinycast.android.ExtensionFormDeviceTest#nativeConfigurationEditsValidateCancelAndRun,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnRejectsDisposedAndReplacedCallbacks,dev.tinycast.android.ExtensionFormDeviceTest#ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape,dev.tinycast.android.ExtensionFormDeviceTest#correctingAnErrorSubmitsExactUnicodeOnce,dev.tinycast.android.ExtensionDetailDeviceTest#listTouchDetailPreservesQuerySelectionExactCopyAndCaller,dev.tinycast.android.ExtensionDetailDeviceTest#recreationStartsAnewOwnerAndRejectsThePriorNativeCallback,dev.tinycast.android.ReviewedTextDeviceTest#selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns,dev.tinycast.android.ReviewedTextDeviceTest#ordinaryCommandDoesNotReceiveClipboardAsSelectedText,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#resetCloseErrorAndOrdinaryLaunchRevokeInput,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#staleRuntimeCannotPublishOrWriteAfterReplacement,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime,dev.tinycast.android.ReviewedTextLifecycleDeviceTest#rejectedAsyncAndSyncHostCallsReleaseApprovedInput", + "expected": 12, + "passes": 12, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528 +} diff --git a/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/tests.log b/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/tests.log new file mode 100644 index 00000000..d01b90ba --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-callers-tablet100-v7/tests.log @@ -0,0 +1,180 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionFormDeviceTest: +INSTRUMENTATION_STATUS: test=nativeConfigurationEditsValidateCancelAndRun +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=nativeConfigurationEditsValidateCancelAndRun +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=ownedNoViewReturnRejectsDisposedAndReplacedCallbacks +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ownedNoViewReturnRejectsDisposedAndReplacedCallbacks +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=correctingAnErrorSubmitsExactUnicodeOnce +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionFormDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=correctingAnErrorSubmitsExactUnicodeOnce +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionDetailDeviceTest: +INSTRUMENTATION_STATUS: test=listTouchDetailPreservesQuerySelectionExactCopyAndCaller +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=listTouchDetailPreservesQuerySelectionExactCopyAndCaller +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recreationStartsAnewOwnerAndRejectsThePriorNativeCallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionDetailDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recreationStartsAnewOwnerAndRejectsThePriorNativeCallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextDeviceTest: +INSTRUMENTATION_STATUS: test=ordinaryCommandDoesNotReceiveClipboardAsSelectedText +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ordinaryCommandDoesNotReceiveClipboardAsSelectedText +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ReviewedTextLifecycleDeviceTest: +INSTRUMENTATION_STATUS: test=staleRuntimeCannotPublishOrWriteAfterReplacement +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=9 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=staleRuntimeCannotPublishOrWriteAfterReplacement +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=rejectedAsyncAndSyncHostCallsReleaseApprovedInput +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=10 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=rejectedAsyncAndSyncHostCallsReleaseApprovedInput +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=resetCloseErrorAndOrdinaryLaunchRevokeInput +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=11 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=resetCloseErrorAndOrdinaryLaunchRevokeInput +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ReviewedTextLifecycleDeviceTest +INSTRUMENTATION_STATUS: current=12 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=12 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 112.434 + +OK (12 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/runner.json b/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/runner.json new file mode 100644 index 00000000..861eed77 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/runner.json @@ -0,0 +1,113 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "phone", + "font_scale": 1, + "classes": "dev.tinycast.android.ExtensionCommandHandoffDeviceTest", + "expected": 8, + "runner_sha256": "7fedf586b094eb01160878d0af4e5529b681d2ac95ee2ebb34b52422d14c18a7", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "paste_copy_legacy_reveal": false, + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 8, + "tests_completed": true, + "owned_extension_count": 8, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "size": { + "passed": true + }, + "density": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/state.json b/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/state.json new file mode 100644 index 00000000..194be36a --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/state.json @@ -0,0 +1,21 @@ +{ + "completed": true, + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "collector_sha256": "830c55ba75a0074f73c0001e845c798a7d098b3ce27b1daac1eb70617b51348c", + "layout": "phone", + "group": "handoff", + "classes": "dev.tinycast.android.ExtensionCommandHandoffDeviceTest", + "expected": 8, + "passes": 8, + "runner_exit_code": 0, + "cleanup_checks": 20, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528 +} diff --git a/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/tests.log b/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/tests.log new file mode 100644 index 00000000..a7abe616 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-handoff-phone100-v7/tests.log @@ -0,0 +1,121 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionCommandHandoffDeviceTest: +INSTRUMENTATION_STATUS: test=queuedRequestCannotLaunchAfterParentCancellation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=queuedRequestCannotLaunchAfterParentCancellation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=ordinaryRelaunchClearsContextAndFallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ordinaryRelaunchClearsContextAndFallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=returnedCommandRejectsDisposedPreferencesCallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=returnedCommandRejectsDisposedPreferencesCallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=acknowledgementRevokesParentBeforeChildComposition +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=acknowledgementRevokesParentBeforeChildComposition +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recreatedChildRejectsDisposedBackCallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recreatedChildRejectsDisposedBackCallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=duplicateLaunchRequestsTransferOnlyOnce +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=duplicateLaunchRequestsTransferOnlyOnce +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=contextArgumentsAndFallbackReachChildAndCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=contextArgumentsAndFallbackReachChildAndCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=invalidRequestsKeepTheParentAndClipboard +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=invalidRequestsKeepTheParentAndClipboard +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 46.525 + +OK (8 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/runner.json b/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/runner.json new file mode 100644 index 00000000..7d2a7c5c --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/runner.json @@ -0,0 +1,107 @@ +{ + "completed": true, + "serial": "emulator-5580", + "avd": "Tinycast_Tablet_API_36", + "layout": "tablet", + "font_scale": 1, + "classes": "dev.tinycast.android.ExtensionCommandHandoffDeviceTest", + "expected": 8, + "runner_sha256": "7fedf586b094eb01160878d0af4e5529b681d2ac95ee2ebb34b52422d14c18a7", + "archive_sha256": "fc420406a59251daee0c9af32e216026724631480b3a4e2f5d65d0c507b09a58", + "typed_workflow_archive_sha256": {}, + "cleanup_helper_sha256": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "clipboard_helper_sha256": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "document_helper_sha256": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "instrumentation_excluded_tests": [ + "dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure", + "dev.tinycast.android.ReviewedTextDeviceTest#desktopMenuBarIsUnavailableInReviewedChooserAndReturnsToSource" + ], + "reviewed_json_command": "formatSelectionAndShow", + "reviewed_translation_command": "instant-translate-copy", + "expect_completion_return": false, + "expect_paste_copy_fallback": false, + "original_size": "Physical size: 1920x1200", + "original_density": "Physical density: 240", + "original_font_scale": "1.0", + "paste_copy_legacy_reveal": false, + "recovery_lease": "files/reviewed-text-fixture-lease", + "evidence_directories": [ + "reviewed-text-evidence" + ], + "shared_regression_cohort": false, + "apk_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "installed_apks_match": true, + "clipboard_mutation_permitted": true, + "instrumentation_exit_code": 0, + "passes": 8, + "tests_completed": true, + "owned_extension_count": 8, + "cleanup": { + "stop-app": { + "passed": true + }, + "stop-owned-caller": { + "passed": true + }, + "clipboard-restored-and-verified-independently": { + "passed": true + }, + "stop-clipboard-recovery-activity": { + "passed": true + }, + "owned-fixture-data": { + "passed": true + }, + "copied-evidence": { + "passed": true + }, + "palette-backup": { + "passed": true + }, + "palette-preferences": { + "passed": true + }, + "palette-verified": { + "passed": true + }, + "emoji-backup": { + "passed": true + }, + "emoji-preferences": { + "passed": true + }, + "emoji-verified": { + "passed": true + }, + "font-scale": { + "passed": true + }, + "secure-enabled_accessibility_services": { + "passed": true + }, + "secure-accessibility_enabled": { + "passed": true + }, + "secure-show_ime_with_hard_keyboard": { + "passed": true + }, + "verify-state-and-unprivileged-identity": { + "passed": true + }, + "release-lease": { + "passed": true + } + }, + "clipboard_recovery": { + "schema_version": 1, + "phase": "snapshot-ready", + "private_backup_saved": true, + "identities_retained_privately": true + }, + "clipboard_restoration": { + "schema_version": 1, + "phase": "restored", + "identities_retained_privately": true + } +} diff --git a/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/state.json b/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/state.json new file mode 100644 index 00000000..9d0605d4 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/state.json @@ -0,0 +1,21 @@ +{ + "completed": true, + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "collector_sha256": "830c55ba75a0074f73c0001e845c798a7d098b3ce27b1daac1eb70617b51348c", + "layout": "tablet", + "group": "handoff", + "classes": "dev.tinycast.android.ExtensionCommandHandoffDeviceTest", + "expected": 8, + "passes": 8, + "runner_exit_code": 0, + "cleanup_checks": 18, + "cleanup_passed": true, + "same_boot": true, + "durable_data_unchanged": true, + "pre_existing_evidence_unchanged": true, + "durable_file_count": 12, + "evidence_file_count": 528 +} diff --git a/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/tests.log b/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/tests.log new file mode 100644 index 00000000..7be7f088 --- /dev/null +++ b/docs/validation/paste-copy/cohorts/regression-handoff-tablet100-v7/tests.log @@ -0,0 +1,121 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.ExtensionCommandHandoffDeviceTest: +INSTRUMENTATION_STATUS: test=queuedRequestCannotLaunchAfterParentCancellation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=queuedRequestCannotLaunchAfterParentCancellation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=ordinaryRelaunchClearsContextAndFallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=ordinaryRelaunchClearsContextAndFallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=returnedCommandRejectsDisposedPreferencesCallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=returnedCommandRejectsDisposedPreferencesCallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=acknowledgementRevokesParentBeforeChildComposition +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=acknowledgementRevokesParentBeforeChildComposition +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recreatedChildRejectsDisposedBackCallback +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recreatedChildRejectsDisposedBackCallback +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=duplicateLaunchRequestsTransferOnlyOnce +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=duplicateLaunchRequestsTransferOnlyOnce +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=contextArgumentsAndFallbackReachChildAndCopy +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=7 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=contextArgumentsAndFallbackReachChildAndCopy +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=invalidRequestsKeepTheParentAndClipboard +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.ExtensionCommandHandoffDeviceTest +INSTRUMENTATION_STATUS: current=8 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=8 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=invalidRequestsKeepTheParentAndClipboard +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 58.572 + +OK (8 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/paste-copy/collectors/preservation.py b/docs/validation/paste-copy/collectors/preservation.py new file mode 100644 index 00000000..6f2dc749 --- /dev/null +++ b/docs/validation/paste-copy/collectors/preservation.py @@ -0,0 +1,71 @@ +from pathlib import Path, PurePosixPath +import hashlib, io, json, subprocess, tarfile + +BASE = Path('artifacts/paste-copy') +ADB = ['/platform-tools/adb', '-s', 'emulator-5580'] +APP = 'dev.tinycast.android' + +def require(value, message): + if not value: + raise RuntimeError(message) + +def raw(*values): + return subprocess.check_output(ADB + list(values), timeout=60, stderr=subprocess.STDOUT) + +def text(*values): + return raw(*values).decode().strip() + +def absent(path): + result = subprocess.run(ADB + ['shell', 'run-as', APP, 'test', '-e', path], capture_output=True, timeout=20) + require(result.returncode in [0, 1] and not result.stdout and not result.stderr, 'Path absence is unknown') + return result.returncode == 1 + +def idle(): + require(text('shell', 'getprop', 'ro.boot.qemu.avd_name') == 'Tinycast_Tablet_API_36', 'Wrong emulator') + require(text('shell', 'id').startswith('uid=2000('), 'Privileged adbd') + require('ActiveInstrumentation{' not in text('shell', 'dumpsys', 'activity', 'processes'), 'Instrumentation active') + for path in ['files/reviewed-text-fixture-lease', 'files/reviewed-text-evidence', 'files/empty-view-fixture-lease', 'files/compatibility-batch-fixtures']: + require(absent(path), 'Prior fixture ownership or evidence remains') + +def hashes(roots): + data = raw('exec-out', 'run-as', APP, 'tar', '-cf', '-', *roots) + result = {} + with tarfile.open(fileobj=io.BytesIO(data)) as archive: + for member in archive: + path = PurePosixPath(member.name) + require(not path.is_absolute() and '..' not in path.parts, 'Unsafe snapshot member') + if member.isdir(): + continue + require(member.isfile() and member.name not in result and any(member.name.startswith(root + '/') for root in roots), 'Unexpected snapshot member') + result[member.name] = hashlib.sha256(archive.extractfile(member).read()).hexdigest() + return result + +def verify(): + idle() + counts = {} + for name in ['durable', 'evidence']: + expected = json.loads((BASE / ('private-' + name + '-before-v1.json')).read_text()) + require(text('shell', 'cat', '/proc/sys/kernel/random/boot_id') == expected['boot_id'], 'Emulator boot changed') + require(hashes(expected['roots']) == expected['hashes'], 'Pre-existing data/evidence changed') + counts[name + '_file_count'] = len(expected['hashes']) + return counts + +if __name__ == '__main__': + idle() + parent = Path('/droidcast-command-handoff-27caf3/artifacts/command-handoff') + boot = json.loads((parent / 'private-durable-before-v1.json').read_text())['boot_id'] + require(text('shell', 'cat', '/proc/sys/kernel/random/boot_id') == boot, 'Parent boot changed') + for name in ['durable', 'evidence']: + destination = BASE / ('private-' + name + '-before-v1.json') + expected = json.loads((parent / destination.name).read_text()) + current = hashes(expected['roots']) + require(current == expected['hashes'], 'Parent preservation baseline does not match') + snapshot = dict(boot_id=boot, roots=expected['roots'], hashes=current) + if destination.exists(): + require(json.loads(destination.read_text()) == snapshot, 'Existing private baseline differs') + else: + with destination.open('x') as output: + destination.chmod(0o600) + json.dump(snapshot, output, indent=2) + output.write('\n') + print(json.dumps(dict(verified=True, **verify()))) diff --git a/docs/validation/paste-copy/collectors/publish-v2.py b/docs/validation/paste-copy/collectors/publish-v2.py new file mode 100644 index 00000000..920864fd --- /dev/null +++ b/docs/validation/paste-copy/collectors/publish-v2.py @@ -0,0 +1,175 @@ +"""Publish only owned paste-copy evidence, with exact input bindings.""" +from pathlib import Path +import hashlib, json, re, subprocess, xml.etree.ElementTree as ET, zipfile + +b = Path('artifacts/paste-copy') +d = Path('docs/validation/paste-copy') +s = Path('docs/screenshots/paste-copy') +read = lambda p: json.loads(Path(p).read_text()) +sha = lambda value: hashlib.sha256(value).hexdigest() +def require(ok, message): + if not ok: + raise RuntimeError(message) +matrix = read(b/'final-matrix-v6/record.json') +continuation = read(b/'continuation-v7/record.json') +require(not matrix['completed'] and continuation['completed'], 'Historical failure or final continuation identity differs') +require(not d.exists() and not s.exists(), 'Publication exists; inspect before replacing') +positive = ['frozen-copy-'+layout+str(font)+'-v2' for layout in ['tablet','phone','landscape'] for font in [100,200]] +positive += ['owned-full-tablet100-v6', 'owned-full-phone100-v6'] +positive += [r['name'] for r in matrix['cohorts'] if r['exit_code']==0] +positive += [r['name'] for r in continuation['cohorts']] +negative = ['matched-old-tablet100-v2', 'matched-old-phone100-v2'] +gesture_negative = ['matched-legacy-reveal-landscape200-v7'] +historical = ['paste-pending-tablet100-v1', 'owned-unicode-tablet100-v3', 'owned-full-tablet100-v5','owned-keyboard-landscape200-v6'] +for name in positive + negative + gesture_negative: + require(read(b/name/'state.json')['completed'], 'Required cohort incomplete: '+name) +require(len(positive)==18 and len(set(positive))==18, 'Cohort inventory changed') +for directory in [d,s]: + directory.mkdir(parents=True) +checkpoint = dict(schema_version=1, issue=101, base_commit='987b78a7256e7fa3c6356f6699afc23d1f451a74', + runtime_source_commit='08210fa24674be924a6ebc93ce09b4fd170dfbc5', + current_test_source_commit='51de2cab70d14afb980d396288ca889685587421', + scope='Explicit Copy following rejected paste; no cross-app insertion parity', + bindings=[], projections=[], raw_capture_sets=[], retained_capture_hashes={}, cohorts=[], public_files={}) +replacements = [(str(Path.cwd()).encode(), b''), + (b'/', b'/'), + (b'', b''), + (b'/', b'/'), + (b'/', b'/'), + (b'/', b'/')] +def cleaned(data, xml=False): + for old, new in replacements: + data=data.replace(old, new.replace(b'<',b'<').replace(b'>',b'>') if xml else new) + return data +def write(path, data): + path.parent.mkdir(parents=True, exist_ok=True) + require(not path.exists(), 'Duplicate public path: '+str(path)) + require(not re.search(rb'/Users/[A-Za-z0-9_.-]+',data), 'Unredacted host path: '+str(path)) + path.write_bytes(data) +def bind(source, destination, redact=False): + original=source.read_bytes() + public=cleaned(original, destination.suffix=='.xml') if redact else original + write(destination, public) + checkpoint['bindings'].append(dict(original=str(source), original_sha256=sha(original), + public=str(destination), public_sha256=sha(public), transform='host-path-byte-redaction' if redact else 'identity')) +def project(source, destination, value, recipe): + data=(json.dumps(value, indent=2, ensure_ascii=False)+'\n').encode() + write(destination, data) + checkpoint['projections'].append(dict(original=str(source), original_sha256=sha(source.read_bytes()), + public=str(destination), public_sha256=sha(data), recipe=recipe)) +state_keys=['completed','scope','runtime_source_commit','test_source_commit','app_sha256','test_apk_sha256', + 'collector_sha256','layout','font','method','group','classes','expected','passes','runner_exit_code', + 'cleanup_checks','cleanup_passed','same_boot','durable_data_unchanged','pre_existing_evidence_unchanged', + 'durable_file_count','evidence_file_count','case_records','native_case_records','workflow_outcome','expected_negative','app'] +runner_keys=['completed','serial','avd','layout','font_scale','classes','expected','runner_sha256', + 'archive_sha256','typed_workflow_archive_sha256','cleanup_helper_sha256','clipboard_helper_sha256', + 'document_helper_sha256','instrumentation_excluded_tests','reviewed_json_command','reviewed_translation_command', + 'expect_completion_return','expect_paste_copy_fallback','original_size','original_density','original_font_scale', + 'paste_copy_legacy_reveal', + 'recovery_lease','evidence_directories','shared_regression_cohort','apk_sha256','test_apk_sha256', + 'installed_apks_match','clipboard_mutation_permitted','instrumentation_exit_code','passes','tests_completed','owned_extension_count'] +recovery_keys=['schema_version','phase','private_backup_saved','identities_retained_privately'] +def runner_projection(r): + p={k:r[k] for k in runner_keys if k in r} + p['cleanup']={name:{'passed':row['passed']} for name,row in r['cleanup'].items()} + for key in ['clipboard_recovery','clipboard_restoration']: + if key in r:p[key]={k:r[key][k] for k in recovery_keys if k in r[key]} + return p +for name in positive + negative + gesture_negative + historical: + root=b/name;state=read(root/'state.json');runner=read(root/'cohort/record.json') + require(runner['cleanup'] and all(row.get('passed') for row in runner['cleanup'].values()), 'Failed cleanup: '+name) + category='final-positive' if name in positive else 'matched-old-negative' if name in negative else 'matched-gesture-negative' if name in gesture_negative else 'historical-excluded' + checkpoint['cohorts'].append(dict(name=name, category=category, executions=runner['expected'], + passes=runner['passes'], failures=runner['expected']-runner['passes'], restoration_checks=len(runner['cleanup']), + app_sha256=runner['apk_sha256'],test_apk_sha256=runner['test_apk_sha256'])) + project(root/'state.json', d/'cohorts'/name/'state.json', {k:state[k] for k in state_keys if k in state}, dict(kind='top-level-allowlist',keys=state_keys)) + project(root/'cohort/record.json',d/'cohorts'/name/'runner.json',runner_projection(runner), + dict(kind='runner-allowlist',top_level_keys=runner_keys,recovery_keys=recovery_keys,cleanup_keys=['passed'])) + bind(root/'cohort/tests.log',d/'cohorts'/name/'tests.log',True) + for path in sorted((root/'cohort/captures').iterdir()): + if path.is_file(): + require(path.suffix in ['.json','.png','.xml'], 'Unknown capture type') + checkpoint['retained_capture_hashes'][str(path)]=sha(path.read_bytes()) + if path.name.endswith('-record.json'): + bind(path,d/'cases'/name/path.name,True) +def frame(name, pattern, label): + paths=list((b/name/'cohort/captures').glob(pattern)) + require(len(paths)==1, 'Capture selector did not identify one file: '+name+' '+pattern) + png=paths[0];stem=png.with_suffix('');files=[] + for suffix,destination in [('.png',s/(label+'.png')),('.xml',d/'frames'/(label+'.xml')),('-frame.json',d/'frames'/(label+'-frame.json'))]: + source=Path(str(stem)+suffix) + require(source.is_file(), 'Incomplete raw capture set') + bind(source,destination);files.append(str(destination)) + checkpoint['raw_capture_sets'].append(dict(label=label,cohort=name,original_stem=str(stem),files=files)) +for layout in ['tablet','phone','landscape']: + for font in [100,200]: + name='frozen-copy-'+layout+str(font)+'-v2' + for phase,label in [('paste-fallback-before-copy','pending'),('paste-fallback-exact-copy','copied'),('translation-context-return','source-return')]: + frame(name,'*-'+phase+'.png',layout+str(font)+'-'+label) +for layout in ['tablet','phone']: + frame('matched-old-'+layout+'100-v2','*-translation-paste-unavailable.png',layout+'100-before') +frame('frozen-copy-phone100-v2','*-translation-caller.png','phone100-source-before') +owned=[('owned-full-tablet100-v6','*pointercopyisexactonceandreturns-unicode-exact-copy.png','tablet100-unicode-copy'), + ('owned-full-tablet100-v6','*uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-offer.png','tablet100-uncaught-offer'), + ('owned-full-tablet100-v6','*uncaughtpastefailurestillrequiresexplicitcopy-uncaught-rejection-explicit-copy.png','tablet100-uncaught-copy'), + ('owned-full-tablet100-v6','*sourcereplacementclearsoutputbeforeanyqueuedcopy-new-source-without-old-output.png','tablet100-new-source'), + ('owned-full-phone100-v6','*pointercopyisexactonceandreturns-unicode-exact-copy.png','phone100-unicode-copy'), + ('owned-full-phone100-v6','*pointercopyisexactonceandreturns-duplicate-sentinel-preserved.png','phone100-post-copy-sentinel-probe'), + ('owned-full-phone100-v6','*recreationclearsthebufferanddisposedcopy-recreated-without-old-offer.png','phone100-recreated'), + ('owned-full-phone100-v6','*preferencesdisposalandhiddenrequestscannotcopy-restored-parent-without-output.png','phone100-parent-restored')] +for name,pattern,label in owned:frame(name,pattern,label) +for layout in ['tablet','phone','landscape']: + frame('owned-keyboard-'+layout+'200-'+('v7' if layout=='landscape' else 'v6'), '*-copy-keyboard-focused.png',layout+'200-keyboard-focus') +for name,prefix in [('matched-legacy-reveal-landscape200-v7','landscape200-legacy'),('owned-keyboard-landscape200-v7','landscape200-interior')]: + for phase in ['before','after']:frame(name,'*-reveal-1-'+phase+'.png',prefix+'-reveal-'+phase) +frame('owned-keyboard-landscape200-v6','*-failure.png','landscape200-original-keyboard-failure') +frame('regression-callers-phone100-v7','*correctinganerrorsubmitsexactunicodeonce-corrected-destination.png','phone100-form-regression') +frame('regression-callers-phone100-v7','*listtouchdetailpreservesqueryselectionexactcopyandcaller-selected-detail.png','phone100-detail-regression') +frame('regression-handoff-phone100-v7','*contextargumentsandfallbackreachchildandcopy-child-context.png','phone100-handoff-regression') +for name in ['candidate-v1','candidate-v2','owned-harness-v3','owned-harness-v5','owned-harness-v6','owned-harness-v7']: + identity=read(b/name/'identity.json') + commit=identity.get('source_commit',identity.get('test_source_commit')) + for path,digest in identity['source_hashes'].items(): + data=subprocess.check_output(['git','show',commit+':'+path]) + require(sha(data)==digest, 'Historical source mismatch: '+name+' '+path) + bind(b/name/'identity.json',d/'identities'/(name+'.json')) +for path in [b/'candidate-v2/benchmark/identity.json',b/'owned-harness-v7/final-checks/record.json']: + bind(path,d/'checks'/('initial-benchmark.json' if path.name=='identity.json' else 'current-benchmark-lint.json')) +for path in sorted((b/'candidate-v2/jvm-results').glob('*.xml')): + bind(path,d/'checks/jvm'/path.name,True) +for path in sorted((b/'owned-harness-v7/final-checks').glob('*.xml')): + bind(path,d/'checks'/path.name,True) +logs=['candidate-v2-build.log','candidate-v2-benchmark-build.log','owned-harness-v6-build.log', + 'owned-harness-v6-benchmark-lint.log','owned-harness-v6-benchmark-lint-v2.log', + 'python-owned-v3.log','python-owned-optimized-v3.log','owned-harness-v3-build.log','owned-harness-v5-build.log', + 'owned-harness-v7-build.log','owned-harness-v7-benchmark-lint.log','python-reveal-v7.log','python-reveal-optimized-v7.log'] +for name in logs:bind(b/name,d/'checks'/name,True) +for name in ['run-frozen-paste-v2.py','run-owned-v3.py','run-owned-v5.py','run-owned-v6.py', + 'run-regressions-v6.py','run-final-matrix-v6.py','preservation.py','publish-v2.py']: + bind(b/name,d/'collectors'/name,True) +for name in ['run-owned-v7.py','run-regressions-v7.py','run-continuation-v7.py']: + bind(b/name,d/'collectors'/name,True) +for name in ['final-matrix-v6','continuation-v7']: + bind(b/name/'record.json',d/'pipelines'/(name+'.json')) +bind(b/'apk-manifest-inspection-v1.json',d/'checks/apk-manifest-inspection.json') +checkpoint['totals']={} +for category in ['final-positive','matched-old-negative','matched-gesture-negative','historical-excluded']: + rows=[r for r in checkpoint['cohorts'] if r['category']==category] + checkpoint['totals'][category]=dict(cohorts=len(rows),**{key:sum(r[key] for r in rows) for key in ['executions','passes','failures','restoration_checks']}) +old=Path('/droidcast-command-handoff-27caf3/artifacts/command-handoff/build-candidate-v2/candidate/app-debug.apk') +with zipfile.ZipFile(old) as before, zipfile.ZipFile(b/'candidate-v2/app-debug.apk') as after: + assets=[p for p in after.namelist() if p.startswith('assets/') and not p.endswith('/')] + require(len(assets)==10 and all(before.read(p)==after.read(p) for p in assets),'Packaged assets changed') + checkpoint['unchanged_packaged_assets']={p:sha(after.read(p)) for p in assets} +with zipfile.ZipFile(b/'owned-harness-v6/app-debug-androidTest.apk') as before, zipfile.ZipFile(b/'owned-harness-v7/app-debug-androidTest.apk') as after: + names=set(before.namelist())|set(after.namelist()) + changed=sorted(p for p in names if p not in before.namelist() or p not in after.namelist() or before.read(p)!=after.read(p)) + require(changed==['classes3.dex','classes4.dex'],'Instrumentation payload difference changed') + checkpoint['current_harness_payload_difference']=changed +for path in sorted(list(d.rglob('*'))+list(s.rglob('*'))): + if path.is_file(): + if path.suffix=='.xml':ET.fromstring(path.read_bytes()) + checkpoint['public_files'][str(path)]=sha(path.read_bytes()) +(d/'checkpoint.json').write_text(json.dumps(checkpoint,indent=2,ensure_ascii=False)+'\n') +print(json.dumps(dict(totals=checkpoint['totals'],public_files=len(checkpoint['public_files']), + raw_capture_sets=len(checkpoint['raw_capture_sets']),retained_capture_hashes=len(checkpoint['retained_capture_hashes'])),indent=2)) diff --git a/docs/validation/paste-copy/collectors/run-continuation-v7.py b/docs/validation/paste-copy/collectors/run-continuation-v7.py new file mode 100644 index 00000000..248a6962 --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-continuation-v7.py @@ -0,0 +1,15 @@ +from pathlib import Path +import hashlib,json,subprocess,sys +base=Path('artifacts/paste-copy');out=base/'continuation-v7';out.mkdir(exist_ok=False) +state=dict(completed=False,collector_sha256=hashlib.sha256(Path(__file__).read_bytes()).hexdigest(),cohorts=[],prior_pipeline='final-matrix-v6 remains failed; four later planned cohorts were unrun') +def save():(out/'record.json').write_text(json.dumps(state,indent=2)+'\n') +commands=[('owned-keyboard-landscape200-v7',['run-owned-v7.py','--name','owned-keyboard-landscape200-v7','--method','keyboardCopyHidesImeAndEscapeReturns','--layout','landscape','--font','2'])] +for layout in ['tablet','phone']: + for group in ['callers','handoff']: + name='regression-'+group+'-'+layout+'100-v7';commands.append((name,['run-regressions-v7.py','--name',name,'--group',group,'--layout',layout])) +save() +for name,command in commands: + state['current']=name;save();result=subprocess.run([sys.executable,str(base/command[0]),*command[1:]]) + state['cohorts'].append(dict(name=name,exit_code=result.returncode));save() + if result.returncode:raise RuntimeError('Cohort failed; later planned cohorts remain unrun: '+name) +state.update(completed=True,current=None);save();print(json.dumps(state,indent=2)) diff --git a/docs/validation/paste-copy/collectors/run-final-matrix-v6.py b/docs/validation/paste-copy/collectors/run-final-matrix-v6.py new file mode 100644 index 00000000..be1a2805 --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-final-matrix-v6.py @@ -0,0 +1,30 @@ +from pathlib import Path +import hashlib, json, subprocess, sys + +base = Path('artifacts/paste-copy') +out = base / 'final-matrix-v6' +out.mkdir(exist_ok=False) +state = dict(completed=False, collector_sha256=hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), cohorts=[]) +def save(): + (out/'record.json').write_text(json.dumps(state, indent=2)+'\n') +save() +commands = [] +for layout in ['tablet', 'phone', 'landscape']: + for method, label in [('pointerCopyIsExactOnceAndReturns', 'unicode'), ('keyboardCopyHidesImeAndEscapeReturns', 'keyboard')]: + name = 'owned-' + label + '-' + layout + '200-v6' + commands.append((name, ['run-owned-v6.py', '--name', name, '--method', method, '--layout', layout, '--font', '2'])) +for layout in ['tablet', 'phone']: + for group in ['callers', 'handoff']: + name = 'regression-' + group + '-' + layout + '100-v6' + commands.append((name, ['run-regressions-v6.py', '--name', name, '--group', group, '--layout', layout])) +for name, command in commands: + state['current'] = name + save() + result = subprocess.run([sys.executable, str(base/command[0]), *command[1:]]) + state['cohorts'].append(dict(name=name, exit_code=result.returncode)) + save() + if result.returncode: + raise RuntimeError('Cohort failed; later planned cohorts remain unrun: '+name) +state.update(completed=True, current=None) +save() +print(json.dumps(state, indent=2)) diff --git a/docs/validation/paste-copy/collectors/run-frozen-paste-v2.py b/docs/validation/paste-copy/collectors/run-frozen-paste-v2.py new file mode 100644 index 00000000..03506459 --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-frozen-paste-v2.py @@ -0,0 +1,23 @@ +from pathlib import Path +import argparse,hashlib,json,os,re,subprocess,sys +from preservation import verify,require,absent +base=Path('artifacts/paste-copy');p=argparse.ArgumentParser();p.add_argument('--name',required=True);p.add_argument('--layout',choices=['tablet','phone','landscape'],default='tablet');p.add_argument('--font',type=float,default=1);p.add_argument('--app',choices=['old','new'],default='new');a=p.parse_args();require(re.fullmatch(r'[a-z0-9-]+',a.name) and 1<=a.font<=2,'Invalid cohort arguments') +out=base/a.name;require(not out.exists(),'Attempt exists; inspect before repeating');read=lambda p:json.loads(Path(p).read_text());sha=lambda p:hashlib.sha256(Path(p).read_bytes()).hexdigest() +identity=read(base/'candidate-v2/identity.json');test=base/'candidate-v2/app-debug-androidTest.apk';app=base/'candidate-v2/app-debug.apk' if a.app=='new' else Path('/droidcast-command-handoff-27caf3/artifacts/command-handoff/build-candidate-v2/candidate/app-debug.apk') +expected_app=identity['apk_hashes'][app.name] if a.app=='new' else '2a41ea1407cccf23b70afada6fde64de55bc0bd3d8f035645a44532b12d14e3d' +require(sha(app)==expected_app and sha(test)==identity['apk_hashes'][test.name],'Frozen APK differs') +for path,digest in identity['source_hashes'].items(): + if path.endswith('.py'):require(sha(path)==digest,'Executed Python source changed') +before=verify();out.mkdir(mode=0o700);state=dict(completed=False,pid=os.getpid(),app=a.app,layout=a.layout,font=a.font,scope='Explicit native Copy fallback; actual insertion remains unsupported/partial',runtime_source_commit=identity['source_commit'] if a.app=='new' else '56134f31f74211d7ec4d8faaf18ef5f84658242e',test_source_commit=identity['source_commit'],app_sha256=sha(app),test_apk_sha256=sha(test),collector_sha256=sha(__file__),**before) +def save():(out/'state.json').write_text(json.dumps(state,indent=2)+'\n') +save();cache=Path('/droidcast-command-catalog-27caf3/artifacts/extension-catalog/representative-001-bundles-v1/archives') +command=[sys.executable,'scripts/test-reviewed-text-input.py','--serial','emulator-5580','--avd','Tinycast_Tablet_API_36','--layout',a.layout,'--font-scale',str(a.font),'--output',str(out/'cohort'),'--apk',str(app),'--test-apk',str(test),'--classes','dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure','--expected','1','--reviewed-translation-command','instant-translate-paste','--expect-paste-copy-fallback','--json-archive',str(cache/'223987eaca2c894e37ada9e087669f260cda79d6a3b88ff11463f429cc952e6a.zip'),'--translate-archive',str(cache/'909c8a3916ca91612bb610da257f5718af2ef25f303ea95371e907eaa1cf7d69.zip')] +with (out/'host.log').open('wb') as log:r=subprocess.run(command,stdout=log,stderr=subprocess.STDOUT,env=dict(os.environ,ANDROID_HOME='')) +receipt=read(out/'cohort/record.json');cleanup=receipt.get('cleanup',{});state.update(runner_exit_code=r.returncode,passes=receipt.get('passes',0),cleanup_checks=len(cleanup),cleanup_passed=bool(cleanup) and all(x.get('passed') for x in cleanup.values()));save();require(state['cleanup_passed'] and absent('files/reviewed-text-fixture-lease'),'Cleanup failed; inspect retained owner');require(verify()==before,'Preservation differs');state.update(same_boot=True,durable_data_unchanged=True,pre_existing_evidence_unchanged=True) +cases=list((out/'cohort/captures').glob('*-record.json'));require(len(cases)==1,'Missing native case');case=read(cases[0]);state['workflow_outcome']=case.get('workflow_outcome',case.get('observed_phase_outcome','uncredited-failure')) +if a.app=='new': + state['completed']=r.returncode==0 and receipt.get('completed') is True and state['passes']==1 and case.get('passed') is True and state['workflow_outcome']=='partial-paste-explicit-copy-fallback' and case.get('native_copy_was_explicit') is True and case.get('copy_exact') is True and case.get('returned_to_external_caller') is True and case.get('source_text_and_selection_unchanged') is True +else: + log=(out/'cohort/tests.log').read_text();state['completed']=r.returncode!=0 and state['passes']==0 and 'A rejected paste with owned output must offer Copy result instead' in log and case.get('owned_service_output_matched_paste_attempt') is True + state['expected_negative']=True +save();print(json.dumps({k:state[k] for k in ['completed','app','layout','font','workflow_outcome','passes','cleanup_checks','cleanup_passed']},indent=2));require(state['completed'],'Frozen paste cohort did not establish its required phase') diff --git a/docs/validation/paste-copy/collectors/run-owned-v3.py b/docs/validation/paste-copy/collectors/run-owned-v3.py new file mode 100644 index 00000000..55483ec2 --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-owned-v3.py @@ -0,0 +1,18 @@ +from pathlib import Path +import argparse,hashlib,json,os,re,subprocess,sys +from preservation import verify,require,absent +base=Path('artifacts/paste-copy');p=argparse.ArgumentParser();p.add_argument('--name',required=True);p.add_argument('--method');p.add_argument('--layout',choices=['tablet','phone','landscape'],default='tablet');p.add_argument('--font',type=float,default=1);a=p.parse_args();require(re.fullmatch(r'[a-z0-9-]+',a.name) and 1<=a.font<=2 and (not a.method or re.fullmatch(r'[A-Za-z0-9]+',a.method)),'Invalid arguments') +out=base/a.name;require(not out.exists(),'Attempt exists; inspect before repeating');read=lambda p:json.loads(Path(p).read_text());sha=lambda p:hashlib.sha256(Path(p).read_bytes()).hexdigest() +build=read(base/'candidate-v2/identity.json');harness=read(base/'owned-harness-v3/identity.json');app=base/'candidate-v2/app-debug.apk';test=base/'owned-harness-v3/app-debug-androidTest.apk' +require(sha(app)==harness['app_sha256'] and sha(test)==harness['test_apk_sha256'],'Frozen APK differs') +for path,digest in harness['source_hashes'].items(): + if path.endswith('.py'):require(sha(path)==digest,'Executed Python source differs') +before=verify();out.mkdir(mode=0o700);expected=1 if a.method else 11 +state=dict(completed=False,pid=os.getpid(),layout=a.layout,font=a.font,method=a.method,expected=expected,scope='Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow',runtime_source_commit=build['source_commit'],test_source_commit=harness['test_source_commit'],app_sha256=sha(app),test_apk_sha256=sha(test),collector_sha256=sha(__file__),**before) +def save():(out/'state.json').write_text(json.dumps(state,indent=2)+'\n') +save();archive='/droidcast-command-catalog-27caf3/artifacts/extension-catalog/representative-001-bundles-v1/archives/223987eaca2c894e37ada9e087669f260cda79d6a3b88ff11463f429cc952e6a.zip';classes='dev.tinycast.android.ExtensionPasteCopyDeviceTest'+('#'+a.method if a.method else '') +command=[sys.executable,'scripts/test-reviewed-text-input.py','--serial','emulator-5580','--avd','Tinycast_Tablet_API_36','--layout',a.layout,'--font-scale',str(a.font),'--output',str(out/'cohort'),'--apk',str(app),'--test-apk',str(test),'--classes',classes,'--expected',str(expected),'--json-archive',archive] +with (out/'host.log').open('wb') as log:r=subprocess.run(command,stdout=log,stderr=subprocess.STDOUT,env=dict(os.environ,ANDROID_HOME='')) +receipt=read(out/'cohort/record.json');cleanup=receipt.get('cleanup',{});state.update(runner_exit_code=r.returncode,passes=receipt.get('passes',0),cleanup_checks=len(cleanup),cleanup_passed=bool(cleanup) and all(x.get('passed') for x in cleanup.values()));save();require(state['cleanup_passed'] and absent('files/reviewed-text-fixture-lease'),'Cleanup failed; retain owner and inspect');require(verify()==before,'Preservation differs');state.update(same_boot=True,durable_data_unchanged=True,pre_existing_evidence_unchanged=True) +cases=list((out/'cohort/captures').glob('pastecopy-*-record.json'));state['case_records']=len(cases);state['completed']=r.returncode==0 and receipt.get('completed') is True and state['passes']==expected and len(cases)==expected and all(read(c).get('passed') is True for c in cases) +save();print(json.dumps({k:state[k] for k in ['completed','layout','font','method','expected','passes','cleanup_checks','cleanup_passed']},indent=2));require(state['completed'],'Owned cohort failed; retain its actual outcome') diff --git a/docs/validation/paste-copy/collectors/run-owned-v5.py b/docs/validation/paste-copy/collectors/run-owned-v5.py new file mode 100644 index 00000000..dd0eb8bb --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-owned-v5.py @@ -0,0 +1,18 @@ +from pathlib import Path +import argparse,hashlib,json,os,re,subprocess,sys +from preservation import verify,require,absent +base=Path('artifacts/paste-copy');p=argparse.ArgumentParser();p.add_argument('--name',required=True);p.add_argument('--method');p.add_argument('--layout',choices=['tablet','phone','landscape'],default='tablet');p.add_argument('--font',type=float,default=1);a=p.parse_args();require(re.fullmatch(r'[a-z0-9-]+',a.name) and 1<=a.font<=2 and (not a.method or re.fullmatch(r'[A-Za-z0-9]+',a.method)),'Invalid arguments') +out=base/a.name;require(not out.exists(),'Attempt exists; inspect before repeating');read=lambda p:json.loads(Path(p).read_text());sha=lambda p:hashlib.sha256(Path(p).read_bytes()).hexdigest() +build=read(base/'candidate-v2/identity.json');harness=read(base/'owned-harness-v5/identity.json');app=base/'candidate-v2/app-debug.apk';test=base/'owned-harness-v5/app-debug-androidTest.apk' +require(sha(app)==harness['app_sha256'] and sha(test)==harness['test_apk_sha256'],'Frozen APK differs') +for path,digest in harness['source_hashes'].items(): + if path.endswith('.py'):require(sha(path)==digest,'Executed Python source differs') +before=verify();out.mkdir(mode=0o700);expected=1 if a.method else 11 +state=dict(completed=False,pid=os.getpid(),layout=a.layout,font=a.font,method=a.method,expected=expected,scope='Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow',runtime_source_commit=build['source_commit'],test_source_commit=harness['test_source_commit'],app_sha256=sha(app),test_apk_sha256=sha(test),collector_sha256=sha(__file__),**before) +def save():(out/'state.json').write_text(json.dumps(state,indent=2)+'\n') +save();archive='/droidcast-command-catalog-27caf3/artifacts/extension-catalog/representative-001-bundles-v1/archives/223987eaca2c894e37ada9e087669f260cda79d6a3b88ff11463f429cc952e6a.zip';classes='dev.tinycast.android.ExtensionPasteCopyDeviceTest'+('#'+a.method if a.method else '') +command=[sys.executable,'scripts/test-reviewed-text-input.py','--serial','emulator-5580','--avd','Tinycast_Tablet_API_36','--layout',a.layout,'--font-scale',str(a.font),'--output',str(out/'cohort'),'--apk',str(app),'--test-apk',str(test),'--classes',classes,'--expected',str(expected),'--json-archive',archive] +with (out/'host.log').open('wb') as log:r=subprocess.run(command,stdout=log,stderr=subprocess.STDOUT,env=dict(os.environ,ANDROID_HOME='')) +receipt=read(out/'cohort/record.json');cleanup=receipt.get('cleanup',{});state.update(runner_exit_code=r.returncode,passes=receipt.get('passes',0),cleanup_checks=len(cleanup),cleanup_passed=bool(cleanup) and all(x.get('passed') for x in cleanup.values()));save();require(state['cleanup_passed'] and absent('files/reviewed-text-fixture-lease'),'Cleanup failed; retain owner and inspect');require(verify()==before,'Preservation differs');state.update(same_boot=True,durable_data_unchanged=True,pre_existing_evidence_unchanged=True) +cases=list((out/'cohort/captures').glob('pastecopy-*-record.json'));state['case_records']=len(cases);state['completed']=r.returncode==0 and receipt.get('completed') is True and state['passes']==expected and len(cases)==expected and all(read(c).get('passed') is True for c in cases) +save();print(json.dumps({k:state[k] for k in ['completed','layout','font','method','expected','passes','cleanup_checks','cleanup_passed']},indent=2));require(state['completed'],'Owned cohort failed; retain its actual outcome') diff --git a/docs/validation/paste-copy/collectors/run-owned-v6.py b/docs/validation/paste-copy/collectors/run-owned-v6.py new file mode 100644 index 00000000..c55fad62 --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-owned-v6.py @@ -0,0 +1,18 @@ +from pathlib import Path +import argparse,hashlib,json,os,re,subprocess,sys +from preservation import verify,require,absent +base=Path('artifacts/paste-copy');p=argparse.ArgumentParser();p.add_argument('--name',required=True);p.add_argument('--method');p.add_argument('--layout',choices=['tablet','phone','landscape'],default='tablet');p.add_argument('--font',type=float,default=1);a=p.parse_args();require(re.fullmatch(r'[a-z0-9-]+',a.name) and 1<=a.font<=2 and (not a.method or re.fullmatch(r'[A-Za-z0-9]+',a.method)),'Invalid arguments') +out=base/a.name;require(not out.exists(),'Attempt exists; inspect before repeating');read=lambda p:json.loads(Path(p).read_text());sha=lambda p:hashlib.sha256(Path(p).read_bytes()).hexdigest() +build=read(base/'candidate-v2/identity.json');harness=read(base/'owned-harness-v6/identity.json');app=base/'candidate-v2/app-debug.apk';test=base/'owned-harness-v6/app-debug-androidTest.apk' +require(sha(app)==harness['app_sha256'] and sha(test)==harness['test_apk_sha256'],'Frozen APK differs') +for path,digest in harness['source_hashes'].items(): + if path.endswith('.py'):require(sha(path)==digest,'Executed Python source differs') +before=verify();out.mkdir(mode=0o700);expected=1 if a.method else 13 +state=dict(completed=False,pid=os.getpid(),layout=a.layout,font=a.font,method=a.method,expected=expected,scope='Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow',runtime_source_commit=build['source_commit'],test_source_commit=harness['test_source_commit'],app_sha256=sha(app),test_apk_sha256=sha(test),collector_sha256=sha(__file__),**before) +def save():(out/'state.json').write_text(json.dumps(state,indent=2)+'\n') +save();archive='/droidcast-command-catalog-27caf3/artifacts/extension-catalog/representative-001-bundles-v1/archives/223987eaca2c894e37ada9e087669f260cda79d6a3b88ff11463f429cc952e6a.zip';classes='dev.tinycast.android.ExtensionPasteCopyDeviceTest'+('#'+a.method if a.method else '') +command=[sys.executable,'scripts/test-reviewed-text-input.py','--serial','emulator-5580','--avd','Tinycast_Tablet_API_36','--layout',a.layout,'--font-scale',str(a.font),'--output',str(out/'cohort'),'--apk',str(app),'--test-apk',str(test),'--classes',classes,'--expected',str(expected),'--json-archive',archive] +with (out/'host.log').open('wb') as log:r=subprocess.run(command,stdout=log,stderr=subprocess.STDOUT,env=dict(os.environ,ANDROID_HOME='')) +receipt=read(out/'cohort/record.json');cleanup=receipt.get('cleanup',{});state.update(runner_exit_code=r.returncode,passes=receipt.get('passes',0),cleanup_checks=len(cleanup),cleanup_passed=bool(cleanup) and all(x.get('passed') for x in cleanup.values()));save();require(state['cleanup_passed'] and absent('files/reviewed-text-fixture-lease'),'Cleanup failed; retain owner and inspect');require(verify()==before,'Preservation differs');state.update(same_boot=True,durable_data_unchanged=True,pre_existing_evidence_unchanged=True) +cases=list((out/'cohort/captures').glob('pastecopy-*-record.json'));state['case_records']=len(cases);state['completed']=r.returncode==0 and receipt.get('completed') is True and state['passes']==expected and len(cases)==expected and all(read(c).get('passed') is True for c in cases) +save();print(json.dumps({k:state[k] for k in ['completed','layout','font','method','expected','passes','cleanup_checks','cleanup_passed']},indent=2));require(state['completed'],'Owned cohort failed; retain its actual outcome') diff --git a/docs/validation/paste-copy/collectors/run-owned-v7.py b/docs/validation/paste-copy/collectors/run-owned-v7.py new file mode 100644 index 00000000..e5bf191f --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-owned-v7.py @@ -0,0 +1,26 @@ +from pathlib import Path +import argparse,hashlib,json,os,re,subprocess,sys +from preservation import verify,require,absent +base=Path('artifacts/paste-copy');p=argparse.ArgumentParser();p.add_argument('--name',required=True);p.add_argument('--method');p.add_argument('--legacy-reveal',action='store_true');p.add_argument('--layout',choices=['tablet','phone','landscape'],default='tablet');p.add_argument('--font',type=float,default=1);a=p.parse_args();require(re.fullmatch(r'[a-z0-9-]+',a.name) and 1<=a.font<=2 and (not a.method or re.fullmatch(r'[A-Za-z0-9]+',a.method)),'Invalid arguments') +require(not a.legacy_reveal or a.method=='keyboardCopyHidesImeAndEscapeReturns' and a.layout=='landscape' and a.font==2,'Legacy control scope differs') +out=base/a.name;require(not out.exists(),'Attempt exists; inspect before repeating');read=lambda p:json.loads(Path(p).read_text());sha=lambda p:hashlib.sha256(Path(p).read_bytes()).hexdigest() +build=read(base/'candidate-v2/identity.json');harness=read(base/'owned-harness-v7/identity.json');app=base/'candidate-v2/app-debug.apk';test=base/'owned-harness-v7/app-debug-androidTest.apk' +require(sha(app)==harness['app_sha256'] and sha(test)==harness['test_apk_sha256'],'Frozen APK differs') +for path,digest in harness['source_hashes'].items(): + if path.endswith('.py'):require(sha(path)==digest,'Executed Python source differs') +before=verify();out.mkdir(mode=0o700);expected=1 if a.method else 13 +state=dict(completed=False,pid=os.getpid(),layout=a.layout,font=a.font,method=a.method,expected=expected,scope='Owned Unicode, capability and lifecycle protocols; injected native owner case is not a JavaScript producer workflow',runtime_source_commit=build['source_commit'],test_source_commit=harness['test_source_commit'],app_sha256=sha(app),test_apk_sha256=sha(test),collector_sha256=sha(__file__),**before) +def save():(out/'state.json').write_text(json.dumps(state,indent=2)+'\n') +save();archive='/droidcast-command-catalog-27caf3/artifacts/extension-catalog/representative-001-bundles-v1/archives/223987eaca2c894e37ada9e087669f260cda79d6a3b88ff11463f429cc952e6a.zip';classes='dev.tinycast.android.ExtensionPasteCopyDeviceTest'+('#'+a.method if a.method else '') +command=[sys.executable,'scripts/test-reviewed-text-input.py','--serial','emulator-5580','--avd','Tinycast_Tablet_API_36','--layout',a.layout,'--font-scale',str(a.font),'--output',str(out/'cohort'),'--apk',str(app),'--test-apk',str(test),'--classes',classes,'--expected',str(expected),'--json-archive',archive] +if a.legacy_reveal:command.append('--paste-copy-legacy-reveal') +with (out/'host.log').open('wb') as log:r=subprocess.run(command,stdout=log,stderr=subprocess.STDOUT,env=dict(os.environ,ANDROID_HOME='')) +receipt=read(out/'cohort/record.json');cleanup=receipt.get('cleanup',{});state.update(runner_exit_code=r.returncode,passes=receipt.get('passes',0),cleanup_checks=len(cleanup),cleanup_passed=bool(cleanup) and all(x.get('passed') for x in cleanup.values()));save();require(state['cleanup_passed'] and absent('files/reviewed-text-fixture-lease'),'Cleanup failed; retain owner and inspect');require(verify()==before,'Preservation differs');state.update(same_boot=True,durable_data_unchanged=True,pre_existing_evidence_unchanged=True) +cases=list((out/'cohort/captures').glob('pastecopy-*-record.json'));state['case_records']=len(cases);state['completed']=r.returncode==0 and receipt.get('completed') is True and state['passes']==expected and len(cases)==expected and all(read(c).get('passed') is True for c in cases) + +if a.legacy_reveal: + case=read(cases[0]);paths=case.get('reveal_paths',[]);log=(out/'cohort/tests.log').read_text() + state['expected_negative']=r.returncode!=0 and state['passes']==0 and 'extension-primary' in log and 'node is no longer in the tree' in log and any(x.get('legacy_four_pixel_gutter') is True and x.get('start_inside_rounded_panel') is False and x.get('dialog_before')=='extension-run' and x.get('command_before')=='editor' and x.get('dialog_after') is None and x.get('command_after') is None for x in paths) + state['scope']='Matched legacy test-gesture control; no application regression credit' + state['completed']=state['expected_negative'] +save();print(json.dumps({k:state[k] for k in ['completed','layout','font','method','expected','passes','cleanup_checks','cleanup_passed']},indent=2));require(state['completed'],'Owned cohort failed; retain its actual outcome') diff --git a/docs/validation/paste-copy/collectors/run-regressions-v6.py b/docs/validation/paste-copy/collectors/run-regressions-v6.py new file mode 100644 index 00000000..8bf1ff61 --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-regressions-v6.py @@ -0,0 +1,73 @@ +from pathlib import Path +import argparse, hashlib, json, os, re, subprocess, sys +from preservation import verify, require, absent + +base = Path('artifacts/paste-copy') +p = argparse.ArgumentParser() +p.add_argument('--name', required=True) +p.add_argument('--group', choices=['callers', 'handoff'], required=True) +p.add_argument('--layout', choices=['tablet', 'phone'], required=True) +a = p.parse_args() +require(re.fullmatch(r'[a-z0-9-]+', a.name), 'Invalid output name') +out = base / a.name +require(not out.exists(), 'Attempt exists; inspect before repeating') +read = lambda path: json.loads(Path(path).read_text()) +sha = lambda path: hashlib.sha256(Path(path).read_bytes()).hexdigest() +build = read(base / 'candidate-v2/identity.json') +harness = read(base / 'owned-harness-v6/identity.json') +app = base / 'candidate-v2/app-debug.apk' +test = base / 'owned-harness-v6/app-debug-androidTest.apk' +require(sha(app) == harness['app_sha256'] and sha(test) == harness['test_apk_sha256'], 'Frozen APK differs') +for path, digest in harness['source_hashes'].items(): + if path.endswith('.py'): + require(sha(path) == digest, 'Executed Python source differs') +if a.group == 'handoff': + classes = 'dev.tinycast.android.ExtensionCommandHandoffDeviceTest' + expected = 8 +else: + methods = { + 'ExtensionFormDeviceTest': ['nativeConfigurationEditsValidateCancelAndRun', + 'ownedNoViewReturnRejectsDisposedAndReplacedCallbacks', + 'ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape', + 'correctingAnErrorSubmitsExactUnicodeOnce'], + 'ExtensionDetailDeviceTest': ['listTouchDetailPreservesQuerySelectionExactCopyAndCaller', + 'recreationStartsAnewOwnerAndRejectsThePriorNativeCallback'], + 'ReviewedTextDeviceTest': ['selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns', + 'ordinaryCommandDoesNotReceiveClipboardAsSelectedText'], + 'ReviewedTextLifecycleDeviceTest': ['resetCloseErrorAndOrdinaryLaunchRevokeInput', + 'staleRuntimeCannotPublishOrWriteAfterReplacement', + 'runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime', + 'rejectedAsyncAndSyncHostCallsReleaseApprovedInput'], + } + classes = ','.join('dev.tinycast.android.' + klass + '#' + method + for klass, names in methods.items() for method in names) + expected = sum(map(len, methods.values())) +before = verify() +out.mkdir(mode=0o700) +state = dict(completed=False, pid=os.getpid(), group=a.group, layout=a.layout, + expected=expected, classes=classes, runtime_source_commit=build['source_commit'], + test_source_commit=harness['test_source_commit'], app_sha256=sha(app), + test_apk_sha256=sha(test), collector_sha256=sha(__file__), **before) +def save(): + (out / 'state.json').write_text(json.dumps(state, indent=2) + '\n') +save() +archive = '/droidcast-command-catalog-27caf3/artifacts/extension-catalog/representative-001-bundles-v1/archives/223987eaca2c894e37ada9e087669f260cda79d6a3b88ff11463f429cc952e6a.zip' +command = [sys.executable, 'scripts/test-reviewed-text-input.py', '--serial', 'emulator-5580', + '--avd', 'Tinycast_Tablet_API_36', '--layout', a.layout, '--output', str(out/'cohort'), + '--apk', str(app), '--test-apk', str(test), '--classes', classes, '--expected', str(expected), + '--json-archive', archive] +with (out / 'host.log').open('wb') as log: + r = subprocess.run(command, stdout=log, stderr=subprocess.STDOUT, + env=dict(os.environ, ANDROID_HOME='')) +receipt = read(out / 'cohort/record.json') +cleanup = receipt.get('cleanup', {}) +state.update(runner_exit_code=r.returncode, passes=receipt.get('passes', 0), + cleanup_checks=len(cleanup), cleanup_passed=bool(cleanup) and all(x.get('passed') for x in cleanup.values())) +save() +require(state['cleanup_passed'] and absent('files/reviewed-text-fixture-lease'), 'Cleanup failed; retain owner and inspect') +require(verify() == before, 'Preservation differs') +state.update(same_boot=True, durable_data_unchanged=True, pre_existing_evidence_unchanged=True, + completed=r.returncode == 0 and receipt.get('completed') is True and state['passes'] == expected) +save() +print(json.dumps({k: state[k] for k in ['completed', 'group', 'layout', 'expected', 'passes', 'cleanup_checks']}, indent=2)) +require(state['completed'], 'Regression cohort failed; retain its actual outcome') diff --git a/docs/validation/paste-copy/collectors/run-regressions-v7.py b/docs/validation/paste-copy/collectors/run-regressions-v7.py new file mode 100644 index 00000000..23615206 --- /dev/null +++ b/docs/validation/paste-copy/collectors/run-regressions-v7.py @@ -0,0 +1,73 @@ +from pathlib import Path +import argparse, hashlib, json, os, re, subprocess, sys +from preservation import verify, require, absent + +base = Path('artifacts/paste-copy') +p = argparse.ArgumentParser() +p.add_argument('--name', required=True) +p.add_argument('--group', choices=['callers', 'handoff'], required=True) +p.add_argument('--layout', choices=['tablet', 'phone'], required=True) +a = p.parse_args() +require(re.fullmatch(r'[a-z0-9-]+', a.name), 'Invalid output name') +out = base / a.name +require(not out.exists(), 'Attempt exists; inspect before repeating') +read = lambda path: json.loads(Path(path).read_text()) +sha = lambda path: hashlib.sha256(Path(path).read_bytes()).hexdigest() +build = read(base / 'candidate-v2/identity.json') +harness = read(base / 'owned-harness-v7/identity.json') +app = base / 'candidate-v2/app-debug.apk' +test = base / 'owned-harness-v7/app-debug-androidTest.apk' +require(sha(app) == harness['app_sha256'] and sha(test) == harness['test_apk_sha256'], 'Frozen APK differs') +for path, digest in harness['source_hashes'].items(): + if path.endswith('.py'): + require(sha(path) == digest, 'Executed Python source differs') +if a.group == 'handoff': + classes = 'dev.tinycast.android.ExtensionCommandHandoffDeviceTest' + expected = 8 +else: + methods = { + 'ExtensionFormDeviceTest': ['nativeConfigurationEditsValidateCancelAndRun', + 'ownedNoViewReturnRejectsDisposedAndReplacedCallbacks', + 'ownedNoViewReturnAcceptsFocusedEnterAndPreservesEscape', + 'correctingAnErrorSubmitsExactUnicodeOnce'], + 'ExtensionDetailDeviceTest': ['listTouchDetailPreservesQuerySelectionExactCopyAndCaller', + 'recreationStartsAnewOwnerAndRejectsThePriorNativeCallback'], + 'ReviewedTextDeviceTest': ['selectedJsonRunsOnlyAfterReviewThenCopiesAndReturns', + 'ordinaryCommandDoesNotReceiveClipboardAsSelectedText'], + 'ReviewedTextLifecycleDeviceTest': ['resetCloseErrorAndOrdinaryLaunchRevokeInput', + 'staleRuntimeCannotPublishOrWriteAfterReplacement', + 'runtimeCancellationRegistrationCannotBeDetachedByAnOldRuntime', + 'rejectedAsyncAndSyncHostCallsReleaseApprovedInput'], + } + classes = ','.join('dev.tinycast.android.' + klass + '#' + method + for klass, names in methods.items() for method in names) + expected = sum(map(len, methods.values())) +before = verify() +out.mkdir(mode=0o700) +state = dict(completed=False, pid=os.getpid(), group=a.group, layout=a.layout, + expected=expected, classes=classes, runtime_source_commit=build['source_commit'], + test_source_commit=harness['test_source_commit'], app_sha256=sha(app), + test_apk_sha256=sha(test), collector_sha256=sha(__file__), **before) +def save(): + (out / 'state.json').write_text(json.dumps(state, indent=2) + '\n') +save() +archive = '/droidcast-command-catalog-27caf3/artifacts/extension-catalog/representative-001-bundles-v1/archives/223987eaca2c894e37ada9e087669f260cda79d6a3b88ff11463f429cc952e6a.zip' +command = [sys.executable, 'scripts/test-reviewed-text-input.py', '--serial', 'emulator-5580', + '--avd', 'Tinycast_Tablet_API_36', '--layout', a.layout, '--output', str(out/'cohort'), + '--apk', str(app), '--test-apk', str(test), '--classes', classes, '--expected', str(expected), + '--json-archive', archive] +with (out / 'host.log').open('wb') as log: + r = subprocess.run(command, stdout=log, stderr=subprocess.STDOUT, + env=dict(os.environ, ANDROID_HOME='')) +receipt = read(out / 'cohort/record.json') +cleanup = receipt.get('cleanup', {}) +state.update(runner_exit_code=r.returncode, passes=receipt.get('passes', 0), + cleanup_checks=len(cleanup), cleanup_passed=bool(cleanup) and all(x.get('passed') for x in cleanup.values())) +save() +require(state['cleanup_passed'] and absent('files/reviewed-text-fixture-lease'), 'Cleanup failed; retain owner and inspect') +require(verify() == before, 'Preservation differs') +state.update(same_boot=True, durable_data_unchanged=True, pre_existing_evidence_unchanged=True, + completed=r.returncode == 0 and receipt.get('completed') is True and state['passes'] == expected) +save() +print(json.dumps({k: state[k] for k in ['completed', 'group', 'layout', 'expected', 'passes', 'cleanup_checks']}, indent=2)) +require(state['completed'], 'Regression cohort failed; retain its actual outcome') diff --git a/docs/validation/paste-copy/frames/landscape100-copied-frame.json b/docs/validation/paste-copy/frames/landscape100-copied-frame.json new file mode 100644 index 00000000..1a40f0b8 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape100-copied-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-exact-copy", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape100-copied.xml b/docs/validation/paste-copy/frames/landscape100-copied.xml new file mode 100644 index 00000000..077bfa99 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape100-copied.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape100-pending-frame.json b/docs/validation/paste-copy/frames/landscape100-pending-frame.json new file mode 100644 index 00000000..98bfcdaf --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape100-pending-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-before-copy", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape100-pending.xml b/docs/validation/paste-copy/frames/landscape100-pending.xml new file mode 100644 index 00000000..fff77f58 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape100-pending.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape100-source-return-frame.json b/docs/validation/paste-copy/frames/landscape100-source-return-frame.json new file mode 100644 index 00000000..622b83d8 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape100-source-return-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-context-return", + "external_caller": true, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": null, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape100-source-return.xml b/docs/validation/paste-copy/frames/landscape100-source-return.xml new file mode 100644 index 00000000..283d209a --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape100-source-return.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-copied-frame.json b/docs/validation/paste-copy/frames/landscape200-copied-frame.json new file mode 100644 index 00000000..ae498689 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-copied-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-exact-copy", + "external_caller": false, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-copied.xml b/docs/validation/paste-copy/frames/landscape200-copied.xml new file mode 100644 index 00000000..410452e3 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-copied.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-interior-reveal-after-frame.json b/docs/validation/paste-copy/frames/landscape200-interior-reveal-after-frame.json new file mode 100644 index 00000000..f9460726 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-interior-reveal-after-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "reveal-1-after", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-interior-reveal-after.xml b/docs/validation/paste-copy/frames/landscape200-interior-reveal-after.xml new file mode 100644 index 00000000..88d74ed9 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-interior-reveal-after.xml @@ -0,0 +1,324 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-interior-reveal-before-frame.json b/docs/validation/paste-copy/frames/landscape200-interior-reveal-before-frame.json new file mode 100644 index 00000000..c676bdea --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-interior-reveal-before-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "reveal-1-before", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-interior-reveal-before.xml b/docs/validation/paste-copy/frames/landscape200-interior-reveal-before.xml new file mode 100644 index 00000000..ca5d45fa --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-interior-reveal-before.xml @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-keyboard-focus-frame.json b/docs/validation/paste-copy/frames/landscape200-keyboard-focus-frame.json new file mode 100644 index 00000000..ee233938 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-keyboard-focus-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "copy-keyboard-focused", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-keyboard-focus.xml b/docs/validation/paste-copy/frames/landscape200-keyboard-focus.xml new file mode 100644 index 00000000..f8fa9d92 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-keyboard-focus.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-legacy-reveal-after-frame.json b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-after-frame.json new file mode 100644 index 00000000..f9460726 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-after-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "reveal-1-after", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-legacy-reveal-after.xml b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-after.xml new file mode 100644 index 00000000..47773ebe --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-after.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-legacy-reveal-before-frame.json b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-before-frame.json new file mode 100644 index 00000000..c676bdea --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-before-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "reveal-1-before", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-legacy-reveal-before.xml b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-before.xml new file mode 100644 index 00000000..903ee74b --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-legacy-reveal-before.xml @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-original-keyboard-failure-frame.json b/docs/validation/paste-copy/frames/landscape200-original-keyboard-failure-frame.json new file mode 100644 index 00000000..6e35e11a --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-original-keyboard-failure-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "failure", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-original-keyboard-failure.xml b/docs/validation/paste-copy/frames/landscape200-original-keyboard-failure.xml new file mode 100644 index 00000000..d47c8e7c --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-original-keyboard-failure.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-pending-frame.json b/docs/validation/paste-copy/frames/landscape200-pending-frame.json new file mode 100644 index 00000000..0457f303 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-pending-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-before-copy", + "external_caller": false, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-pending.xml b/docs/validation/paste-copy/frames/landscape200-pending.xml new file mode 100644 index 00000000..16a90515 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-pending.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-source-return-frame.json b/docs/validation/paste-copy/frames/landscape200-source-return-frame.json new file mode 100644 index 00000000..e89c84b9 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-source-return-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-context-return", + "external_caller": true, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": null, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/landscape200-source-return.xml b/docs/validation/paste-copy/frames/landscape200-source-return.xml new file mode 100644 index 00000000..96242b05 --- /dev/null +++ b/docs/validation/paste-copy/frames/landscape200-source-return.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-before-frame.json b/docs/validation/paste-copy/frames/phone100-before-frame.json new file mode 100644 index 00000000..a6101e05 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-before-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-paste-unavailable", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-before.xml b/docs/validation/paste-copy/frames/phone100-before.xml new file mode 100644 index 00000000..4bf3f28f --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-before.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-copied-frame.json b/docs/validation/paste-copy/frames/phone100-copied-frame.json new file mode 100644 index 00000000..1a40f0b8 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-copied-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-exact-copy", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-copied.xml b/docs/validation/paste-copy/frames/phone100-copied.xml new file mode 100644 index 00000000..11b0ed8d --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-copied.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-detail-regression-frame.json b/docs/validation/paste-copy/frames/phone100-detail-regression-frame.json new file mode 100644 index 00000000..d21f6904 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-detail-regression-frame.json @@ -0,0 +1,8 @@ +{ + "scope": "Owned React Markdown\/metadata through the real runtime and native UI; not Store or service certification", + "phase": "selected-detail", + "font_scale": 1, + "launch_epoch": 1, + "ime_visible": false, + "synchronization": "Committed semantics and two display frames; hierarchy before PNG; stable runtime tree" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-detail-regression.xml b/docs/validation/paste-copy/frames/phone100-detail-regression.xml new file mode 100644 index 00000000..727035f1 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-detail-regression.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-form-regression-frame.json b/docs/validation/paste-copy/frames/phone100-form-regression-frame.json new file mode 100644 index 00000000..7814bddc --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-form-regression-frame.json @@ -0,0 +1,9 @@ +{ + "scope": "Owned React Form through the real runtime and Android controls; not Store\/service certification", + "phase": "corrected-destination", + "font_scale": 1, + "launch_epoch": 1, + "ime_visible": false, + "synchronization": "Committed semantics and two display frames; hierarchy before PNG; stable runtime tree", + "process_dialog_windows": [] +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-form-regression.xml b/docs/validation/paste-copy/frames/phone100-form-regression.xml new file mode 100644 index 00000000..15501c1f --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-form-regression.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-handoff-regression-frame.json b/docs/validation/paste-copy/frames/phone100-handoff-regression-frame.json new file mode 100644 index 00000000..6f04e9cf --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-handoff-regression-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "child-context", + "scope": "Owned JavaScript\/native handoff probes; no Store, service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-handoff-regression.xml b/docs/validation/paste-copy/frames/phone100-handoff-regression.xml new file mode 100644 index 00000000..204eda86 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-handoff-regression.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-parent-restored-frame.json b/docs/validation/paste-copy/frames/phone100-parent-restored-frame.json new file mode 100644 index 00000000..855f3bd4 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-parent-restored-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "restored-parent-without-output", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 1, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-parent-restored.xml b/docs/validation/paste-copy/frames/phone100-parent-restored.xml new file mode 100644 index 00000000..65d7094c --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-parent-restored.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-pending-frame.json b/docs/validation/paste-copy/frames/phone100-pending-frame.json new file mode 100644 index 00000000..98bfcdaf --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-pending-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-before-copy", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-pending.xml b/docs/validation/paste-copy/frames/phone100-pending.xml new file mode 100644 index 00000000..0eb17f4a --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-pending.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe-frame.json b/docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe-frame.json new file mode 100644 index 00000000..f6bb2fa8 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "duplicate-sentinel-preserved", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 1, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe.xml b/docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe.xml new file mode 100644 index 00000000..d921bc96 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-post-copy-sentinel-probe.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-recreated-frame.json b/docs/validation/paste-copy/frames/phone100-recreated-frame.json new file mode 100644 index 00000000..f0cc6974 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-recreated-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "recreated-without-old-offer", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 1, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-recreated.xml b/docs/validation/paste-copy/frames/phone100-recreated.xml new file mode 100644 index 00000000..ab9f1a1d --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-recreated.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-source-before-frame.json b/docs/validation/paste-copy/frames/phone100-source-before-frame.json new file mode 100644 index 00000000..eab98dbd --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-source-before-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-caller", + "external_caller": true, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": null, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-source-before.xml b/docs/validation/paste-copy/frames/phone100-source-before.xml new file mode 100644 index 00000000..3832a136 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-source-before.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-source-return-frame.json b/docs/validation/paste-copy/frames/phone100-source-return-frame.json new file mode 100644 index 00000000..622b83d8 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-source-return-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-context-return", + "external_caller": true, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": null, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-source-return.xml b/docs/validation/paste-copy/frames/phone100-source-return.xml new file mode 100644 index 00000000..3832a136 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-source-return.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-unicode-copy-frame.json b/docs/validation/paste-copy/frames/phone100-unicode-copy-frame.json new file mode 100644 index 00000000..c691cdec --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-unicode-copy-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "unicode-exact-copy", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 1, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone100-unicode-copy.xml b/docs/validation/paste-copy/frames/phone100-unicode-copy.xml new file mode 100644 index 00000000..d921bc96 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone100-unicode-copy.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-copied-frame.json b/docs/validation/paste-copy/frames/phone200-copied-frame.json new file mode 100644 index 00000000..ae498689 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-copied-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-exact-copy", + "external_caller": false, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-copied.xml b/docs/validation/paste-copy/frames/phone200-copied.xml new file mode 100644 index 00000000..641ecb6e --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-copied.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-keyboard-focus-frame.json b/docs/validation/paste-copy/frames/phone200-keyboard-focus-frame.json new file mode 100644 index 00000000..ee233938 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-keyboard-focus-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "copy-keyboard-focused", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-keyboard-focus.xml b/docs/validation/paste-copy/frames/phone200-keyboard-focus.xml new file mode 100644 index 00000000..a9f5d5e2 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-keyboard-focus.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-pending-frame.json b/docs/validation/paste-copy/frames/phone200-pending-frame.json new file mode 100644 index 00000000..0457f303 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-pending-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-before-copy", + "external_caller": false, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-pending.xml b/docs/validation/paste-copy/frames/phone200-pending.xml new file mode 100644 index 00000000..4c1b4015 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-pending.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-source-return-frame.json b/docs/validation/paste-copy/frames/phone200-source-return-frame.json new file mode 100644 index 00000000..e89c84b9 --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-source-return-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-context-return", + "external_caller": true, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": null, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/phone200-source-return.xml b/docs/validation/paste-copy/frames/phone200-source-return.xml new file mode 100644 index 00000000..ef87b6ed --- /dev/null +++ b/docs/validation/paste-copy/frames/phone200-source-return.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-before-frame.json b/docs/validation/paste-copy/frames/tablet100-before-frame.json new file mode 100644 index 00000000..a6101e05 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-before-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-paste-unavailable", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-before.xml b/docs/validation/paste-copy/frames/tablet100-before.xml new file mode 100644 index 00000000..bf638173 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-before.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-copied-frame.json b/docs/validation/paste-copy/frames/tablet100-copied-frame.json new file mode 100644 index 00000000..1a40f0b8 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-copied-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-exact-copy", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-copied.xml b/docs/validation/paste-copy/frames/tablet100-copied.xml new file mode 100644 index 00000000..4ad7a97b --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-copied.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-new-source-frame.json b/docs/validation/paste-copy/frames/tablet100-new-source-frame.json new file mode 100644 index 00000000..36ebe706 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-new-source-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "new-source-without-old-output", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 1, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-new-source.xml b/docs/validation/paste-copy/frames/tablet100-new-source.xml new file mode 100644 index 00000000..b8a1082e --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-new-source.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-pending-frame.json b/docs/validation/paste-copy/frames/tablet100-pending-frame.json new file mode 100644 index 00000000..98bfcdaf --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-pending-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-before-copy", + "external_caller": false, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-pending.xml b/docs/validation/paste-copy/frames/tablet100-pending.xml new file mode 100644 index 00000000..eb67f5f3 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-pending.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-source-return-frame.json b/docs/validation/paste-copy/frames/tablet100-source-return-frame.json new file mode 100644 index 00000000..622b83d8 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-source-return-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-context-return", + "external_caller": true, + "font_scale": 1, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": null, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-source-return.xml b/docs/validation/paste-copy/frames/tablet100-source-return.xml new file mode 100644 index 00000000..5ec9f25a --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-source-return.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-uncaught-copy-frame.json b/docs/validation/paste-copy/frames/tablet100-uncaught-copy-frame.json new file mode 100644 index 00000000..f5e24d59 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-uncaught-copy-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "uncaught-rejection-explicit-copy", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-uncaught-copy.xml b/docs/validation/paste-copy/frames/tablet100-uncaught-copy.xml new file mode 100644 index 00000000..ae3af224 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-uncaught-copy.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-uncaught-offer-frame.json b/docs/validation/paste-copy/frames/tablet100-uncaught-offer-frame.json new file mode 100644 index 00000000..47f3af28 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-uncaught-offer-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "uncaught-rejection-offer", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-uncaught-offer.xml b/docs/validation/paste-copy/frames/tablet100-uncaught-offer.xml new file mode 100644 index 00000000..51c9e7eb --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-uncaught-offer.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-unicode-copy-frame.json b/docs/validation/paste-copy/frames/tablet100-unicode-copy-frame.json new file mode 100644 index 00000000..c691cdec --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-unicode-copy-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "unicode-exact-copy", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 1, + "launch_epoch": 1, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet100-unicode-copy.xml b/docs/validation/paste-copy/frames/tablet100-unicode-copy.xml new file mode 100644 index 00000000..1d1b4e38 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet100-unicode-copy.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-copied-frame.json b/docs/validation/paste-copy/frames/tablet200-copied-frame.json new file mode 100644 index 00000000..ae498689 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-copied-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-exact-copy", + "external_caller": false, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-copied.xml b/docs/validation/paste-copy/frames/tablet200-copied.xml new file mode 100644 index 00000000..3105fccc --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-copied.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-keyboard-focus-frame.json b/docs/validation/paste-copy/frames/tablet200-keyboard-focus-frame.json new file mode 100644 index 00000000..ee233938 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-keyboard-focus-frame.json @@ -0,0 +1,7 @@ +{ + "phase": "copy-keyboard-focused", + "scope": "Owned JavaScript\/native paste\/Copy protocols; no service, physical-typing or broad parity credit", + "font_scale": 2, + "launch_epoch": 2, + "synchronization": "Compose idle; hierarchy before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-keyboard-focus.xml b/docs/validation/paste-copy/frames/tablet200-keyboard-focus.xml new file mode 100644 index 00000000..575c9433 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-keyboard-focus.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-pending-frame.json b/docs/validation/paste-copy/frames/tablet200-pending-frame.json new file mode 100644 index 00000000..0457f303 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-pending-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "paste-fallback-before-copy", + "external_caller": false, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": false, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-pending.xml b/docs/validation/paste-copy/frames/tablet200-pending.xml new file mode 100644 index 00000000..7e99a604 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-pending.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-source-return-frame.json b/docs/validation/paste-copy/frames/tablet200-source-return-frame.json new file mode 100644 index 00000000..e89c84b9 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-source-return-frame.json @@ -0,0 +1,8 @@ +{ + "phase": "translation-context-return", + "external_caller": true, + "font_scale": 2, + "scope": "Unmodified frozen instant-translate-paste after explicit review\/Run from a separate owned Android caller; collector success is separate from service success", + "ime_visible": null, + "synchronization": "Idle native\/Compose state; hierarchy captured before PNG" +} \ No newline at end of file diff --git a/docs/validation/paste-copy/frames/tablet200-source-return.xml b/docs/validation/paste-copy/frames/tablet200-source-return.xml new file mode 100644 index 00000000..02537db1 --- /dev/null +++ b/docs/validation/paste-copy/frames/tablet200-source-return.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/paste-copy/identities/candidate-v1.json b/docs/validation/paste-copy/identities/candidate-v1.json new file mode 100644 index 00000000..dd9d29d7 --- /dev/null +++ b/docs/validation/paste-copy/identities/candidate-v1.json @@ -0,0 +1,239 @@ +{ + "source_commit": "235fe997aa5a0d07a3b535abc3d406ef93c52d44", + "scope": "Intermediate Copy fallback build; later button-shape refinement is not included; no final-runtime credit", + "source_hashes": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "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/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/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": "03cc93b5e0fd05d7baa9c9164004f3cc79e4bd48e8e190a33a20748dfdb6a0d8", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "ef799e02e8d95738d5642cece8898a9a65d2b416b616f37c1687451732228d4e", + "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/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/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": "7d539b8b669fa8f9ad175fc1a3be15079fdefc456ba19bb76b3b56b3f038a6d5", + "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": "73d15095bc3f57aca7c4c42245d2f18a7f9e5be636126023f9a37bb2c3001ef8", + "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/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": "b5b5bec67816ec4044ec18099bcf85802a3235f3d9adf34839673c2decf47d1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "acc8fd335b39f76b47b68629b80ef5bd8e6a65f8c6c74326265d9f7fe44b556f", + "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": "033566786c70d3fcb104e3fcc5673473c4ffc5c1b78e2fd26615c1789f41154c", + "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/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": "2f30155d492faa91bb7d4b96ba0bd5eba19ae34abea7e82380ca330ce77971b6", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "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", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle.properties": "e43a00491832254a35cf5a979ef6de17f78c4e159d446be39319d2e3d3e46325", + "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/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": "2c13b94e4dfe29ba2f8726bbb79bf2d8f147fab13847c66a50d1603a0f54b510", + "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/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": "a9d0a581a46398d8643b58803537bb593ba2c4e2ee89374b94ea135f8d825c80", + "settings.gradle.kts": "6a8db88135b364d8bd2facb607fc4e9e9476c171d2b7f7f3a0892c57a9ee6487" + }, + "apk_hashes": { + "app-debug-androidTest.apk": "967da0d86a0d98ea5d7a85ec886a5c7da462ea3f9c0db7493f77b7d1a64b494a", + "app-debug.apk": "636a7a10f664f29e64d61a6dc8f98ce596080b4dfb13eac5b54057ab172475d8" + }, + "build_log_sha256": "d48888ddf8332f72fdb03213313fd5b88c1cdaaa4c5b9460dae809a344ea5bcc", + "lint": { + "Error": 0, + "Fatal": 0, + "Warning": 55 + }, + "jvm_cases": 298 +} diff --git a/docs/validation/paste-copy/identities/candidate-v2.json b/docs/validation/paste-copy/identities/candidate-v2.json new file mode 100644 index 00000000..d140046f --- /dev/null +++ b/docs/validation/paste-copy/identities/candidate-v2.json @@ -0,0 +1,540 @@ +{ + "completed": true, + "source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "test_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "source_hashes": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "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/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/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": "ef799e02e8d95738d5642cece8898a9a65d2b416b616f37c1687451732228d4e", + "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/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/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": "7d539b8b669fa8f9ad175fc1a3be15079fdefc456ba19bb76b3b56b3f038a6d5", + "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": "73d15095bc3f57aca7c4c42245d2f18a7f9e5be636126023f9a37bb2c3001ef8", + "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/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/ExtensionRuntime.kt": "6d9652e8141795c05ba8686594151e4f271ccdaae025a93dfd604c831004fb55", + "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": "af82c06605a0531e87854d5602592faa05ff6fe629d04922854e8337f9800025", + "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/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/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "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", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle.properties": "e43a00491832254a35cf5a979ef6de17f78c4e159d446be39319d2e3d3e46325", + "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/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": "742cda1b7165294e5615b077c6838cbd13c57b5e2162a051be1cf812720d551a", + "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/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": "95978cb2172e01da0dccdf28227e2a717b63331d1a8ed2bad16aae9287a76f02", + "settings.gradle.kts": "6a8db88135b364d8bd2facb607fc4e9e9476c171d2b7f7f3a0892c57a9ee6487" + }, + "apk_hashes": { + "app-debug-androidTest.apk": "6bd62608478c96e6d150e17514d89c13f2202f626208632ace6734c95cadce86", + "app-debug.apk": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b" + }, + "build_log_sha256": "7f4bd36009dd6859a26f3c0ddc302778dcdd1fea1bfb289cf73f62c7b17a5694", + "jvm_cases": [ + "dev.tinycast.android.PaletteScrollHistoryTest#detachedLayoutDoesNotScrollOrForgetTheLastMeasuredViewport", + "dev.tinycast.android.ExtensionFormFileImportTest#aggregateLimitsRollBackTheWholeSelection", + "dev.tinycast.android.ExtensionFormFileImportTest#cleanupDoesNotFollowLinksToOtherData", + "dev.tinycast.android.ExtensionFormFileImportTest#directoriesRespectChoicePolicyAndRejectProviderCycles", + "dev.tinycast.android.ExtensionFormFileImportTest#actualStreamBytesAreBoundedEvenWhenSizeMetadataIsMissing", + "dev.tinycast.android.ExtensionFormFileImportTest#cancellationAfterAReadDiscardsTheUndeliveredCopy", + "dev.tinycast.android.ExtensionFormFileImportTest#aSelectedDirectoryRetainsItsHierarchyAndExactLeafBytes", + "dev.tinycast.android.ExtensionFormFileImportTest#losingTheCleanupOwnerRetainsDataUntilOwnershipIsRecovered", + "dev.tinycast.android.ExtensionFormFileImportTest#aProviderThatMakesNoReadProgressDoesNotSpinOrLeaveACopy", + "dev.tinycast.android.ExtensionFormFileImportTest#recoveryRemovesOnlyNonceOwnedOrphansFromAnEarlierProcess", + "dev.tinycast.android.ExtensionFormFileImportTest#recoveryLeavesLiveRequestsAndDeliveredImportsAlone", + "dev.tinycast.android.ExtensionFormFileImportTest#traversalNamesNeverBecomeDestinationPaths", + "dev.tinycast.android.ExtensionFormFileImportTest#anUndeliveredCommitCanBeDiscardedWithoutChangingUnrelatedData", + "dev.tinycast.android.ExtensionFormFileImportTest#aLinkedReplacementParentCannotReceiveCommitOrCleanup", + "dev.tinycast.android.ExtensionFormFileImportTest#selectedBytesAndUnicodeNamesAreExactAndRetainedCopiesStayReadable", + "dev.tinycast.android.ExtensionFormFileImportTest#storageRootRejectsTraversalAndLinkedImportDirectories", + "dev.tinycast.android.ExtensionSelectionDeliveryTest#eventAndRenderDeliverEachSelectionOnlyOnceBeforeAction", + "dev.tinycast.android.ExtensionSelectionDeliveryTest#initialEmptySelectionAndDifferentRootsStillNotify", + "dev.tinycast.android.ExtensionFormTypedValuesTest#exactInstantAndFractionalSecondsSurviveParsing", + "dev.tinycast.android.ExtensionFormTypedValuesTest#tagChangesPreserveExactOrderedValuesAndDoNotInventSelections", + "dev.tinycast.android.ExtensionFormTypedValuesTest#calendarPickerLabelsDoNotShiftInNonUtcZonesOrBefore1970", + "dev.tinycast.android.ExtensionFormTypedValuesTest#datetimeBoundsAreInclusiveAtTheExactInstant", + "dev.tinycast.android.ExtensionFormTypedValuesTest#anAmbiguousUneditedWallTimeKeepsItsExistingOffsetAndPrecision", + "dev.tinycast.android.ExtensionFormTypedValuesTest#absentDatesAreDistinctFromMalformedValuesAndKinds", + "dev.tinycast.android.ExtensionFormTypedValuesTest#aNonexistentDstWallTimeIsRejectedInsteadOfShifted", + "dev.tinycast.android.ExtensionFormTypedValuesTest#dateBoundsIncludeTheWholeLocalDayRatherThanOnlyTheirInstants", + "dev.tinycast.android.ExtensionFormTypedValuesTest#dateOnlyUsesTheFullDayMarkerAtLocalStartAndRejectsASkippedDay", + "dev.tinycast.android.ExtensionMarkdownModelTest#cancellationAfterParserLimitIsNotConvertedToAnUnavailableDocument", + "dev.tinycast.android.ExtensionMarkdownModelTest#referenceLinksResolveWithoutChangingTargetsOrTitles", + "dev.tinycast.android.ExtensionMarkdownModelTest#oversizedSourcesAndNodeCountsDoNotProducePartialDocuments", + "dev.tinycast.android.ExtensionMarkdownModelTest#tableCellBudgetAllowsItsBoundaryAndRejectsTheNextPaddedRow", + "dev.tinycast.android.ExtensionMarkdownModelTest#numericLineFeedsStayTextWhileExplicitBreaksAndCodeKeepTheirLines", + "dev.tinycast.android.ExtensionMarkdownModelTest#quotesAndDividersRemainSeparateBlocks", + "dev.tinycast.android.ExtensionMarkdownModelTest#fencedAndIndentedCodeKeepSpacesTabsAndBlankLines", + "dev.tinycast.android.ExtensionMarkdownModelTest#nestedListsPreserveStartingNumberAndParagraphs", + "dev.tinycast.android.ExtensionMarkdownModelTest#cancellationIsObservedBeforeParsing", + "dev.tinycast.android.ExtensionMarkdownModelTest#compactPaddedTableLimitBecomesAnUnavailableDocument", + "dev.tinycast.android.ExtensionMarkdownModelTest#escapesEntitiesAndLineBreaksFollowCommonMark", + "dev.tinycast.android.ExtensionMarkdownModelTest#tablesKeepHeaderAlignmentCodeAndCellValues", + "dev.tinycast.android.ExtensionMarkdownModelTest#headingAndNestedMarksKeepUnicodeAndCombiningText", + "dev.tinycast.android.ExtensionMarkdownModelTest#inlineCodeKeepsItsOwnWhitespaceAndMarks", + "dev.tinycast.android.ExtensionMarkdownModelTest#linkedImagesPreserveAlternativeAndRenderParameters", + "dev.tinycast.android.ExtensionMarkdownModelTest#strikeAndRawHtmlNeverBecomeExecutableMarkup", + "dev.tinycast.android.ExtensionPasteCopyTest#exactUnicodeNewlinesAndEscapesCanBeConsumedOnlyOnce", + "dev.tinycast.android.ExtensionPasteCopyTest#numericTextAndEmptyTextHaveExplicitSupportedRepresentations", + "dev.tinycast.android.ExtensionPasteCopyTest#unpairedSurrogatesAreRejectedWithoutChangingCombiningText", + "dev.tinycast.android.ExtensionPasteCopyTest#textAndRawRequestBoundsAreSeparateAndCheckedBeforeAllocation", + "dev.tinycast.android.ExtensionPasteCopyTest#malformedParametersDoNotLeakRawValuesIntoErrors", + "dev.tinycast.android.ExtensionPasteCopyTest#clearingDropsOutputEvenWhenTheOldCapabilityIsRetained", + "dev.tinycast.android.ExtensionPasteCopyTest#plainAlternativeTextDoesNotBecomeHtmlOrAFileName", + "dev.tinycast.android.ExtensionPasteCopyTest#optionalWindowPreferenceDoesNotGrantAutomaticPasteOrCopy", + "dev.tinycast.android.ExtensionPasteCopyTest#utf8RequestBytesAreBoundedEvenWhenThePlainAlternativeIsSmall", + "dev.tinycast.android.ShortcutReadinessTest#reconnectEpochRejectsAProbeEvenWithoutAnIntermediateFrame", + "dev.tinycast.android.ShortcutReadinessTest#armedRoutingRejectsStaleConnectionsAndExpiredOrDifferentChords", + "dev.tinycast.android.ShortcutReadinessTest#absentChordUnknownApprovalAndDisconnectStayExplicit", + "dev.tinycast.android.ShortcutReadinessTest#deadlinesRejectLateEventsAndOldTimeoutsDoNotExpireNewChecks", + "dev.tinycast.android.ShortcutReadinessTest#onlyTheFilteredCurrentPaletteChordCanCompleteACheckOnce", + "dev.tinycast.android.ShortcutReadinessTest#aSavedChordAndApprovalAloneDoNotClaimReadiness", + "dev.tinycast.android.ShortcutReadinessTest#cancelRemovesTheExpectedChordAndRejectsLateResults", + "dev.tinycast.android.ShortcutReadinessTest#lateDisconnectCannotClearANewerServiceConnection", + "dev.tinycast.android.ShortcutReadinessTest#changedAndClearedBindingsInvalidateTheCheck", + "dev.tinycast.android.ExtensionDetailImageTimeoutTest#deadlineCancelsThePendingWorkBeforeReportingAnImageFailure", + "dev.tinycast.android.ExtensionDetailImageTimeoutTest#successfulWorkRetainsItsResult", + "dev.tinycast.android.ExtensionDetailImageTimeoutTest#cancellationByTheViewOwnerRemainsCancellation", + "dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest#nativeModelMatchesPrimaryTextStylesLinksAndBlocksOutsideLiteralHtmlAndGfm", + "dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest#coreGrammarMatchesAll652PrimaryExamples", + "dev.tinycast.android.EmojiCatalogTest#filtersFavoritesAndRecentsHaveDeterministicOrder", + "dev.tinycast.android.EmojiCatalogTest#namesAliasesKeywordsAndMultipleWordsAreSearchable", + "dev.tinycast.android.EmojiCatalogTest#malformedCatalogsAreRejected", + "dev.tinycast.android.EmojiCatalogTest#bundledCatalogPreservesSequencesAndStableIdentities", + "dev.tinycast.android.EmojiCatalogTest#exactMatchesOutrankHistoryAndRecentIsBoundedWithoutDuplicates", + "dev.tinycast.android.SystemSettingsTest#searchFindsSpecificDestinations", + "dev.tinycast.android.SystemSettingsTest#catalogHasNoDuplicateOrReservedIdsOrNewAliases", + "dev.tinycast.android.SystemSettingsTest#onlyAppSpecificTargetsRequirePackageArguments", + "dev.tinycast.android.ExtensionGridContractTest#initialRemoteRequestWinsOverTheAutomaticFallback", + "dev.tinycast.android.ExtensionGridContractTest#emptySectionsDoNotAddSlotsAndTitledSectionsKeepOneHeading", + "dev.tinycast.android.ExtensionGridContractTest#aNewOrRemovedRequestReplacesThePendingOne", + "dev.tinycast.android.ExtensionGridContractTest#missingRequestRemainsPendingUntilItsItemArrives", + "dev.tinycast.android.ExtensionGridContractTest#aRemovedLocalItemFallsBackWithoutResurrectingAnAppliedRequest", + "dev.tinycast.android.ExtensionGridContractTest#changedRemoteRequestWinsOverAnExistingSelection", + "dev.tinycast.android.ExtensionGridContractTest#anAppliedRequestDoesNotUndoLocalNavigation", + "dev.tinycast.android.ExtensionGridContractTest#untitledSectionsHaveAFullSpanBoundaryAfterTheFirstSection", + "dev.tinycast.android.ExtensionCommandLaunchTest#argumentConsumersCannotChangeThePreparedValues", + "dev.tinycast.android.ExtensionCommandLaunchTest#undeclaredNonstringAndMissingRequiredArgumentsAreRejected", + "dev.tinycast.android.ExtensionCommandLaunchTest#ordinaryEmptyRequestDoesNotInventContextOrFallback", + "dev.tinycast.android.ExtensionCommandLaunchTest#crossExtensionRoutingAndBackgroundLaunchesAreRejected", + "dev.tinycast.android.ExtensionCommandLaunchTest#foregroundContextAndArgumentsArriveAsSeparateCopiedLaunchProperties", + "dev.tinycast.android.ExtensionCommandLaunchTest#requestIsBoundedBeforeParsingByUnitsAndUtf8Bytes", + "dev.tinycast.android.ExtensionCommandLaunchTest#requiredPreferencesAndDropdownSelectionsMustBeConfigured", + "dev.tinycast.android.ExtensionCommandLaunchTest#unsafeNamesAndUnknownOptionsNeverBecomeLaunches", + "dev.tinycast.android.ExtensionCommandLaunchTest#argumentCountsAndAmbiguousDefinitionsAreBounded", + "dev.tinycast.android.ExtensionCommandLaunchTest#contextMustBeAnObjectAndNestedCollectionsAreBounded", + "dev.tinycast.android.ExtensionCommandLaunchTest#parserDepthIsCheckedBeforeJsonAllocationAndQuotedBracketsRemainData", + "dev.tinycast.android.ExtensionFormValuesTest#disposalDropsAllEditorValues", + "dev.tinycast.android.ExtensionFormValuesTest#removedAndUnregisteredOwnersCannotAdoptAnotherFieldValue", + "dev.tinycast.android.ExtensionFormValuesTest#aNewPublicationCanTransformOrRejectTheNativeEdit", + "dev.tinycast.android.ExtensionFormValuesTest#booleanFalseIsAnEventValueRatherThanMissingData", + "dev.tinycast.android.ExtensionFormValuesTest#fieldsCannotBorrowEachOthersPendingValues", + "dev.tinycast.android.ExtensionFormValuesTest#samePublicationDoesNotOverwriteAnEditBeforeBlur", + "dev.tinycast.android.ReviewedTextInputTest#authority_is_bound_to_both_the_original_owner_and_target", + "dev.tinycast.android.ReviewedTextInputTest#a_char_sequence_cannot_bypass_the_limit_by_lying_about_its_length", + "dev.tinycast.android.ReviewedTextInputTest#invalid_replacements_revoke_an_already_approved_input", + "dev.tinycast.android.ReviewedTextInputTest#diagnostics_and_errors_do_not_echo_input_content", + "dev.tinycast.android.ReviewedTextInputTest#receiving_copies_mutable_text_without_normalizing_unicode_or_whitespace", + "dev.tinycast.android.ReviewedTextInputTest#cancellation_clears_only_the_current_review", + "dev.tinycast.android.ReviewedTextInputTest#a_changed_command_rejects_a_retained_run_callback_without_consuming_the_review", + "dev.tinycast.android.ReviewedTextInputTest#releasing_an_outgoing_input_does_not_clear_a_new_review_or_invocation", + "dev.tinycast.android.ReviewedTextInputTest#a_queued_cancel_from_the_review_cannot_revoke_the_approved_invocation", + "dev.tinycast.android.ReviewedTextInputTest#whitespace_is_valid_selection_text_and_share_has_no_writable_source", + "dev.tinycast.android.ReviewedTextInputTest#wrong_types_are_rejected_without_calling_their_to_string", + "dev.tinycast.android.ReviewedTextInputTest#an_outgoing_review_cannot_approve_or_change_its_replacement", + "dev.tinycast.android.ReviewedTextInputTest#approval_requires_a_chosen_command_and_consumes_the_current_review_once", + "dev.tinycast.android.ReviewedTextInputTest#size_limit_counts_utf16_units_and_accepts_the_exact_boundary", + "dev.tinycast.android.ModifierTapTest#imeWindowChangeDoesNotCancelButAppAndUnknownWindowsDo", + "dev.tinycast.android.ModifierTapTest#malformedModifierIdentitiesFailClosed", + "dev.tinycast.android.ModifierTapTest#repeatsCancelFirstAndSecondTap", + "dev.tinycast.android.ModifierTapTest#bindingAndConnectionEpochChangesDiscardEarlierTap", + "dev.tinycast.android.ModifierTapTest#twoCompletePairsDispatchExactlyOnceOnSecondRelease", + "dev.tinycast.android.ModifierTapTest#sideConflictsAreRejectedAcrossTargetsWithoutRejectingDistinctSides", + "dev.tinycast.android.ModifierTapTest#ordinaryTypingAndChordsCancelBothBeforeAndDuringSecondPress", + "dev.tinycast.android.ModifierTapTest#delayedWindowNotificationBeforeFirstKeyAlsoPreservesAnInProgressFirstPress", + "dev.tinycast.android.ModifierTapTest#simultaneousModifiersAndAdditionalMetaStateCancel", + "dev.tinycast.android.ModifierTapTest#ordinaryCtrlChordDownAndUpStillPassThroughTheChordEngine", + "dev.tinycast.android.ModifierTapTest#exactlyOneOfServiceAndForegroundObserversCanDispatchTheSameEvents", + "dev.tinycast.android.ModifierTapTest#missingMismatchedAndDuplicateReleasesCannotActivate", + "dev.tinycast.android.ModifierTapTest#inclusiveTimingBoundariesAreDeterministic", + "dev.tinycast.android.ModifierTapTest#allFourModifierFamiliesAndBothSidesHaveStableIdentities", + "dev.tinycast.android.ModifierTapTest#enteringAndLeavingRecorderWithoutKeyEventsStillDiscardsEarlierTap", + "dev.tinycast.android.ModifierTapTest#differentDeviceOrDifferentPhysicalModifierCannotCompleteAPair", + "dev.tinycast.android.ModifierTapTest#delayedOldWindowNotificationCannotCancelNewerKeysFromCapturedTrace", + "dev.tinycast.android.ModifierTapTest#cancellationStaleDeliveryAndNonmonotonicTimesClearPendingGesture", + "dev.tinycast.android.ModifierTapTest#windowChangesDuringEitherTapStillCancelIncludingUnknownAndEqualTime", + "dev.tinycast.android.ModifierTapTest#eitherSideAndSpecificSideDispatchUseTheActualPersistedIdentity", + "dev.tinycast.android.ModifierTapTest#explicitResetDiscardsPartialGestureAcrossFocusConfigurationOrConnectionChanges", + "dev.tinycast.android.ModifierTapTest#pauseAndOwnershipTransferNeverCompleteAPartialTap", + "dev.tinycast.android.ModifierTapTest#holdsAndTooSlowSecondPressNeverDispatch", + "dev.tinycast.android.ExtensionFormContractTest#reusedNativeIdsCannotChangeTheirLogicalFieldOrControlType", + "dev.tinycast.android.ExtensionFormContractTest#rerendersDoNotDuplicateFocusAndBlur", + "dev.tinycast.android.ExtensionFormContractTest#anExplicitEmptyValuedOptionKeepsItsOwnTitle", + "dev.tinycast.android.ExtensionFormContractTest#clearingAnOutgoingFormDropsItsPendingFocusWithoutDispatching", + "dev.tinycast.android.ExtensionFormContractTest#changedOptionMeaningInvalidatesItsCapturedChoice", + "dev.tinycast.android.ExtensionFormContractTest#aNewOptionAtTheSamePositionCannotInheritAnOldMenuChoice", + "dev.tinycast.android.ExtensionFormContractTest#reorderingTheSameOptionsDoesNotChangeTheirIdentity", + "dev.tinycast.android.ExtensionFormContractTest#ordinaryRerendersKeepTheSameFieldAuthority", + "dev.tinycast.android.ExtensionFormContractTest#aRemovedFieldCannotReceiveFocusOrAStaleBlur", + "dev.tinycast.android.ExtensionFormContractTest#selectedTitlesNeverReplaceTheUnderlyingSubmittedValue", + "dev.tinycast.android.ExtensionFormContractTest#aMissingSelectionHasAnExplicitLabelWithoutInventingANewValue", + "dev.tinycast.android.ExtensionFormContractTest#reentrantFocusFromBlurSupersedesTheOutgoingTransition", + "dev.tinycast.android.ExtensionFormContractTest#duplicateReadableTitlesStillIdentifyDistinctValues", + "dev.tinycast.android.ExtensionFormContractTest#anOutgoingBlurCannotClearTheNewerFocusedField", + "dev.tinycast.android.ExtensionFormContractTest#aReplacementFieldWithTheSameLogicalIdRejectsTheOldNativeCallback", + "dev.tinycast.android.ExtensionFormContractTest#blurValidationCanRemoveTheNextFieldBeforeItReceivesFocus", + "dev.tinycast.android.ExtensionFormContractTest#identicalLogicalIdsInAnotherRootCannotInheritAQueuedFieldEvent", + "dev.tinycast.android.ShortcutTest#duplicateBindingsAndEphemeralTargetsAreRejected", + "dev.tinycast.android.ShortcutTest#devicesAreTrackedSeparatelyAndDisconnectedDevicesAreCleared", + "dev.tinycast.android.ShortcutTest#matchingDownAndUpAreConsumedEvenAfterModifiersAreReleased", + "dev.tinycast.android.ShortcutTest#invocationTokensAreOneUseAndExpireBeforeAndAfterConsumption", + "dev.tinycast.android.ShortcutTest#outstandingInvocationTokensAreBounded", + "dev.tinycast.android.ShortcutTest#plainTypingAndSystemOrEditorConflictsAreRejected", + "dev.tinycast.android.ShortcutTest#recordingPauseAndRebindingPreserveAlreadyConsumedReleases", + "dev.tinycast.android.ShortcutTest#defaultAndDisabledConfigurationsAreValid", + "dev.tinycast.android.ShortcutTest#unrelatedTypingAndUnboundChordsPassBothEnds", + "dev.tinycast.android.ShortcutTest#freshPressRecoversFromLostReleaseWithoutSwallowingTyping", + "dev.tinycast.android.ShortcutTest#repeatsNeverDispatchAnotherCommandOrCaptureAnUnmatchedHold", + "dev.tinycast.android.PaletteMenuOwnershipTest#focusedMenuTransitionInvalidatesAnInProgressPairOnlyOnce", + "dev.tinycast.android.PaletteMenuOwnershipTest#inactiveCleanupDoesNotCancelKeysInTheNewWindow", + "dev.tinycast.android.PaletteMenuOwnershipTest#outgoingOwnerCannotCloseOrDetachReplacementMenu", + "dev.tinycast.android.CalculatorActionsTest#answersBeyondTheParserLimitRemainCopyableWithoutAnUnusableChain", + "dev.tinycast.android.CalculatorActionsTest#modifiedEnterDefaultsDoNotReserveAnExistingConfigurableBinding", + "dev.tinycast.android.CalculatorActionsTest#explicitQuantityLiteralsAcceptOnlyKnownUnitsAndFiniteValues", + "dev.tinycast.android.CalculatorActionsTest#acceleratorsConsumeHeldRepeatsAndReleaseAfterTheResultChanges", + "dev.tinycast.android.CalculatorActionsTest#scalarChainingKeepsExplicitIntentAndAllowsTheNextOperation", + "dev.tinycast.android.CalculatorActionsTest#ordinaryCommandsAndWebResultsDoNotOfferCalculatorActions", + "dev.tinycast.android.CalculatorActionsTest#sharedResultIdsCannotAuthorizeChangedQueryValueSelectionCategoryOrRoute", + "dev.tinycast.android.CalculatorActionsTest#copyingUsesTheSelectedPayloadWithoutRoundingOrReevaluatingIt", + "dev.tinycast.android.CalculatorActionsTest#functionsAndUnitsRetainTheirExpressionAndAnswer", + "dev.tinycast.android.CalculatorActionsTest#quantitiesChainWithoutDiscardingTheirUnit", + "dev.tinycast.android.CalculatorActionsTest#fullCalculationUsesTheDisplayedMultiplicationAndStripsOnlyTheModePrefix", + "dev.tinycast.android.BackupPlannerTest#conflictingEffectiveAliasesRejectTheWholePlan", + "dev.tinycast.android.BackupPlannerTest#clipMergeCannotSilentlyTrimExistingData", + "dev.tinycast.android.BackupPlannerTest#preferencesMergeKeepsExistingOverridesAndRank", + "dev.tinycast.android.BackupPlannerTest#noOrUnavailableCategoryCannotBeApplied", + "dev.tinycast.android.BackupPlannerTest#deduplicatedContentRemapsItsKeyboardBinding", + "dev.tinycast.android.BackupPlannerTest#remappedAliasesCannotSilentlyDiscardConflictingValues", + "dev.tinycast.android.BackupPlannerTest#remappedRankingUsesMaximumRatherThanInputOrder", + "dev.tinycast.android.BackupPlannerTest#contentDuplicatesRemapPinsAliasesAndLearning", + "dev.tinycast.android.BackupPlannerTest#oldBackupOrUnselectedShortcutCategoryKeepsCurrentBindings", + "dev.tinycast.android.BackupPlannerTest#remappingCannotDiscardDistinctKeyboardBindings", + "dev.tinycast.android.BackupPlannerTest#preservedDocumentBindingsBlockCollisionsForMergeAndReplace", + "dev.tinycast.android.BackupPlannerTest#replacementTouchesOnlySelectedCategories", + "dev.tinycast.android.BackupPlannerTest#identityWinsWhenAnEarlierItemAlsoMatchesIncomingContent", + "dev.tinycast.android.BackupPlannerTest#mergeIsIdempotentAndKeepsConflictingIdentity", + "dev.tinycast.android.BackupPlannerTest#preservedDocumentModifierSidesBlockOverlapsButAllowDistinctSides", + "dev.tinycast.android.ExtensionGridNavigationTest#sectionHeadersAndRaggedRowsDoNotStealSelection", + "dev.tinycast.android.ExtensionGridNavigationTest#homeEndEmptyAndStaleIndicesAreSafe", + "dev.tinycast.android.ExtensionGridNavigationTest#assetsResolveInsidePackageAndEscapesAreRejected", + "dev.tinycast.android.ExtensionGridNavigationTest#aspectRatiosUseOnlySupportedFiniteValues", + "dev.tinycast.android.ExtensionGridNavigationTest#adaptiveColumnsRespectUsableTouchWidth", + "dev.tinycast.android.ExtensionGridNavigationTest#fourWayNavigationUsesVisualRowsAndClampsEdges", + "dev.tinycast.android.FolderGrantTransactionTest#cancellationDuringThePostCommitReadKeepsTheSavedFoldersGrant", + "dev.tinycast.android.FolderGrantTransactionTest#failedConfigurationWriteRollsBackTheNewGrant", + "dev.tinycast.android.FolderGrantTransactionTest#cancellationCannotReleaseAPreexistingReadGrant", + "dev.tinycast.android.FolderGrantTransactionTest#failedRemovalWriteRetainsTheGrantForTheExistingConfiguration", + "dev.tinycast.android.FolderGrantTransactionTest#cancellationWhenCommitReturnsKeepsTheSavedFoldersGrant", + "dev.tinycast.android.FolderGrantTransactionTest#cancellationWhenRemovalReturnsCannotSkipItsGrantRelease", + "dev.tinycast.android.FolderGrantTransactionTest#cancellationWhenAcquisitionReturnsRollsBackTheNewGrant", + "dev.tinycast.android.FolderGrantTransactionTest#successfulCommitTransfersOwnershipToTheConfiguration", + "dev.tinycast.android.FolderGrantTransactionTest#cancellationBeforeTakingDoesNotAcquireOrReleaseAGrant", + "dev.tinycast.android.FolderGrantTransactionTest#cancelledRemovalBeforeTheWriteRetainsTheExistingGrant", + "dev.tinycast.android.FolderGrantTransactionTest#replacementReaderCannotSeeTheGrantBeforeValidationRollback", + "dev.tinycast.android.FolderGrantTransactionTest#failedValidationRollsBackOnlyTheNewGrant", + "dev.tinycast.android.FolderGrantTransactionTest#unknownPostRenameResultRetainsTheGrantBeforeReplacementReads", + "dev.tinycast.android.ExtensionFormSubmissionTest#submitBlurUsesTheLatestEditExactlyOnceAndAllowsRefocus", + "dev.tinycast.android.ExtensionFormSubmissionTest#aMissingOrDisposedFormCannotPrepareSubmission", + "dev.tinycast.android.ExtensionFormSubmissionTest#disposalDuringBlurInvalidatesTheOutgoingSubmit", + "dev.tinycast.android.ExtensionFormSubmissionTest#aReentrantSuccessorCannotInheritTheOutgoingRequest", + "dev.tinycast.android.ExtensionFormSubmissionTest#changingTheCallbackForTheSameOwnerAlsoInvalidatesPreparation", + "dev.tinycast.android.ExtensionFormSubmissionTest#oldDisposalCannotRemoveTheCurrentFormCallback", + "dev.tinycast.android.ExtensionFormSubmissionTest#aRemovedFieldCannotReceiveSubmitBlur", + "dev.tinycast.android.UpdatePolicyTest#onlyExplicitApprovedHttpsRedirectHostsAreAccepted", + "dev.tinycast.android.UpdatePolicyTest#candidateRequiresOneBoundedMatchingAsset", + "dev.tinycast.android.UpdatePolicyTest#checksumMustMatchExactlyOneFilename", + "dev.tinycast.android.UpdatePolicyTest#releaseCannotRedirectDiscoveryToAnotherRepoOrPrivateHost", + "dev.tinycast.android.UpdatePolicyTest#exactSignerAndStrictlyNewerArchiveAreRequired", + "dev.tinycast.android.UpdatePolicyTest#manifestRejectsWrongPackageSchemaOrInvalidIdentity", + "dev.tinycast.android.WeakValueTokensTest#changedValuesRemainDistinctAndAnExistingInstanceKeepsItsToken", + "dev.tinycast.android.WeakValueTokensTest#boundedHistoryReportsEvictionWithoutChangingTheCurrentToken", + "dev.tinycast.android.WeakValueTokensTest#equalReplacementSurvivesClearingTheOlderWrapper", + "dev.tinycast.android.ExtensionMetadataVisualsTest#freshlySerializedAdaptiveIconsRetainTheSameVisualValue", + "dev.tinycast.android.ExtensionMetadataVisualsTest#changedSourceMaskAndTintDoNotAdoptThePreviousVisualIdentity", + "dev.tinycast.android.ExtensionMetadataVisualsTest#adaptiveColorIdentityUsesTheSameShadeAsItsCurrentRenderer", + "dev.tinycast.android.extensions.NodeCpuInfoTest#readsOnlyModelFieldsAndNeverReturnsSerialOrHardwareIdentifiers", + "dev.tinycast.android.extensions.NodeCpuInfoTest#convertsEachCoreAndKeepsSparseIdsWithoutInventingCores", + "dev.tinycast.android.extensions.NodeCpuInfoTest#convertsNonHundredTickClocksAndTruncatesFractionalMilliseconds", + "dev.tinycast.android.extensions.NodeCpuInfoTest#refusesOverflowAndUnsafeJavascriptIntegers", + "dev.tinycast.android.extensions.NodeCpuInfoTest#aSourceThatStopsMakingProgressDoesNotSpin", + "dev.tinycast.android.extensions.NodeCpuInfoTest#rejectsOversizedAndExcessiveCoreData", + "dev.tinycast.android.extensions.NodeCpuInfoTest#boundedStreamsAcceptTheExactLimitAndRejectOneMoreByte", + "dev.tinycast.android.extensions.NodeCpuInfoTest#absentOptionalMetadataUsesNodeUnknownAndZeroConventions", + "dev.tinycast.android.extensions.NodeCpuInfoTest#securityDenialAndInvalidClocksReturnUnavailable", + "dev.tinycast.android.extensions.NodeCpuInfoTest#invalidCoreRowsRejectTheSnapshotInsteadOfChangingItsDenominator", + "dev.tinycast.android.extensions.NodeCpuInfoTest#readersReceiveOnlyFixedPathsAndValidatedCoreIndices", + "dev.tinycast.android.extensions.NodeCpuInfoTest#modelsAreBoundedAndControlCharactersAreExcluded", + "dev.tinycast.android.extensions.NodeCpuInfoTest#missingOrDeniedStatisticsReturnAnEmptyArrayWithoutOtherReads", + "dev.tinycast.android.extensions.NodeCpuInfoTest#optionalFrequencyErrorsDoNotFabricateAReportedFrequency", + "dev.tinycast.android.CommandEngineTest#constantsCanImmediatelyPrecedeAsciiMultiplication", + "dev.tinycast.android.CommandEngineTest#knownConstantOperandsDoNotNeedADecimalDigitAndWordsStillFail", + "dev.tinycast.android.CommandEngineTest#xInWordsAndIncompleteExpressionsRemainSearches", + "dev.tinycast.android.CommandEngineTest#rightAssociativePower", + "dev.tinycast.android.CommandEngineTest#pinsLeadEmptyQuery", + "dev.tinycast.android.CommandEngineTest#exactAndPrefixRankAboveSubsequence", + "dev.tinycast.android.CommandEngineTest#arithmeticPrecedence", + "dev.tinycast.android.CommandEngineTest#exactAliasWins", + "dev.tinycast.android.CommandEngineTest#functions", + "dev.tinycast.android.CommandEngineTest#xMultiplicationRetainsPrecedenceAndFunctionNames", + "dev.tinycast.android.CommandEngineTest#refusesOversizedExpression", + "dev.tinycast.android.CommandEngineTest#arithmeticOperatorsTriggerRootCalculation", + "dev.tinycast.android.CommandEngineTest#invalidMathDoesNotCrashOrProduceNan", + "dev.tinycast.android.CommandEngineTest#localeIndependentOutput", + "dev.tinycast.android.CommandEngineTest#stableOrderingAndUsage", + "dev.tinycast.android.CommandEngineTest#explicitCalculatorModeAcceptsNumbers", + "dev.tinycast.android.CommandEngineTest#unaryMinusPrecedence", + "dev.tinycast.android.CommandEngineTest#convertsTimeAndData", + "dev.tinycast.android.CommandEngineTest#functionsConstantsAndConversionsKeepTheirIntentionalSearchBehavior", + "dev.tinycast.android.CommandEngineTest#percentages", + "dev.tinycast.android.CommandEngineTest#multiplicationDisplayUsesTheRealSymbolAndKeepsResultsNumeric", + "dev.tinycast.android.CommandEngineTest#convertsTemperature", + "dev.tinycast.android.CommandEngineTest#calculatorPrefixAndUnicodeOperators", + "dev.tinycast.android.CommandEngineTest#ordinaryNumbersRemainRootSearches", + "dev.tinycast.android.CommandEngineTest#rejectsIncompatibleUnits", + "dev.tinycast.android.CommandEngineTest#convertsLength", + "dev.tinycast.android.CommandEngineTest#fuzzySubsequenceMatches", + "dev.tinycast.android.ExtensionHttpTest#plaintextIsRejectedBeforeCreatingATransport", + "dev.tinycast.android.ExtensionHttpTest#boundedBodyAlwaysClosesTheConnection", + "dev.tinycast.android.ExtensionHttpTest#cancellationDisconnectsAReadThatIgnoresThreadInterruption", + "dev.tinycast.android.ExtensionHttpTest#credentialRedirectCannotChangePorts", + "dev.tinycast.android.ExtensionHttpTest#absoluteDeadlineStopsAStreamThatKeepsDeliveringBytes", + "dev.tinycast.android.ExtensionHttpTest#repeatedCommandScopeCancellationReleasesEveryTransport", + "dev.tinycast.android.ExtensionHttpTest#completedResponseContainsNoLiveConnection", + "dev.tinycast.android.FolderIndexTest#resultsAreBoundedAndQueriesCanBeCancelled", + "dev.tinycast.android.FolderIndexTest#identityUsesProviderAndPersistentDocumentId", + "dev.tinycast.android.FolderIndexTest#typesRespectDirectoriesAndNativeMime", + "dev.tinycast.android.FolderIndexTest#hiddenNamesRankAfterVisibleNamesAtEqualScore", + "dev.tinycast.android.FolderIndexTest#filenameMatchesOutrankPathOnlyMatches", + "dev.tinycast.android.FolderIndexTest#overlappingScopesDoNotDuplicateAnIdentity", + "dev.tinycast.android.FolderIndexTest#emptySearchUsesModifiedDateWithStableOrdering", + "dev.tinycast.android.TinycastGridParityTest#verticalNavigationMatchesTinycastAcrossSectionsAndRaggedRows", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#svgBoundsStructuralAndNumericWork", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#bothDocumentedTintSpellingsAndDataSourcesWork", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#packagePathsDecodeBeforeCanonicalContainment", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#svgInspectionHonorsCancellation", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#svgRejectsDeclarationsActiveContentAndExternalResources", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#packageSymlinksCannotReadOutsideTheirOwner", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#invalidOrAmbiguousHintsAreRejected", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#boundedStaticSvgSupportsPathsAndLocalGradients", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#svgRejectsDanglingNonGradientDuplicateAndInheritedReferences", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#renderHintsPreserveUnrelatedServiceQueryBytes", + "dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest#untrustedSchemesAuthoritiesCredentialsAndPortsAreRejected" + ], + "lint": { + "Error": 0, + "Fatal": 0, + "Warning": 55 + } +} diff --git a/docs/validation/paste-copy/identities/owned-harness-v3.json b/docs/validation/paste-copy/identities/owned-harness-v3.json new file mode 100644 index 00000000..c2d711a0 --- /dev/null +++ b/docs/validation/paste-copy/identities/owned-harness-v3.json @@ -0,0 +1,232 @@ +{ + "test_source_commit": "3501a79f9ce2d87d9abccd6504ce6f04b565dfe1", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "69bdc18400ec48bd09278a45bd7b2660252eeff637e93bec4c661049b03a054a", + "source_hashes": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "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": "62d78295cc4530138dfdd306db534b0039361ea29560f4eb36f92e2f484a3c5d", + "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/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": "ef799e02e8d95738d5642cece8898a9a65d2b416b616f37c1687451732228d4e", + "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/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/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": "7d539b8b669fa8f9ad175fc1a3be15079fdefc456ba19bb76b3b56b3f038a6d5", + "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": "73d15095bc3f57aca7c4c42245d2f18a7f9e5be636126023f9a37bb2c3001ef8", + "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/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/ExtensionRuntime.kt": "6d9652e8141795c05ba8686594151e4f271ccdaae025a93dfd604c831004fb55", + "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": "af82c06605a0531e87854d5602592faa05ff6fe629d04922854e8337f9800025", + "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/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/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "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", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle.properties": "e43a00491832254a35cf5a979ef6de17f78c4e159d446be39319d2e3d3e46325", + "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/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": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "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/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": "74c41cffeb6efb6212dc46d8039f0fe92617be1ddc975c99d1b8164c47604a0e", + "settings.gradle.kts": "6a8db88135b364d8bd2facb607fc4e9e9476c171d2b7f7f3a0892c57a9ee6487" + }, + "build_log_sha256": "3262b9a3ce84c6299f455f0f02a3535f0b52c572f7a0d82025a4065e1c2cfc69" +} diff --git a/docs/validation/paste-copy/identities/owned-harness-v5.json b/docs/validation/paste-copy/identities/owned-harness-v5.json new file mode 100644 index 00000000..cb3e66db --- /dev/null +++ b/docs/validation/paste-copy/identities/owned-harness-v5.json @@ -0,0 +1,232 @@ +{ + "test_source_commit": "d29139e620f07509a3c8804debf5ed725d394638", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "597a2c3a4122cbc5aa5b79fe3ffcae889f6655f7fabd187f4ffbfbb16d1c9065", + "source_hashes": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "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": "1dc7187ca0db6dc51634e854a73e95868348d5c73357d2323bde37406343d344", + "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/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": "ef799e02e8d95738d5642cece8898a9a65d2b416b616f37c1687451732228d4e", + "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/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/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": "7d539b8b669fa8f9ad175fc1a3be15079fdefc456ba19bb76b3b56b3f038a6d5", + "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": "73d15095bc3f57aca7c4c42245d2f18a7f9e5be636126023f9a37bb2c3001ef8", + "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/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/ExtensionRuntime.kt": "6d9652e8141795c05ba8686594151e4f271ccdaae025a93dfd604c831004fb55", + "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": "af82c06605a0531e87854d5602592faa05ff6fe629d04922854e8337f9800025", + "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/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/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "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", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle.properties": "e43a00491832254a35cf5a979ef6de17f78c4e159d446be39319d2e3d3e46325", + "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/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": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "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/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": "74c41cffeb6efb6212dc46d8039f0fe92617be1ddc975c99d1b8164c47604a0e", + "settings.gradle.kts": "6a8db88135b364d8bd2facb607fc4e9e9476c171d2b7f7f3a0892c57a9ee6487" + }, + "build_log_sha256": "3262b9a3ce84c6299f455f0f02a3535f0b52c572f7a0d82025a4065e1c2cfc69" +} diff --git a/docs/validation/paste-copy/identities/owned-harness-v6.json b/docs/validation/paste-copy/identities/owned-harness-v6.json new file mode 100644 index 00000000..47b1747b --- /dev/null +++ b/docs/validation/paste-copy/identities/owned-harness-v6.json @@ -0,0 +1,233 @@ +{ + "test_source_commit": "5f8875b2b98e6e4f71cd34adbe990181d55def9c", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "e29e9ae85098d862fe134e6fb64a0d169fd8abcf131562ca95557148fa63be71", + "source_hashes": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "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": "ded4b676486974361665a9563ee21871efa4b5b8ed41853385f48745547fc53a", + "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/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": "ef799e02e8d95738d5642cece8898a9a65d2b416b616f37c1687451732228d4e", + "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/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/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": "7d539b8b669fa8f9ad175fc1a3be15079fdefc456ba19bb76b3b56b3f038a6d5", + "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": "73d15095bc3f57aca7c4c42245d2f18a7f9e5be636126023f9a37bb2c3001ef8", + "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/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/ExtensionRuntime.kt": "6d9652e8141795c05ba8686594151e4f271ccdaae025a93dfd604c831004fb55", + "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": "af82c06605a0531e87854d5602592faa05ff6fe629d04922854e8337f9800025", + "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/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/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "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", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle.properties": "e43a00491832254a35cf5a979ef6de17f78c4e159d446be39319d2e3d3e46325", + "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/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": "72769a0deddc942524e17e8753e03b1011ab4dc800db6fbd0ca4f2b5e697d333", + "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/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": "74c41cffeb6efb6212dc46d8039f0fe92617be1ddc975c99d1b8164c47604a0e", + "settings.gradle.kts": "6a8db88135b364d8bd2facb607fc4e9e9476c171d2b7f7f3a0892c57a9ee6487" + }, + "build_log_sha256": "411fab0c6b1b4c18cae648e3f1aa2bc3054f136350ee77cebf569e27457ed33b", + "native_methods": 13 +} diff --git a/docs/validation/paste-copy/identities/owned-harness-v7.json b/docs/validation/paste-copy/identities/owned-harness-v7.json new file mode 100644 index 00000000..d2b91750 --- /dev/null +++ b/docs/validation/paste-copy/identities/owned-harness-v7.json @@ -0,0 +1,234 @@ +{ + "test_source_commit": "51de2cab70d14afb980d396288ca889685587421", + "runtime_source_commit": "08210fa24674be924a6ebc93ce09b4fd170dfbc5", + "app_sha256": "a5b1ccb154033800634f4f382759fcab74b606780dd6d8f3936de01991a0045b", + "test_apk_sha256": "0dc614d419c4429277f70a1ab6f6d460f8846d4d411d10953b7db8dfbdb6361f", + "source_hashes": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "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/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/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": "ef799e02e8d95738d5642cece8898a9a65d2b416b616f37c1687451732228d4e", + "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/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/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": "7d539b8b669fa8f9ad175fc1a3be15079fdefc456ba19bb76b3b56b3f038a6d5", + "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": "73d15095bc3f57aca7c4c42245d2f18a7f9e5be636126023f9a37bb2c3001ef8", + "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/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/ExtensionRuntime.kt": "6d9652e8141795c05ba8686594151e4f271ccdaae025a93dfd604c831004fb55", + "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": "af82c06605a0531e87854d5602592faa05ff6fe629d04922854e8337f9800025", + "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/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/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "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", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle.properties": "e43a00491832254a35cf5a979ef6de17f78c4e159d446be39319d2e3d3e46325", + "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/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": "7fedf586b094eb01160878d0af4e5529b681d2ac95ee2ebb34b52422d14c18a7", + "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/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": "27c289948ab773c897975846f1973796f697e3923b356af0e239e5f12980c6fa", + "settings.gradle.kts": "6a8db88135b364d8bd2facb607fc4e9e9476c171d2b7f7f3a0892c57a9ee6487" + }, + "build_log_sha256": "ad0b966b78bc584c6b17da8bcea01e0e916b4fdb689c5b921207431e6b8c567d", + "native_methods": 13, + "protocol_scope": "Interior reveal pointer coordinates and matched legacy gesture diagnostics; production app remains frozen at 08210fa2" +} diff --git a/docs/validation/paste-copy/pipelines/continuation-v7.json b/docs/validation/paste-copy/pipelines/continuation-v7.json new file mode 100644 index 00000000..e056c2dd --- /dev/null +++ b/docs/validation/paste-copy/pipelines/continuation-v7.json @@ -0,0 +1,28 @@ +{ + "completed": true, + "collector_sha256": "680787a89f4906efa9d9be74577b317068898046c2a0a06a8133bd15fd33fa29", + "cohorts": [ + { + "name": "owned-keyboard-landscape200-v7", + "exit_code": 0 + }, + { + "name": "regression-callers-tablet100-v7", + "exit_code": 0 + }, + { + "name": "regression-handoff-tablet100-v7", + "exit_code": 0 + }, + { + "name": "regression-callers-phone100-v7", + "exit_code": 0 + }, + { + "name": "regression-handoff-phone100-v7", + "exit_code": 0 + } + ], + "prior_pipeline": "final-matrix-v6 remains failed; four later planned cohorts were unrun", + "current": null +} diff --git a/docs/validation/paste-copy/pipelines/final-matrix-v6.json b/docs/validation/paste-copy/pipelines/final-matrix-v6.json new file mode 100644 index 00000000..2a3cd793 --- /dev/null +++ b/docs/validation/paste-copy/pipelines/final-matrix-v6.json @@ -0,0 +1,31 @@ +{ + "completed": false, + "collector_sha256": "b6943c2129c761775af5bd454b64aa6084da70ace51b1bd9ca2728a562a2ef51", + "cohorts": [ + { + "name": "owned-unicode-tablet200-v6", + "exit_code": 0 + }, + { + "name": "owned-keyboard-tablet200-v6", + "exit_code": 0 + }, + { + "name": "owned-unicode-phone200-v6", + "exit_code": 0 + }, + { + "name": "owned-keyboard-phone200-v6", + "exit_code": 0 + }, + { + "name": "owned-unicode-landscape200-v6", + "exit_code": 0 + }, + { + "name": "owned-keyboard-landscape200-v6", + "exit_code": 1 + } + ], + "current": "owned-keyboard-landscape200-v6" +} diff --git a/scripts/test-reviewed-text-input.py b/scripts/test-reviewed-text-input.py index 17c372ba..e3e6a06e 100644 --- a/scripts/test-reviewed-text-input.py +++ b/scripts/test-reviewed-text-input.py @@ -84,6 +84,8 @@ def main(): parser.add_argument('--reviewed-translation-command', choices=['instant-translate-copy', 'translate', 'quick-translate', 'quick-translate-view', 'instant-translate-paste', 'instant-translate-view'], default='instant-translate-copy') parser.add_argument('--expect-completion-return', action='store_true', help='Require the completed no-view touch Return in owned Form or the single reviewed no-view JSON workflow') + parser.add_argument('--expect-paste-copy-fallback', action='store_true', help='Require explicit native Copy and source return in the single frozen paste observation') + parser.add_argument('--paste-copy-legacy-reveal', action='store_true', help='Diagnostic control only: replay the old edge reveal in the single enlarged-landscape owned keyboard case') parser.add_argument('--classes', default='dev.tinycast.android.ReviewedTextDeviceTest') parser.add_argument('--expected', type=int, default=9) parser.add_argument('--font-scale', type=float, default=1) @@ -91,6 +93,13 @@ def main(): parser.add_argument('--inject-clipboard-restore-failure', action='store_true', help='Negative control only: retain the lease after an intentional process-death probe') args = parser.parse_args() + require(not args.paste_copy_legacy_reveal or + args.classes == 'dev.tinycast.android.ExtensionPasteCopyDeviceTest#keyboardCopyHidesImeAndEscapeReturns' and + args.layout == 'landscape' and args.font_scale == 2 and args.expected == 1, + 'Legacy reveal is limited to the single enlarged-landscape owned keyboard diagnostic') + require(not args.expect_paste_copy_fallback or + args.classes == SELECTED_TRANSLATION_CASE and args.reviewed_translation_command == 'instant-translate-paste' and args.translate_archive is not None, + 'Paste Copy fallback requires the single frozen paste observation and its Translate archive') require(args.serial.startswith('emulator-') and args.avd == 'Tinycast_Tablet_API_36', 'Use only the dedicated emulator') require(1 <= args.expected <= 24 and 1 <= args.font_scale <= 2, 'Invalid cohort size or font scale') require(re.fullmatch(r'[A-Za-z0-9_.,#]+', args.classes) is not None and all( @@ -100,6 +109,7 @@ def main(): 'dev.tinycast.android.ExtensionMarkdownDeviceTest', 'dev.tinycast.android.ExtensionDetailDeviceTest', 'dev.tinycast.android.ExtensionCommandHandoffDeviceTest', + 'dev.tinycast.android.ExtensionPasteCopyDeviceTest', 'dev.tinycast.android.CalculatorActionsDeviceTest', 'dev.tinycast.android.ClipboardEvidenceDeviceTest', 'dev.tinycast.android.ActivationDeviceTest', 'dev.tinycast.android.InlinePaletteDeviceTest', 'dev.tinycast.android.ReadinessRegressionDeviceTest'] @@ -110,6 +120,9 @@ def main(): regression_classes = {'dev.tinycast.android.InlinePaletteDeviceTest', 'dev.tinycast.android.ReadinessRegressionDeviceTest', 'dev.tinycast.android.ClipboardEvidenceDeviceTest', 'dev.tinycast.android.ActivationDeviceTest'} regression = any(item.split('#')[0] in regression_classes for item in args.classes.split(',')) + paste_copy = any(item.split('#')[0] == 'dev.tinycast.android.ExtensionPasteCopyDeviceTest' for item in args.classes.split(',')) + require(not paste_copy or all(item.split('#')[0] == 'dev.tinycast.android.ExtensionPasteCopyDeviceTest' for item in args.classes.split(',')), + 'Keep the owned paste Copy cohort separate from other fixtures') handoff = any(item.split('#')[0] == 'dev.tinycast.android.ExtensionCommandHandoffDeviceTest' for item in args.classes.split(',')) require(not handoff or all(item.split('#')[0] == 'dev.tinycast.android.ExtensionCommandHandoffDeviceTest' for item in args.classes.split(',')), 'Keep the owned command handoff cohort separate from other fixtures') @@ -220,6 +233,8 @@ def absent(path): 'reviewed_json_command': args.reviewed_json_command, 'reviewed_translation_command': args.reviewed_translation_command, 'expect_completion_return': args.expect_completion_return, + 'expect_paste_copy_fallback': args.expect_paste_copy_fallback, + 'paste_copy_legacy_reveal': args.paste_copy_legacy_reveal, 'original_size': size, 'original_density': density, 'original_font_scale': font, 'settings_before': secure, 'recovery_lease': root, 'evidence_directories': evidence_dirs, 'shared_regression_cohort': regression} @@ -272,6 +287,8 @@ def save(): '-e', 'reviewedJsonCommand', args.reviewed_json_command, '-e', 'reviewedTranslationCommand', args.reviewed_translation_command, '-e', 'expectCompletionReturn', str(args.expect_completion_return).lower(), + '-e', 'expectPasteCopyFallback', str(args.expect_paste_copy_fallback).lower(), + '-e', 'pasteCopyLegacyReveal', str(args.paste_copy_legacy_reveal).lower(), '-e', 'expectedClipboardRecoveryOwner', owner, '-e', 'expectedFormDocumentOwner', owner if args.document_fixtures else 'none', '-e', 'class', args.classes, *network_filter, app + '.test/androidx.test.runner.AndroidJUnitRunner'] diff --git a/scripts/tests/test_reviewed_text_runner_guards.py b/scripts/tests/test_reviewed_text_runner_guards.py index a99cf7e9..748fa2a1 100644 --- a/scripts/tests/test_reviewed_text_runner_guards.py +++ b/scripts/tests/test_reviewed_text_runner_guards.py @@ -15,9 +15,37 @@ CLIPBOARD = 'dev.tinycast.android.ClipboardEvidenceDeviceTest' ACTIVATION = 'dev.tinycast.android.ActivationDeviceTest' HANDOFF = 'dev.tinycast.android.ExtensionCommandHandoffDeviceTest' +PASTE_COPY = 'dev.tinycast.android.ExtensionPasteCopyDeviceTest' class ReviewedRunnerGuardTests(unittest.TestCase): + def test_legacy_paste_reveal_is_limited_to_the_exact_diagnostic(self): + case = PASTE_COPY + '#keyboardCopyHidesImeAndEscapeReturns' + for classes, options in [(PASTE_COPY, ['--layout', 'landscape', '--font-scale', '2', '--expected', '1']), + (case, []), + (case, ['--layout', 'landscape', '--font-scale', '1', '--expected', '1']), + (case, ['--layout', 'landscape', '--font-scale', '2', '--expected', '2'])]: + self.refused_without_device_access(classes, ['--paste-copy-legacy-reveal', *options], + 'Legacy reveal is limited to the single enlarged-landscape owned keyboard diagnostic') + + def test_owned_paste_copy_cannot_mix_with_other_fixtures(self): + for selected in [DETAIL, HANDOFF, CALCULATOR, 'dev.tinycast.android.ReviewedTextDeviceTest']: + self.refused_without_device_access(PASTE_COPY + ',' + selected, [], + 'Keep the owned paste Copy cohort separate from other fixtures') + + def test_owned_paste_copy_cannot_claim_network_or_recovery_controls(self): + self.refused_without_device_access(PASTE_COPY, ['--translate-archive', 'not-read.zip'], 'Network bundle is not authorized') + self.refused_without_device_access(PASTE_COPY, ['--document-fixtures'], 'Document fixtures belong only') + self.refused_without_device_access(PASTE_COPY, ['--inject-clipboard-restore-failure'], 'Restoration failure is limited') + + def test_paste_copy_expectation_cannot_broaden_other_fixtures(self): + selected = 'dev.tinycast.android.ReviewedTextDeviceTest#selectedTranslationRunsOnlyAfterReviewAndReportsExactCopyOrServiceFailure' + for classes, options in [(DETAIL, []), (selected, []), + (selected, ['--reviewed-translation-command', 'instant-translate-paste']), + ('dev.tinycast.android.ReviewedTextDeviceTest', ['--reviewed-translation-command', 'instant-translate-paste', '--translate-archive', 'not-read.zip'])]: + self.refused_without_device_access(classes, ['--expect-paste-copy-fallback', *options], + 'Paste Copy fallback requires the single frozen paste observation') + def test_handoff_cannot_mix_with_other_fixtures(self): for selected in [DETAIL, CALCULATOR, 'dev.tinycast.android.ReviewedTextDeviceTest', CLIPBOARD]: self.refused_without_device_access(HANDOFF + ',' + selected, [],