Skip to content

[repo-status] Daily Repo Status β€” May 21, 2026Β #8655

@github-actions

Description

@github-actions

πŸ¦† DuckDuckGo Android β€” Daily Status Report

Thursday, May 21, 2026 | Reporting window: late May 20 β†’ mid-day May 21


πŸŒ… Headline: 5.280.1 hotfix in the wild, native input refactor lands its closing chapter ✨

Yesterday afternoon 5.280.1 cut and shipped β€” a tidy follow-up to Monday's 5.280.0, keeping the weekly release cadence on rails. πŸš€ Behind the scenes, the long native-input refactor stack is converging: @malmstein's #8627 (Options plugin β†’ per-tab state) merged yesterday evening, and the closing #8647 ("Remove getPromptContribution from native input plugins") sits ready as the final PR in a multi-week effort to switch from pull-based plugin contributions to a per-tab state provider. Reactive state plumbing, fewer surface APIs, cleaner test seams. A really satisfying refactor to watch land. πŸ’š

Meanwhile, the day was full of well-scoped polish: two attachment-UI consistency PRs from @joshliebe, an in-memory tracker-entity cache from @anikiki behind a feature flag, and Part 1 of the AI reasoning-effort subscription gating from @YoussefKeyrouz. Quiet, productive day. 🌿


πŸ“¦ Release Pulse

Version Released Status
5.280.1 2026-05-20 (14:44 UTC) πŸ†• hotfix β€” currently rolling out
5.280.0 2026-05-18 rolling out
5.279.1 2026-05-14 hotfix
5.279.0 2026-05-11
5.278.1 2026-05-06 hotfix

6 releases in 16 days. Three of them hotfixes β€” the safety net is being used, and that's good news, not bad. The post-release window is tight and the rollback path is well-rehearsed. πŸ“ˆ


βœ… Just landed (last ~24h)

Today (May 21)

# PR Author Notes
#8654 Add .kotlin to gitignore @CDRussell 🧹 Tiny housekeeping. Ignores the .kotlin folder anywhere in the project to stop accidentally committing JetBrains-generated metadata ([upstream YouTrack issue]((youtrack.jetbrains.com/redacted)
#8652 Update file attachment UI (native input) @joshliebe πŸ“Ž Replaces the card-based file chip with a clickable horizontal chip matching the image-attachment + Web Search chip language. Note: removal is now triggered by tapping the whole chip β€” reviewers, watch field telemetry for accidental-deletion signal once 5.281 hits.
#8636 Return empty JSON response rather than null when page context not available @aitorvs πŸ”§ JS-bridge contract tweak for getAIChatPageContext. Instead of resolving with null, the bridge now resolves with {pageContext: null} so the JS promise actually completes and downstream code can fall back to the subscription path. Subtle but unblocks a contextual-sheet timeout edge case.
#8650 Update content scope scripts to 14.11.0 @daxmobile πŸ€– Automated bump. Privacy CI green. Adds support for setterValue / value overrides (not just getterValue), stricter descriptor validation, and identity-preserving function masking on DOM overrides. Worth a note for anyone debugging WebView shims.

Late yesterday (after the May 20 report)

# PR Author Notes
#8625 Add reasoning effort access to the AI chat model (Part 1/2) @YoussefKeyrouz 🧠 Schema + domain support for per-reasoning-effort subscription gating. No UI yet β€” Part 2 will wire the upsell trigger so tapping a gated reasoning effort routes into the existing purchase/upgrade flows. Forward-compatible: missing field β†’ today's behaviour. Tier-resolution refactored into a shared lowestRequiredTier() helper.
#8627 Migrate Options plugin to per-tab NativeInputStateProvider @malmstein 🧬 Moves tool selection (Web Search / Image Generation) onto the typed NativeInputHost.toolSelected push API and per-tab state flows. Tool selection now persists per tab and survives switches. Part of the larger native input refactor stack.
#8633 Smooth widget transitions @aibrahim- 🎞️ Killing the two-step "jank" on native-input launch/close in both top and bottom omnibar modes. IME-aware enter previews and symmetric cancel/complete cleanup. Worth a look in 5.281 dogfood.
#8638 Update image attachment UI (native input) @joshliebe πŸ–ΌοΈ Sibling to today's #8652 β€” same chip-style unification, image variant.
#8613 In-memory entity lookup cache @anikiki ⚑ Opt-in cached tracker-entity lookup behind androidBrowserConfig.cachedEntityLookup (default INTERNAL). Replaces per-label DB walks with a single in-memory snapshot keyed by domain β†’ entity, refreshed on TDS reload. Includes parity tests + an @Ignored on-device microbenchmark for manual perf comparison. Flag-off = identical behaviour to develop.

