Skip to content

feat: show each brand's bootloader policy, with a source - #12

Merged
NotAFlightRisk merged 2 commits into
mainfrom
feat/brand-bootloader-policy
Sep 25, 2026
Merged

NotAFlightRisk merged 2 commits into
mainfrom
feat/brand-bootloader-policy

Conversation

@NotAFlightRisk

Copy link
Copy Markdown
Owner

Category

Feature

Overview

Section 4 of the android-rom-compat card asks for a brand level bootloader field, because "does the
bootloader unlock" is in the strapline and it's Unknown on 609 of 708 devices. Most of that is brand
policy rather than per-device fact.

Brands can now carry a bootloader block with notes and a source. It shows on the brand page and
under Bootloader on every device page, and it does not change what a device's own unlock says.

That last bit is a deliberate departure from the card, which wanted devices to inherit the brand's
value when their own is unknown. Inheritance only holds for Google and Fairphone,, which is 21 of the 609. Samsung keys off the One UI version, Motorola off the chipset class, Xiaomi off Android One vs
HyperOS, OnePlus off region, and Sony excludes carrier models, so inheriting would put a confident
wrong answer on a few hundred pages to fix 21. Prose next to the value says the same thing without
claiming a per-device answer.

Only Google and Fairphone are filled in, and only those two, because I could get a source I'd actually
read for them. Everything else stays unknown, which is what the card asks for. Google is off
source.android.com, which says Nexus and Pixel from 2015 on take fastboot flashing unlock and that
a carrier locked phone can't be unlocked. Fairphone's is thier own support article. Motorola's page
404s, Fairphone's support site and Xiaomi's unlock page both refuse a script (Xiaomi's is all JS
anyway), so the rest wants a human with a browser.

Devices get an optional bootloader.source too, same reasoning - everything needs a source. Nothing in data/devices/ sets one yet, so I added one to the Pixel 9a temporarily, built, checked it
rendered, and took it back out.

Issue Number

Section 4 of NotAFlightRisk/tasks#26. Sections 1 and 4's inherit-or-not question are both still open.

Additional Info

Codex caught one real thing and it was already there before this PR: ajv's uri format is looser
than Node's URL parser, so https://example.com:99999 passes npm run validate and then throws
ERR_INVALID_URL when a page reads a hostname off it. brand.website and stock.source have had
that hole all along. Second commit registers a link format that just asks URL.canParse, so the
validator now agrees with the thing doing the rendering, and bad data gets "isn't a full link"
instead of killing the build.

No screenshot, it's two lines of prose. Here's what the Pixel 9a's Bootloader section reads as now,
out of dist:

Unlock    Conditional
Carrier models, like Verizon's, can't be unlocked.
Google's policy: Pixel and Nexus phones from 2015 on unlock with fastboot, unless they were sold
carrier locked. Going by source.android.com.

56 device pages pick up a policy line (51 Google + 5 Fairphone), the other 652 are untouched, and I
checked a Samsung page to be sure it still just says Unknown.

Tests went 85 to 88. Two of the three are proper regression tests - reverting the brands schema turns
"has to say where it came from" red, and swapping link back to uri turns the bad-link assertion
red. The model one isn't: it passes either way, because the model already spreads the brand through.
Its there to pin the no-inheritance decision, so if anyone does wire inheritance up later it goes red
and they have to mean it.

@vercel

vercel Bot commented Sep 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
android-rom-compat Ready Ready Preview Sep 25, 2026 11:51am UTC

@github-actions github-actions Bot added the enhancement New feature or request label Sep 25, 2026
@NotAFlightRisk
NotAFlightRisk merged commit 9515d41 into main Sep 25, 2026
7 checks passed
@NotAFlightRisk
NotAFlightRisk deleted the feat/brand-bootloader-policy branch September 25, 2026 11:52

This branch was successfully deployed

1 active deployment
Preview — dcb253aa Deployed Sep 25, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant