One real break · repaired in 10 minutes
Nineteen confident rows, every price 100× too large
The one real break this project hit, and the command that fixed it without changing the collector id.
The same capture, either side of one heal
Flip the switch. Every health signal reads the same; only the price moves.
Health signals · unchanged by the switch
All three correct. All three useless here.
All 19 rows · joined on the product URL
every price 100× too largeevery price matches the page| Laptop | Price at 19:00Price at 19:10 | Verdict |
|---|---|---|
| Apple MacBook Air 13.6" (M5, 16GB, 512GB, Sky Blue) | ₹1,39,39,900₹1,39,399 | 100× too largematches the page |
| Apple MacBook Air 13.6" (M5, 16GB, 512GB, Midnight) | ₹1,39,39,900₹1,39,399 | 100× too largematches the page |
| Lenovo LOQ 15IAX9 (Core i5-12450HX, 16GB, 512GB, RTX 3050 6GB) | ₹74,99,000₹74,990 | 100× too largematches the page |
| Apple MacBook Air 13.6" (M5, 16GB, 512GB, Silver) | ₹1,39,39,900₹1,39,399 | 100× too largematches the page |
| Lowest price in the capture | ₹74,99,000₹74,990 | |
| Highest price in the capture | ₹2,36,99,900₹2,36,999 |
The other 15 rows, all the same shape ⌄
| Laptop | Price at 19:00Price at 19:10 | Verdict |
|---|---|---|
| ASUS VivoBook S14 OLED S5406SA-QD098WS (Core Ultra 5 226V, 16GB, 512GB) | ₹81,99,000₹81,990 | 100× too largematches the page |
| Apple MacBook Air 15.3" (M5, 16GB, 512GB, Midnight) | ₹1,67,29,900₹1,67,299 | 100× too largematches the page |
| Apple MacBook Air 15.3" (M5, 16GB, 512GB, Silver) | ₹1,67,29,900₹1,67,299 | 100× too largematches the page |
| HP Victus 15-fa2316tx (Core i5-14450HX, 24GB, 512GB, RTX 3050) | ₹90,99,000₹90,990 | 100× too largematches the page |
| Apple MacBook Air 13.6" (M5, 16GB, 1TB, Midnight) | ₹1,72,87,900₹1,72,879 | 100× too largematches the page |
| HP OMEN HyperX 15-ga0005tx (Core i7-14650HX, 24GB, 1TB, RTX 5060) | ₹1,73,99,000₹1,73,990 | 100× too largematches the page |
| HP Victus 15-fb3124ax (Ryzen 7 7445H, 16GB, 512GB, RTX 4050) | ₹96,99,000₹96,990 | 100× too largematches the page |
| HP OMEN 16-am0241tx (Core i7-14650HX, 24GB, 1TB, RTX 5050) | ₹1,49,99,000₹1,49,990 | 100× too largematches the page |
| HP Victus 15-fa2309tx (Core i7-13620H, 24GB, 1TB, RTX 5050) | ₹1,24,49,000₹1,24,490 | 100× too largematches the page |
| HP Victus 15-fa2192tx (Core i5-13420H, 16GB, 512GB, RTX 3050) | ₹76,49,000₹76,490 | 100× too largematches the page |
| Lenovo Legion 5 Pro 16IRX10 (Core i7-14650HX, 32GB, 1TB, RTX 5060) | ₹2,36,99,900₹2,36,999 | 100× too largematches the page |
| Apple MacBook Pro 14.2" (M5, 16GB, 1TB, Space Black) | ₹2,23,09,900₹2,23,099 | 100× too largematches the page |
| HP OmniBook X Flip 14-fm0119tu (Core Ultra 5, 16GB, 512GB, 2K OLED) | ₹1,13,99,000₹1,13,990 | 100× too largematches the page |
| Apple MacBook Pro 14.2" (M5, 16GB, 1TB, Silver) | ₹2,23,09,900₹2,23,099 | 100× too largematches the page |
| HP Victus 15-fa2508tx (Core 5 210H, 24GB, 512GB, RTX 4050) | ₹1,13,99,000₹1,13,990 | 100× too largematches the page |
Both captures committed unedited under examples, ten minutes apart.
Read from examples/reliance-digital-capture*.json
How the repair ran
- 19:00Capture · 19 rows, status ready
offers.priceis the string"139399.00"; the field description said digits only, which ate the decimal point. - 19:07scraper heal · 597 characters of evidence
Observed, expected, cause, and one instruction: do not hard-code a divide by 100, some pages carry no decimal part.
- 19:07The gate · what the CLI proposes
preview_result{"price":172879,"list_price":185900, …}anddiff_summary"proposed template has 1 step(s)". - 19:10scraper approve --auto-save
completed_stepsendsuser_approval,save_new_template. Without--auto-savenothing persists. - 19:10Verify · 19 rows, none above ₹10,00,000
Low ₹74,990, high ₹2,36,999, and ₹1,39,399 matching the page to the rupee.
Read from the run envelopes, examples/README.md
The approval step is the only place the platform says what it did
"You are the detector. The CLI never decides on its own that a scraper is broken — you inspect the run output and decide."
npx -p @brightdata/cli@0.3.5 bdata scraper heal --helpQuoted from @brightdata/cli@0.3.5 README.md
The collector id, across every heal on record
0
heals changed the collector id, of 1 recorded
6
nights in the archive
19
page loads the heals billed, measured not inferred
npm run archive -- --events reads it, and needs MONGODB_URI. Exported 2026-08-23T15:49:15.405Z.
Exported from MongoDB fixtures/ledger/events.json
A second break in the same folder is still there
20 rows, 13 null titles, and the watcher fires
Prices on all 20, titles on 7. The margin for title is 0.20 in src/watch/config.ts, observed 13/20. Left unhealed so you can check it. Run npm run watch:once.
Left unhealed examples/vijay-sales-capture.json