duckduckgo / duckduckgo/Android

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

Open
#8,655 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

daily-status report
Dominant language
Kotlin
Stars
4.8k
Forks
1.4k
Avg merge
2d 17h
Merged PRs (30d)
170

Description

πŸ¦† 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.

  • duckduckgo/Android#8586 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#8365 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#8245 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#8244 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#8144 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#7844 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#7805 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#5383 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#6062 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • duckduckgo/Android#2799 list_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • https://github.com/duckduckgo/Android/commit/20e514d22755f6fd93cbfb5d5632eed8d7468a1e list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • https://github.com/duckduckgo/Android/commit/680782b8a17cfb12a038d55f55dc6e2feefff045 list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • https://github.com/duckduckgo/Android/commit/038ccd1610704d50ec11a205c7eaf67d8b03bcd4 list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • https://github.com/duckduckgo/Android/commit/f6a2a8812c52b1416f0e907dcf860009c318c84f list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • https://github.com/duckduckgo/Android/commit/46a97e44a117ba55492bb57f37ba4d7bb6e2f9c4 list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • https://github.com/duckduckgo/Android/commit/0c0bdcf9d0372060eb9e3f9af57457d38de51c99 list_commits: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • ... and 5 more items

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up β€” it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

This issue is a daily status report rather than a code task; start by reading the May 21 report and its referenced pull request summaries. Done would mean a complete, accurate status update, but no file, test, or implementation entry point is identified in the payload.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, kotlin
Domain
documentation
Issue type
Documentation
Difficulty
1/5
Estimated time
Under an hour
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.