Skip to content

Detect unsupported WebView engines before extension startup - #107

Merged
moikdev merged 19 commits into
mainfrom
fix/webview-engine-recovery
Nov 5, 2026
Merged

moikdev merged 19 commits into
mainfrom
fix/webview-engine-recovery

Conversation

@moikdev

@moikdev moikdev commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Android 8's WebView 58 previously reached ReferenceError: __tinycast is not defined after evaluating the bundled runtime. Droidcast now checks syntax and required APIs first, then shows the actual provider/version, update guidance, explicit Engine settings, and Return when the engine cannot run it.

Closes #68 within its detection/recovery scope. Android 8 extension execution remains partial under #7; #69, broader accessibility/OEM coverage, #89 and production signing/migration remain open.

The ES5 preflight parses each unchanged runtime asset without invoking it. An ordered, cancellable gate blocks host APIs, render/completion messages and action dispatch until all checks pass. Native recovery uses an OS-derived package intent and current-screen/focus/lifetime guards. Equivalent failures get separate recovery lifetimes. Reviewed input is revoked on failure; the existing bounded command-handoff acknowledgement remains intact.

Verified locally: 29 positive Android executions / nine complete cohorts / 133 successful restoration checks (including freshly rerun 7-case legacy and 5-case modern tablet cohorts); one identical-instrumentation old-app control has zero passes / one intended missing-recovery failure / ten checks. Four outer preservation/release checks remain separate. The matrix covers actual API26/WebView58 rejection at 100%/200%, modern WebView133 List/Grid actions, selected JSON, no-view input release, handoff and explicit paste fallback. All 573 pre-existing modern files/evidence and both original APKs are restored. 343 JVM cases, 124 Python cases per mode, debug/test and benchmark/test builds, lint 0 errors/56 warnings each pass. Existing assets and notices are byte-identical.

The runtime is fec0a4bf, app SHA256 ae03c859…4ec71.

The synchronous gate assertion now uses supported fs.exists on the existing owned fixture. It is rejected before startup, then succeeds with the same engine, bridge and arguments after actual API36 approval. A separate single-guard mutant demonstrates the prior test's insensitive pass and the strengthened test's intended failure; both controls restore all original data/APKs with thirty checks. These counterfactual results earn no candidate credit. The two original affected cohorts remain historical, and their unsupported-operation rejection is withdrawn as independent gate proof. Production sources and the frozen candidate APK are unchanged. The strengthened core cohorts use test source 29a0a5a1 / APK 1e450e76…66f13; unaffected enlarged, caller-regression and common-UI observations retain their earlier APK identities. The current matrix uses four distinct, source-bound instrumentation APKs; no stamp-only equivalence or final-document-head runtime rerun is claimed. The report and checkpoint preserve failed attempts, separate recoveries, 62 original plus sixteen repair capture sets and declared publication transformations. Timeout/settings-launch exceptions remain source-covered without induced device failures. Modern enlarged profiles are functional smoke; this does not certify broad typography, accessibility, security or whole-Store parity.

The matched before/after uses the same final common instrumentation and ES5 fixture on the owned API26 ARM64 image revision 1, physical 1080×1920/420 dpi, WebView 58.0.3029.125, 100% text. Old app 2f7a3edf/b0fa0e30…535e54; repaired app fec0a4bf/ae03c859…4ec71.

Before: late undefined-runtime error After: actual-provider recovery
API26 old app: generic late error API26 repaired app: provider, guidance and full recovery controls
Explicit native destination 200% recovery after scrolling
Actual WebView app-info reached by touch Large-font guidance with reserved Settings and Return

Modern smoke: the dedicated API36 tablet, physical 1920×1200/240 dpi, WebView 133.0.6943.137, 100% text. These owned fixtures update local React state and do not certify Store commands.

List action published Grid action published
Owned List local-state action on current runtime Owned Grid local-state action on current runtime

Exact-head hosted Android CI and both fresh independent gpt-6.1-sol/high full-change audits are separate pending merge gates. Merge only the reviewed, verified head with an expected-head check.

moikdev commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

Local verification is head-bound to b417d94ab3932ae5775db22cbd5d55d802ea5e5b: 29 positive Android executions / nine complete cohorts / 133 passing restoration checks, plus one intended common-harness old-app failure / zero passes / ten checks. The outer shared-regression wrapper records four separate preservation/release outcomes and all 573 original files/evidence plus both original APKs restored. JVM343 and Python124 per normal/optimized mode pass; both build variants and final-harness compilation pass; lint has 0 errors/56 warnings each. All 320 checkpoint-listed public files equal committed Git bytes, including 62 original CRLF XML captures. The report keeps three instrumentation identities, earlier failures, separate recoveries and final-document-head limits explicit. local/android reports these local receipts only. Actual hosted Android CI and two independent full-change gpt-6.1-sol/high audits remain separate gates; no merge clearance is inferred.

moikdev commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

Verified the actual hosted Android run 41958811486: event pull_request, exact head b417d94ab3932ae5775db22cbd5d55d802ea5e5b, completed/success. Separate local/android status58113504990 is successful. GitHub and the clean local checkout still have the same head/base. Both independent gpt-6.1-sol/high audit results remain pending root verification; hosted success alone does not clear the merge gate.

moikdev commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

