Read this first
This record was assembled by an AI system and has not been fact-checked by a
journalist or a lawyer. Yorgen Fenech has pleaded not guilty and is presumed innocent
until a verdict is delivered. People named in evidence who are not on trial have not been
charged in this case, and several have denied wrongdoing. Treat every result as a pointer to
the transcript, not as a finding.
The underlying transcripts are journalists' live-blog reports of the hearings. They are not
the official court record.
What this searches, and what it guarantees
The whole corpus — 13,734 paragraphs, 216,791 words — is loaded into your browser and
searched in full. Nothing is sent anywhere: there is no server, no API and no log of what you
type. Because the search runs over everything, the result count is the true number of matching
paragraphs, not the top few.
| Guaranteed | Not guaranteed |
| Every one of the 13,734 paragraphs is in the index — asserted at build time. |
That your words match the court's words. This is a lexical index. |
| No ranking cut-off. Filters scan every row; the count is complete. |
That the right question was asked. Absence of a result is not evidence of absence. |
| The same query always returns the same paragraphs. |
That the extraction behind “produced a connection” caught everything. |
The vocabulary problem, and what is done about it
The real way a search like this misses something is that the reader types bribe
and the witness said kickback. Two things mitigate it. Expand related words
maps a term onto the other words this record actually uses for the same thing. Match word
endings treats pay, paid and payment as the same
stem. Both are on by default and can be switched off for a strict literal search.
One trial day is missing, and here is why
Checking the record…
Read, nothing recorded
Every paragraph was adjudicated one by one. 3,519 produced a citation. 6,967 were
read and judged to contain no relationship, each with a written reason, and those reasons
are searchable here. This is the part most search tools cannot offer: it lets you check whether
a passage was missed or whether it was considered and set aside — and see on what grounds.
What each result carries
Trial day, paragraph number, the timestamp the live blog gave it, the verbatim text, and a
link to the published report for that day. 41 of 41 days link to their source
article. Anything drawn from a paragraph — 3,774 connections, 887 dated moments,
43 contradictions — is shown beneath it.
Asking a question, and why the model cannot invent a quote
The Ask a question tab adds a language model. It is given exactly two jobs, and denied
a third. First it turns your question into a search query — the words a witness or a lawyer
would have used, rather than the words you typed. That query then runs here, in your browser,
over all 13,734 paragraphs, with no ranking cut-off. The model does not choose what is
retrieved. Second, it is shown the strongest passages and asked which of them bear on your
question — by number.
It is never asked to write a quote, and nothing it writes is ever displayed as evidence. Every
passage on screen is pulled from the local corpus by index. A fabricated quotation is therefore
not something the instructions discourage; it is something the data path makes impossible. If
the model returns a passage number it was not given, that citation is discarded and the
discard is reported to you. The model's own words appear only inside a black-bordered box
marked machine-written summary — not evidence, and it is instructed to describe what the
record contains rather than to assert that any person did anything.
You can see the query that ran under Show the search that actually ran on every answer,
so you can check what was searched for rather than taking the answer on trust.
Questions are answered through this site, which is rate-limited to a few an hour per reader.
Your question is passed to a model provider in order to be answered; it is not stored here, and
the record itself never leaves your browser — only the passages already retrieved are sent.
Keyword search involves no model at all and runs entirely on your own machine.
Ranking by meaning
Rank by meaning loads a 1.9 MB model built from this record — latent semantic
indexing over the 13,734 paragraphs, reduced to 128 dimensions. Your query is compared
against every paragraph by exact brute-force cosine. There is no approximate-nearest-neighbour
index, which is the usual place a semantic search quietly loses things: this one either ranks a
paragraph highly or it doesn't, but it always looks at all of them.
It is used two ways. Normally it reorders the paragraphs your words already matched, and
it never removes one. When your words match nothing at all, it instead offers the
closest passages by meaning, clearly marked as such — a suggestion, not a match.
Two honest limits. The model is fitted on this corpus rather than being a general language
model, so it has learned how this court uses words — useful for “17 Black” or
“tal-Maksar”, weaker at general paraphrase than a large embedding model would be. And it
retains about 35% of the variance in the text, so treat a high similarity score as a hint
worth reading, not as a finding.
The same model produced a thesaurus from the record itself: 673 terms have a
neighbour learned from how they are actually used here, which is added to the hand-written
synonym list behind Expand related words.
Search syntax
"exact phrase" matches the phrase. -word excludes. Separate terms are
combined with AND, so every term must appear. Results are ordered by BM25 relevance, but the
ordering only affects what you see first — every match is in the count and in the export.
Created by MyRA with Claude.
An independent record, not affiliated with the Courts of Justice, with any outlet credited, or
with the Caruana Galizia family. Built 19 August 2026.