29 Aug 2026 · three commits on main, pushed · 97 app tests · 130 pipeline tests
Every store page on ID.me Shop carries one sentence: "Special savings of up to 40% off for Military, Veterans, Nurses, Teachers, and more." That is ID.me marketing its browser extension, and it sits on all 3,000 stores.
The parser read each page as one blob of text and took the first
N% off for Military it found. That was the banner, every time. Hoka's real
offer sat on the page directly above it and never matched at all, because ID.me writes it
as "15% off for eligible Military Members".
So the app told members that Nike, Hoka, Oakley and 79 others give 40% off. A member acting on that gets to the till and finds out we were wrong. This is the specific failure the product exists to prevent, and a confident wrong route is worse than no route at all.
| Brand | Was | Is | Brand | Was | Is |
|---|---|---|---|---|---|
| Hoka | −40% | −15% | YETI | −40% | −20% |
| Columbia | −40% | −20% | Casper | −40% | −5% |
| Brooks | −40% | −25% | Lowe's | −40% | −10% |
| Samsung | −40% | −30% | Nike | −40% | none |
| Oakley | −40% | none | Peloton | −40% | none |
Casper 5%, Lowe's 10% and Samsung 30% match what Claude Cowork and ChatGPT found independently, which is the strongest confirmation available without a person standing at a register.
They were hand-written markup with no banner in them, so they tested a page ID.me has never served. They are now trimmed from real store pages, keep ID.me's own class names, and every one of them carries the 40% sentence — so a regression that reads it fails in the suite rather than in a member's hands.
Both new publish tests were confirmed to fail with the fix removed. A test that has never been seen to fail is a test that has not been checked.
When a store had no military offer the pipeline emitted nothing at all, which threw away the only record that the page had been read. A brand swept that morning looked unexamined.
It also broke the change feed. When a published route stopped being emitted, "Nike dropped from ID.me Shop" pointed at a route no longer in the dataset, and the app drew a row with no brand name, no logo and nothing to tap. 63 negatives now carry their sweep date, following the convention the GovX sweep already set.
Home used to run out after the exchange cards. With nothing in the change feed and no watched categories, the lower half of the screen was empty and the only way in was to already know what you wanted.
The new shelf draws from the 68 brands with a verified discount, takes one pick per category so nothing sits next to the shelf it came from, and rotates daily. The arrow re-rolls it, because poking at it is the point.
Picks are weighted toward the bigger discount rather than sorted by it. Sorting shows the same six brands until the data moves. A flat shuffle put three −20% cards in the first four, which is the sameness the shelf exists to break. Weighted sampling leads with something worth seeing and is still different tomorrow.
All of them in one scrolling row read as a wall to get through, and several tiles opened on nothing — Insurance carries four brands and Memberships three, and not one of the seven has an offer. A tile is now sized by the brands behind it a member can actually use, and the rest are one tap away under "All 24".
Tapping a −20% Columbia card opened shop.id.me and left the member to go
hunting for the discount the card had just shown them. ID.me is 36 of the 42 routes that
state a real amount, so that was most of what the new shelf puts in front of someone.
The store path had been in the registry all along — it is how the sweep fetches the page it reads the offer from — but it was marked pipeline-only, so the app could not see it and could not rebuild it. Published now, on 99 of 162 brands.
The discount pill is gone from plain offer cards. The card read "−20% for military" next to a "−20%" pill — the same fact twice, spending the one piece of colour the row has. Deadlines and "New" marks still earn theirs. This changes offer cards everywhere, not only on Home, so it is the change most likely to be one you want reversed.
I tried the lead find as a hero card and took it back out. The hero layout sets a 17pt caps headline against a full-bleed illustration because it was drawn for the narrow carousel card. At the width of the screen it turns the phone into a billboard and the type into a caption. If you want hierarchy on that shelf it needs a fourth density, not a stretched hero.
| Category | Priced offers | Category | Priced offers |
|---|---|---|---|
| Footwear | 10 | Accessories | 2 |
| Apparel | 9 | Fitness | 2 |
| Electronics | 8 | Kitchen | 1 |
| Running | 7 | Entertainment | 1 |
| Outdoor | 6 | Mobile | 1 |
| Home | 5 | Attractions | 1 |
| Beauty | 4 | Auto, Baby & Kids, Pets, Gifts, Memberships, Insurance, Moving, Software, Storage |
0 each |
| Travel | 4 | Workwear | 3 |
I removed it as a duplicate. It was also the only colour on a standard card, and the shelf is flatter without it. The alternative is to keep the pill and change the headline to lead with the brand name instead of the number.
Right now a find must state a number, so the 26 "Via GOVX" brands never appear as finds — though they do count toward a category tile's depth. That inconsistency is deliberate and worth a second opinion.
The change feed is empty today and the section simply does not draw. That is honest and it is also silent. With the shelf there, the page no longer looks broken — so this may need nothing at all.
They are not — illus-sneaker and illus-running-shoe are
separate objects. At 21pt inside a 56pt circle they are indistinguishable. Either one of
them wants a more distinct silhouette, or Running does not need its own tile.
BRANDFETCH_KEY..ai.card-system, design-system,
admin-tooling, curated-registry, and the
visualdesign Foundation layer.