🎯 Open PRs worth a look

🧬 Native input refactor β€” closing the stack

  • #8647 β€” Remove getPromptContribution from native input plugins (@malmstein, assigned @YoussefKeyrouz)
    • The final PR in the multi-PR native-input refactor. With every plugin now migrated off the pull-based contribution path (StartChat #8570, Options #8627, Attachment #8644, ReasoningModePicker #8645, ModelPicker #8646), this one deletes the entire PromptContribution sealed class and getPromptContribution() interface method.
    • Pure deletion of unused surface β€” no behaviour change expected, just the satisfying compile-clean diff. Quick sanity sweep documented in the test plan (model id propagation, reasoning effort, per-tab tool selection).

🎨 Onboarding Brand Design Update β€” pre-ship polish

  • #8639 β€” Onboarding Brand Design Update: Ship review fixes (@mikescamell, assigned @LukasPaczos)
    • Ship-review polish across the brand-design onboarding. AVD reset for comparison-chart green ticks, RMF deferral until subscription dialog is shown, widow-word prevention, line-height fix, tail-collapse when wing animations don't fit, bobbing-Dax space checks, and pre-loading toggle icons before measurement. Detailed test plan with most boxes already checked.
  • #8630 β€” Onboarding Brand Design Update: Add Dax, wing, and bubble tail animations (@mikescamell, assigned @malmstein)
    • The big Lottie animation pass: waving Dax on visit-site / site-suggestions / subscription bubbles, wing on trackers-blocked + no-trackers CTAs, animatable bubble-tail depth as a design-system primitive, form-factor-aware anchoring (tablet anchors to card start, phone landscape strips decorations entirely). Stacked on the same onboarding base branch as #8639 and #8653.
  • #8653 β€” Fix Dax persisting in NTP onboarding bubble after rotating to landscape (@LukasPaczos, draft, opened today)
    • Drops Dax + bubble arrow on rotation from portrait β†’ landscape. Side-by-side rotation videos in the PR. Small but visible UX fix.

πŸ”„ Duck.ai sync expansion

  • #8640 β€” Add native sync queue for Duck.ai chat updates (@GerardPaligot, draft)
    • Wires the rename and pin/unpin actions on the Duck.ai chat history screen into the existing native sync pipeline. Title is encrypted via SyncCrypto. Mirrors the deletion-side pattern already shipping single-chat deletes. Offline / process-death persistence tests in the plan.

🧱 Ad-blocking pipeline (still open, still important)

  • #8557 β€” Implement scriptlet download and storage (@CrisBarreiro, assigned @cmonfortep, opened May 14)
  • #8622 β€” Add core ad blocking capabilities (@CrisBarreiro, assigned @cmonfortep, opened May 19)
    • Same two-PR pairing that's been in the queue since last week. Reviewers β€” the longer they sit, the more they accrue rebase risk against the native-input + onboarding work landing around them. 🌿

🌐 Long-tail bug fix worth not forgetting

  • #8520 β€” Fix WSJ Custom Tab redirect loop (@kzar, draft, opened May 11)
    • Mirrors Chromium's behaviour: blocks HTTP App Link hand-off unless the user initiated the navigation, with a "trusted caller" carve-out for OAuth flows. The PR description does a great job of explaining the Chromium parity rationale and the testing methodology β€” would be a shame to let this go cold. πŸ₯Ά

πŸ’‘ Recommendations for the day

  • πŸ₯‡ Land #8647 β€” the final native-input refactor cleanup. It's a pure deletion, fully covered by the upstream PRs being merged, and shrinks the API surface. Easy approve, satisfying close on a multi-week refactor.
  • 🧱 Page @cmonfortep on #8557 + #8622 β€” the ad-blocking pair has now been open for a full week (download) and the runtime-injector sibling for ~2 days. Both come with explicit logcat-state test plans; the longer they wait, the more rebase pain. Reviewing them as a pair makes the FF lifecycle obvious.
  • 🎨 Onboarding train review β€” #8630, #8639, #8653 are all stacked on the onboarding feature branch. Worth a coordinated review pass so they merge in the right order without rebase churn. #8630 is the load-bearing animation work; #8639 polishes on top of it; #8653 is the rotation edge case.
  • πŸ“Š 5.280.1 telemetry watch (Day 1) β€” hotfix released 14:44 UTC yesterday. Still well within the field-signal window. If anything spiky shows up in crash/ANR dashboards, it'll surface today.
  • ⚠️ Reviewer reminder for #8622 β€” the PR body includes a deliberate PRIVACY_REMOTE_CONFIG_URL patch pointing at duckduckgo.github.io/.../pr-5175/... for staging. Confirm that patch isn't in the diff being merged. Same warning applies to #8557. Easy mistake, expensive in prod.
  • πŸ“± #8652 & #8638 field watch β€” both PRs changed attachment removal so tapping the whole chip removes it (was previously the dedicated remove icon only). Worth keeping an eye on accidental-deletion telemetry once 5.281 starts rolling out, in case the new affordance is too eager.
  • πŸ” #8613 perf measurement β€” @anikiki's in-memory entity cache ships flag-off by default. The on-device microbenchmark in CachedTdsEntityLookupPerfAndroidTest is @Ignored β€” somebody should actually run it on a representative device and post numbers so we know whether to flip the flag.

πŸ™Œ Shoutouts

  • 🧬 @malmstein β€” landing #8627 and queuing #8647 brings a clean multi-PR native-input refactor across the finish line. Disciplined, well-scoped, test-covered each step
  • 🎨 @joshliebe β€” back-to-back attachment UI unification PRs (#8638 + #8652) with crisp before/after screenshots and consistent design-token usage
  • 🧠 @YoussefKeyrouz β€” #8625 ships forward-compatible schema support before the UI lands, and refactors duplicated tier-resolution logic into a shared helper while at it. Textbook Part 1
  • ⚑ @anikiki β€” #8613 ships a perf optimization with parity tests + an on-device benchmark + flag-gated rollout. The right shape for a perf change
  • 🎞️ @aibrahim- β€” #8633 (smooth widget transitions) is the kind of polish that's invisible when it works and obvious when it doesn't. Before/after GIFs in the PR sell it
  • πŸ€– @daxmobile β€” daily content-scope-scripts bump landed clean again, privacy CI green
  • πŸ¦† @CDRussell β€” one-line .gitignore win on #8654. Boring, useful, exactly the kind of micro-PR that keeps the dev environment friction-free
  • πŸ›‘οΈ @CrisBarreiro & @cmonfortep β€” the ad-blocking-extension pipeline keeps shaping up across #8557 + #8622. Detailed test plans and gating-aware logcat filters in both PRs

Thursday energy: hotfix shipped, refactor stack closing out, polish PRs flowing. 5.281 is shaping up nicely. πŸ¦†πŸ’š

Note

πŸ”’ Integrity filter blocked 21 items

The following items were blocked because they don't meet the GitHub integrity level.

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
  github:
    min-integrity: approved  # merged | approved | unapproved | none

Generated by Daily Repo Status Β· β—·

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/daily-repo-status.md@b466f28f0f65b68d6f2b10b15b44f51d787b93be

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions