Dinoer

Limits

What Dinoer does badly, what it does not reach at all, and the one limit that made the project rewrite its own claim about itself — on real evidence, the same evening it was found.

Knowing where these limits are is what lets you place Dinoer correctly — and it is also how the real ones get pushed back, one measurement at a time rather than one assumption at a time.

Where it fits, and where it does not

TaskSuitable
An open-ended research question over public sourcesyes
Targeted fact or event extraction from an already-collected corpusyes
A one-off page read, no authenticationyes
Heavy-tier RPA on an authenticated interface (the retained browser core)yes
Matching a generalist, authenticated search assistant on discovery breadthno — see below
Getting past a hardened anti-bot wall (LinkedIn-class)no
Bulk mutation across many independent sitesno — not the design point
Anything requiring rollbackno — nothing here has an undo

What Dinoer does not compete on — measured, not assumed

On 14 August 2026, a real test compared Dinoer’s own SearXNG-driven discovery (28 pages collected, on a real reputation-research subject) against a single, unprepared Perplexity query on the same subject. Three sources the Perplexity query surfaced immediately — a LinkedIn profile, a project page, a stock-photo credit — were entirely absent from Dinoer’s 28 pages, verified directly against the raw collecte.jsonl, not assumed from the report.

Root cause, identified rather than guessed: the SearXNG queries used were aimed at company directories — the wrong kind of search for those pages, not a ranking or truncation defect downstream. A generalist backend with authenticated, cookie-backed engines behind it has structural reach a local, unauthenticated SearXNG instance does not. This is not a bug queue to clear; it is why the project’s own positioning was rewritten the same evening — see The project for the decision, and What Dinoer is for what the same test verified instead.

A second, independent gap found in the same corpus

Two pages in that same 28-page corpus — a GitHub profile, a YouTube channel — were fetched successfully, but their collected text was cookie-banner and login-wall noise, nothing else. The light tier cannot execute their JavaScript, and heavy-tier escalation never triggered for either page.

Why not: the escalation heuristic keys off “empty text,” not “text present but unusable.” A real, distinct architecture gap, open rather than patched over for this page. Where escalation happens →

The automatic report is a draft, not a verified answer

campagne.py’s own end-of-run report concatenates the collected corpus in file-write order, truncated at 60,000 characters, with no relevance ranking unless a manifest supplies motifs_annee/motifs_mois or sujet_synthese. Without them, a real event PDF on the reference campaign ranked 27th of 29 “probable” pages by write order — outside the truncation budget, silently. Both fields default to absent.

If you need a report you can trust unsupervised, use the looped, open-ended extraction pattern (campagne.py --extraire-cible) instead of the single automatic report. The extraction recipe →

What no flag changes

No vision fallback, anywhere. A clickable image or a canvas with no accessible label is simply outside what Dinoer can act on — not a smaller capability than the tool it forked from, an absent one, on purpose. Why →

The corpus containment is a reduced surface, not a seal. bash stays allowed in the delegated model’s sandbox, and a model denied websearch has reached the live web through bash curl instead, in a real verification run. The full account →

Nothing here has an undo. The retained browser core executes the scenario you wrote, at machine speed. A badly written one does real damage.

Inherited from the browser core, and still true

WAF detection is keyword-based. It can flag a page that is not actually blocked. It is reported as a count on respect.waf_bloquants, never as a verdict that halts a run, and --ignorer-waf exists for when you have confirmed it was wrong.

A closed shadow root stays closed, and a cross-origin iframe has no Set-of-Mark-equivalent numbering to fall back on — there never was one to lose. cliquer_iframe/remplir_iframe cross the frame boundary; you still supply the inner CSS selector yourself. The iframe recipe →

And what it does not claim

Dinoer is no more careful than the manifest or scenario you give it. It does not verify your intent, does not guess what you meant, and does not stop before something irreversible. Everything else on this site describes what it perceives and collects. This page is about what it does not reach — and both are needed to decide whether Dinoer fits your case.