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
| Task | Suitable |
|---|---|
| An open-ended research question over public sources | yes |
| Targeted fact or event extraction from an already-collected corpus | yes |
| A one-off page read, no authentication | yes |
| Heavy-tier RPA on an authenticated interface (the retained browser core) | yes |
| Matching a generalist, authenticated search assistant on discovery breadth | no — see below |
| Getting past a hardened anti-bot wall (LinkedIn-class) | no |
| Bulk mutation across many independent sites | no — not the design point |
| Anything requiring rollback | no — 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.