The independent correctness audit at b417d94 found one P2 in test soundness: the synchronous preflight test used unsupported localStorage.getItem, so unsupported-operation rejection could mask a regressed approval guard. Merge remains withheld. I am strengthening it to supported fs.exists on the existing owned fixture, adding the same-engine/operation/arguments approved positive control on API36, and checking a narrowly mutated guard. The other old-head audit was cancelled because this test changes. Production implementation and frozen runtime APK remain unchanged; fresh exact-head independent audits will follow verification.

moikdev commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

P2 test-soundness repair is verified at 86f1af0cabdb498e18bbe625f1334a0dc734dc23. The strengthened case rejects supported fs.exists on an existing owned fixture before startup, then succeeds using the same engine, bridge, operation and arguments after actual API36 preflight/publication. Fresh complete cohorts pass 7/7 legacy and 5/5 modern cases (25 restoration checks). They replace the two affected old cohorts; current credit remains 29 positives/nine cohorts/133 checks, with unaffected results retained at their own binaries. On one exact synthetic guard-mutant APK, the old harness passes and the strengthened harness fails the intended supported-operation assertion; both restore all573 original files/evidence and both APKs with30 checks. The failed positive-only runner receipt remains failed and a separate wrapper records the calibration. Production sources and candidate ae03c859…4ec71 remain unchanged. Both harness variants build/lint; JVM343/Python124 reuse is source-bound. All413 original+repair checkpoint files equal committed Git bytes; all119 XML files parse and all78 raw capture XMLs retain CRLF. Fresh full-head independent sol/high audits and actual exact-head hosted CI are required before merge; earlier-head CI/reviews do not clear this head.

moikdev commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

Root verified actual hosted Android run41962444788 completed/success for exact head 86f1af0cabdb498e18bbe625f1334a0dc734dc23, event pull_request. Separate local/android58115208341 is successful; remote/local heads match and the checkout is clean. Both new independent full-change gpt-6.1-sol/high audit results remain pending root verification. Checks alone do not clear the merge gate.

moikdev commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

Fresh independent correctness/security audit cleared exact head 86f1af0cabdb498e18bbe625f1334a0dc734dc23 with no actionable scoped findings. Actual reviewer configuration was gpt-6.1-sol/high, independent without delegation or companion consultation. It verified the supported fs.exists rejection/approved control and same-mutant old-pass/new-fail calibration, all413 checkpoint files/338 bindings/62 projections, declared source/APK identities, 119 parseable XMLs and78 raw CRLF captures. It inspected receipts rather than running builds/tests/devices and preserved the documented platform/private-restoration limits. Its earlier CI snapshot was in progress; root separately verified actual exact-head hosted run41962444788 and local/android58115208341 success. The fresh UX/test-provenance result remains a separate pending gate; no merge clearance yet.

@moikdev moikdev left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Root record of two independent full base-to-head audits at 86f1af0, both actually configured gpt-6.1-sol/high and performed read-only without delegation or companion consultation:

  • Correctness/security: no actionable scoped findings. Reviewed ordered parser/API approval, sync/async bridge guards, cancellation/ownership, recovery intent/focus/lifetime, input revocation and committed-handoff acknowledgement. The supported fs.exists preapproval/approved control and same-mutant old-pass/new-intended-failure calibration are verified.
  • UX/test provenance: no actionable scoped findings. Viewed all78 actual PNGs with paired receipts and current captions/commit-pinned embeds; distinguished the mutant test-failure app capture from a visible app error banner. Confirmed target/text/Return/settings and documented enlarged-layout limits.

Both independently verified413 checkpoint files, each source manifest at its declared revision, source/APK boundaries,119 parseable XMLs and78 raw CRLF captures. Current candidate credit is29 positives/nine cohorts/133 restoration checks; old-app UI negative, four outer outcomes, mutation checks and retained failures remain separate. They inspected receipts and executed no builds/tests/devices. Private originals/cross-boot and broader Android8 execution, Store, OEM, accessibility and signing/migration remain uncertified.

Root independently verified exact-head hosted Android run41962444788 completed/success on pull_request and local/android58115208341 success, unchanged remote/local head/base, and clean checkout. Earlier in-progress snapshots in the audit reports are historical. The implementation tree is f77f2280ad3d5718293ea06148254da87c4ca45d.

This COMMENT records the independent conclusions under the repository's parity loop; it is not a self-approval. Proceed only through the normal merge API with expected_head_sha=86f1af0cabdb498e18bbe625f1334a0dc734dc23.

@moikdev
moikdev merged commit c4ca362 into main Nov 5, 2026
2 checks passed

moikdev commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

PR #107 merged as c4ca362e7f3efccc59eacc4fdcaa7184fe0507c1 through the normal merge API with expected head 86f1af0cabdb498e18bbe625f1334a0dc734dc23. Root verified both expected parents and tree f77f2280ad3d5718293ea06148254da87c4ca45d, identical to the reviewed tree. Both fresh independent full-change gpt-6.1-sol/high audits cleared their scopes; conclusions are recorded in COMMENT review5779629264. Exact-head hosted Android run41962444788 and separate local/android58115208341 succeeded. #68 closed within detection/recovery scope; the PR watch is stopped. Current evidence remains29 candidate positives/nine cohorts/133 checks, separate old-app UI negative, four outer outcomes and separately scoped mutation calibration. This delivers native unsupported-engine recovery; Android8 extension execution, broader Store/platform/accessibility/OEM, #69/#71/#89 and signing/migration remain open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Detect incompatible WebView engines before extension startup and provide inline recovery

1 participant