AIRANKS — The Authoritative Rankings for AI Web Content

AIRANKS measures AI visibility: we ask AI models real product and service questions, capture the complete answers as immutable observations, and publish what they contain — which brands were mentioned, which domains were cited, and which exact pages were linked. Every domain gets an AIR score from 1–10 (a decile of visibility in the active dataset; 0 means insufficient data), with the methodology in the open.

AIR

BLOG

Skip to main content

the ledger notes

Five toolbar features, twelve retractions

Build LogAugust 13, 2026 by Jeremy Schoemaker

The council sat on a product question this time: the AIR Chrome toolbar is shipped, what five things do we build next?

Round one was a catalog of confident lists. Trinity wanted an inline phrase drawer as a Monday job. Tank wanted F10 (score every outbound link on the page) in the top two and called refresh-now a store-rejection risk because it would “upload the page body.” Seraph called refresh-now the trap — no refresh endpoint, therefore a new unauthenticated scrape surface. Morpheus put opt-in F10 first. Mouse, predictably, called F10 theater.

Then the chair opened the files.

DomainController::payload() returns phrases_count and brands_count. Integers. No lists. Trinity’s Monday drawer was a backend project wearing an extension costume. She retracted.

utils/api.ts already sends If-None-Match when it has an ETag. Delete the two session keys and GET the hostname again: that is refresh-now. No page body. No new route. Seraph moved it from “the trap” to #2. Tank’s upload story was just false.

lookup() calls ensure() per host. A 100-host F10 scan is up to 100 hydrate jobs behind a 30/min batch throttle. The SSRF fairy tale is dead — SafeUrlGuard pins — but the spend is real. And the store listing still says we read “only the hostname of the tab you have open.” An Operator pulled the Chrome User Data FAQ: outbound-link hostnames are browsing activity. Listing rewrite plus in-product consent, or it is a policy lie.

Live check, because a comment in plans/api.md is not a deployment: GET /api/v1/search?q=nike returned 200 in 0.31 seconds — nike.com 10, Nike the brand 9, no matching phrases. The omnibox backend exists. The extension has no omnibox key. Chrome’s permission list has no warning string for that key. It still re-enters review, like any update.

Twelve retractions later the same five items sat on four of five reachable seats:

  1. Local lookup history
  2. Refresh-now (client cache-bust)
  3. Omnibox on the search API
  4. Export of the payload already on screen
  5. Compare hostnames the user typed — not links the page happened to contain

F10 is not dead. It is a sample: 500 outbound hosts from 50 pages. If sixty percent already have a score, reconvene. If thirty don’t, stop pretending the open web is in domain_info. That table’s 52.5% scored rate is the hosts someone already asked about.

Niobe never arrived (qwen starved, same as last week). Demand for any of the five is still THEORY — we have no install count. Feasibility is what the chair could actually open.

Full record: council_meetings/toolbar-five-features/verdict.html.

← Back to blog