Vouch

Recalled products, and where they are still for sale. Nothing published that the system cannot vouch for.

US CPSCverified
307 rows · contract cpsc@1 pass
publisher API, not scraped · last verified 2026-08-20 10:47Z
Arcadia Product Safety (synthetic)verified
synthetic fixture 12 rows · contract arcadia@1 pass
collector c_msx7z3xi2hs08ccwms · last verified 2026-08-18 08:48Z
Tradewell Market (synthetic)verified
synthetic fixture 12 rows · contract tradewell@1 pass
collector c_msxhnjyoflutq9tt8 · last verified 2026-08-18 08:48Z
2 withdrawn at source, kept as history
eBayverified
587 rows · contract ebay@1 pass
collector c_mt1u43dj2h99xaf6l2 · last verified 2026-08-21 01:40Z

Incident log

Every failure, and whether we repaired it

A scraper that repairs everything it cannot read will eventually invent a safety recall. Two of the four failure causes here must never be repaired, and the log records the refusal rather than the silence. Newest first.

10incidents recorded
7times the engine declined
1/5repairs attempted that survived measurement
2records still withdrawn at source

Timeline

Each entry shows what the contract measured, the classifier’s evidence word for word, and either the refusal or the prompt that was sent. The prompt is included in full because a repair instruction is the part of a self-healing scraper nobody normally lets you read.

  1. blockedrepair refusedeBay · opened 2026-08-20 19:20Z#

    the request was refused at the door. Rewriting selectors cannot clear a block, so attempting a repair would burn credits and can deepen the block.

    What the contract measured

    561 rows extracted · 0 contract breaches · unresolved

    Evidence, verbatim

    • listing returned HTTP 403
    • healing cannot clear a block; backing off instead
    • blocked cycle 1 in a row; holding off until 2026-08-20T19:34:31.295Z before the next request

    What we declined to do

    Refusal, recorded verbatim

    the source refused the request; healing cannot clear a block

  2. driftrepair ran, result rejectedeBay · opened 2026-08-20 18:45Z#

    the data is still published in a different shape. This class is repairable, so a repair was attempted, unless the entry below says otherwise: a cycle that could not check every missing record also lands here, and refuses.

    What the contract measured

    568 rows extracted · 1 contract breach · unresolved

    Evidence, verbatim

    • field location null rate 5.6% against a limit of 5.0% over 480 rows (examples: , , )

    What we declined to do

    Refusal, recorded verbatim

    heal reported "done" but the result still fails the contract: field location null rate 5.6% exceeds limit 5.0% over 568 rows

    Repair prompt sent to the collector · took 264.4s

    Verbatim

    Extraction returned 480 rows but these fields breached contract ebay@1: location (6% null). The listing at https://www.ebay.com/sch/i.html?_nkw=Cooluli+minifridge still returns HTTP 200 with 1765681 bytes, so it is not blocked. Permalinks for the previously extracted notices still return HTTP 200, so nothing was withdrawn. The previously working selector .permalink now matches 0 elements. Attribute hooks present in the live document: data-inlinepayload, data-type, data-variant, data-webpack, data-uvcc-ready, data-marko-key, data-id, data-marko. Re-extract every notice from https://www.ebay.com/sch/i.html?_nkw=Cooluli+minifridge.

    All 1 contract breaches, verbatim

    • field location null rate 5.6% exceeds limit 5.0% over 568 rows
  3. driftrepair ran, result rejectedeBay · opened 2026-08-20 18:21Z#

    the data is still published in a different shape. This class is repairable, so a repair was attempted, unless the entry below says otherwise: a cycle that could not check every missing record also lands here, and refuses.

    What the contract measured

    0 rows extracted · 1 contract breach · unresolved

    Evidence, verbatim

    • field id null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field permalink null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field title null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field price null rate 100.0% against a limit of 2.0% over 0 rows (examples: )
    • field currency null rate 100.0% against a limit of 2.0% over 0 rows (examples: )
    • field condition null rate 100.0% against a limit of 5.0% over 0 rows (examples: )
    • field location null rate 100.0% against a limit of 5.0% over 0 rows (examples: )
    • listing fetched cleanly (HTTP 200, 1782051 bytes) but yielded no rows

    What we declined to do

    Refusal, recorded verbatim

    heal reported "done" but the result still fails the contract: returned 0 rows, contract requires at least 5

    Repair prompt sent to the collector · took 454.5s

    Verbatim

    Extraction returned an empty array: 0 rows where several were expected, and no errors were raised. The listing at https://www.ebay.com/sch/i.html?_nkw=Cooluli+minifridge still returns HTTP 200 with 1782051 bytes, so it is not blocked. Permalinks for the previously extracted notices still return HTTP 200, so nothing was withdrawn. The previously working selector .permalink now matches 0 elements. Attribute hooks present in the live document: data-inlinepayload, data-uvcc-ready, data-marko-key, data-ebayui, data-marko, data-gh-search-form-field, data-view-type, data-pageci. Re-extract every notice from https://www.ebay.com/sch/i.html?_nkw=Cooluli+minifridge.

    All 1 contract breaches, verbatim

    • returned 0 rows, contract requires at least 5
  4. driftrepair ran, result rejectedeBay · opened 2026-08-20 16:08Z#

    the data is still published in a different shape. This class is repairable, so a repair was attempted, unless the entry below says otherwise: a cycle that could not check every missing record also lands here, and refuses.

    What the contract measured

    0 rows extracted · 8 contract breaches · unresolved

    Evidence, verbatim

    • field id null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field permalink null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field title null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field price null rate 100.0% against a limit of 2.0% over 0 rows (examples: )
    • field currency null rate 100.0% against a limit of 2.0% over 0 rows (examples: )
    • field condition null rate 100.0% against a limit of 5.0% over 0 rows (examples: )
    • field location null rate 100.0% against a limit of 5.0% over 0 rows (examples: )
    • listing fetched cleanly (HTTP 200, 1812678 bytes) but yielded no rows

    What we declined to do

    Refusal, recorded verbatim

    heal reported "done" but the result still fails the contract: field id null rate 100.0% exceeds limit 0.0% over 0 rows; field permalink null rate 100.0% exceeds limit 0.0% over 0 rows

    Repair prompt sent to the collector · took 294.3s

    Verbatim

    Extraction returned an empty array: 0 rows where several were expected, and no errors were raised. The listing at https://www.ebay.com/sch/i.html?_nkw=Cooluli+minifridge still returns HTTP 200 with 1812678 bytes, so it is not blocked. Permalinks for the previously extracted notices still return HTTP 200, so nothing was withdrawn. The previously working selector .permalink now matches 0 elements. Attribute hooks present in the live document: data-inlinepayload, data-marko-key, data-id, data-marko, data-ebayui, data-view-type, data-pageci, data-operationid. Re-extract every notice from https://www.ebay.com/sch/i.html?_nkw=Cooluli+minifridge.

    All 8 contract breaches, verbatim

    • field id null rate 100.0% exceeds limit 0.0% over 0 rows
    • field permalink null rate 100.0% exceeds limit 0.0% over 0 rows
    • field title null rate 100.0% exceeds limit 0.0% over 0 rows
    • field price null rate 100.0% exceeds limit 2.0% over 0 rows
    • field currency null rate 100.0% exceeds limit 2.0% over 0 rows
    • field condition null rate 100.0% exceeds limit 5.0% over 0 rows
    • field location null rate 100.0% exceeds limit 5.0% over 0 rows
    • returned 0 rows, contract requires at least 5
  5. resurrectedreported, nothing repairedTradewell Market (synthetic) · opened 2026-08-18 08:18Z#

    a record we published as withdrawn is on sale again. Nothing broke and the contract passed, which is exactly why this used to pass in silence.

    What the contract measured

    12 rows extracted · 0 contract breaches · back on sale: TW-33887

    Evidence, verbatim

    • 1 record(s) previously published as withdrawn are present in the listing again: TW-33887
    • contract tradewell@1 passed over 12 rows, so this is the source's own change rather than a reading error on our part
    • no longer marked withdrawn; the withdrawal and the return are both on the record
  6. paginationrepair deferred, collector busyTradewell Market (synthetic) · opened 2026-08-18 08:17Z#

    the listing is intact and the paging scheme moved. Repairable.

    What the contract measured

    7 rows extracted · 2 contract breaches · unresolved

    Evidence, verbatim

    • returned 7 rows against a baseline of 14, which is one page of 7
    • all 7 missing notice(s) still return HTTP 200 at their permalinks, so they are published but unreached

    What we declined to do

    Refusal, recorded verbatim

    a repair is already running on this collector, so this one could not start; nothing was attempted and the collector is unchanged

    All 2 contract breaches, verbatim

    • returned 7 rows, contract requires at least 10
    • row count fell from 14 to 7, a 50.0% drop, limit 20.0%
  7. paginationrepaired and verifiedTradewell Market (synthetic) · opened 2026-08-17 20:20Z#

    the listing is intact and the paging scheme moved. Repairable.

    What the contract measured

    14 rows extracted · 0 contract breaches · time to resolution 347.6s

    Evidence, verbatim

    • returned 7 rows against a baseline of 14, which is one page of 7
    • all 7 missing notice(s) still return HTTP 200 at their permalinks, so they are published but unreached

    Repair prompt sent to the collector · took 330.6s

    Verbatim

    Extraction returned 7 rows against a baseline of 14, and every field it did read satisfied contract tradewell@1. Rows are missing, not fields. The listing at https://tradewell-market-p5kff05i7-chirus-projects-a2862453.vercel.app/ still returns HTTP 200 with 8631 bytes, so it is not blocked. Permalinks for the previously extracted notices still return HTTP 200, so nothing was withdrawn. The previously working selector .permalink now matches 0 elements. Attribute hooks present in the live document: data-testid, data-listing-ref, data-explicit-opt-in, data-deployment-id. Visible field labels are now: Brand, Item condition, Seller, Location, Shipping, Listed. Re-extract every notice across https://tradewell-market-p5kff05i7-chirus-projects-a2862453.vercel.app/ and /page-2.html.

  8. gonerepair refusedTradewell Market (synthetic) · opened 2026-08-17 19:49Z#

    the records were removed at source and their permalinks no longer resolve. A repair here fabricates replacements for records somebody deliberately took down.

    What the contract measured

    11 rows extracted · 1 contract breach · time to resolution 0.0s · withdrawn: TW-88214, TW-44903, TW-33887

    Evidence, verbatim

    • 3 notice(s) absent from the listing AND their permalinks return 404 or 410: TW-88214, TW-44903, TW-33887
    • removed at source, not lost by us: retained as last-good, never healed
    • all 3 missing record(s) accounted for by withdrawal; remaining 11 rows satisfy contract tradewell@1

    What we declined to do

    Refusal, recorded verbatim

    records were withdrawn at source and their permalinks no longer resolve; healing would fabricate replacements for records that were deliberately removed

    All 1 contract breaches, verbatim

    • row count fell from 14 to 11, a 21.4% drop, limit 20.0%
  9. blockedrepair refusedTradewell Market (synthetic) · opened 2026-08-17 17:27Z#

    the request was refused at the door. Rewriting selectors cannot clear a block, so attempting a repair would burn credits and can deepen the block.

    What the contract measured

    0 rows extracted · 10 contract breaches · unresolved

    Evidence, verbatim

    • listing returned HTTP 200 with block signature "verify you are a human"
    • healing cannot clear a block; backing off instead

    What we declined to do

    Refusal, recorded verbatim

    the source refused the request; healing cannot clear a block

    All 10 contract breaches, verbatim

    • field id null rate 100.0% exceeds limit 0.0% over 0 rows
    • field permalink null rate 100.0% exceeds limit 0.0% over 0 rows
    • field title null rate 100.0% exceeds limit 0.0% over 0 rows
    • field brand null rate 100.0% exceeds limit 0.0% over 0 rows
    • field price null rate 100.0% exceeds limit 0.0% over 0 rows
    • field condition null rate 100.0% exceeds limit 0.0% over 0 rows
    • field location null rate 100.0% exceeds limit 0.0% over 0 rows
    • field listedOn null rate 100.0% exceeds limit 0.0% over 0 rows
    • returned 0 rows, contract requires at least 10
    • row count fell from 11 to 0, a 100.0% drop, limit 20.0%
  10. driftrepair ran, result rejectedTradewell Market (synthetic) · opened 2026-08-17 17:17Z#

    the data is still published in a different shape. This class is repairable, so a repair was attempted, unless the entry below says otherwise: a cycle that could not check every missing record also lands here, and refuses.

    What the contract measured

    0 rows extracted · 8 contract breaches · unresolved

    Evidence, verbatim

    • field id null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field permalink null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field title null rate 100.0% against a limit of 0.0% over 0 rows (examples: )
    • field price null rate 100.0% against a limit of 2.0% over 0 rows (examples: )
    • field currency null rate 100.0% against a limit of 2.0% over 0 rows (examples: )
    • field condition null rate 100.0% against a limit of 5.0% over 0 rows (examples: )
    • field location null rate 100.0% against a limit of 5.0% over 0 rows (examples: )
    • listing fetched cleanly (HTTP 200, 8470 bytes) but yielded no rows

    What we declined to do

    Refusal, recorded verbatim

    heal reported "done" but the result still fails the contract: field id null rate 100.0% exceeds limit 0.0% over 0 rows; field permalink null rate 100.0% exceeds limit 0.0% over 0 rows

    Repair prompt sent to the collector · took 246.5s

    Verbatim

    Extraction returned an empty array: 0 rows where several were expected, and no errors were raised. The listing at https://tradewell-market.vercel.app/ still returns HTTP 200 with 8470 bytes, so it is not blocked. Permalinks for the previously extracted notices still return HTTP 200, so nothing was withdrawn. The previously working selector .permalink now matches 0 elements. Attribute hooks present in the live document: data-testid, data-item-id. Visible field labels are now: Brand, Condition, Seller, Location, Shipping, Listed. Re-extract every notice across https://tradewell-market.vercel.app/ and /page-2.html.

    All 8 contract breaches, verbatim

    • field id null rate 100.0% exceeds limit 0.0% over 0 rows
    • field permalink null rate 100.0% exceeds limit 0.0% over 0 rows
    • field title null rate 100.0% exceeds limit 0.0% over 0 rows
    • field price null rate 100.0% exceeds limit 2.0% over 0 rows
    • field currency null rate 100.0% exceeds limit 2.0% over 0 rows
    • field condition null rate 100.0% exceeds limit 5.0% over 0 rows
    • field location null rate 100.0% exceeds limit 5.0% over 0 rows
    • returned 0 rows, contract requires at least 5