newsroom.sgit.ai / portugal / graph

The graph

329 nodes, 1106 edges, one event. Start with the people and switch the other blocks on one at a time. Click a node to open it, double-click to centre on it, shift-click two to read the path between them as sentences — in English or in Portuguese. Machine surfaces: graph.json · ontology.json.

Beta, agent-produced, human-reviewed. The research, extraction and drafting are done by software agents. Dinis Cruz is the named editor of record and reads every page before it publishes. That is a person taking responsibility, not a legal opinion — there has been no legal review.

Every claim here walks back to bytes we hold. Each source page was fetched, frozen to a dated snapshot in this repository and hashed with SHA-256. We do not read the live site at publish time, so a page cannot change under a claim without the change showing up as a new hash.

We report what others have published. This publication originates no facts about any company or person, makes no assessment of anybody, and does not explain why a name appears or disappears from somebody else’s list. The full limits →

If you are named on this site — what is held about you, why, and how to have it removed without giving a reason: your data →

The instrument is borrowed, on purpose. This is the same graph engine and the same control vocabulary as graphs.sgit.ai’s own graph pages — Cytoscape.js vendored into this site, packs instead of levels, otherwise the same panel. A reader who has used one should not have to learn the other. What is this section’s own: every node carries the frozen, hashed source it came from, and the detail pane shows it.

Query it instead of drawing it. The same graph is loaded into two real database engines in your browser, with no server: SQL (SQLite over the section’s JSON) and SPARQL (Oxigraph over the same graph as triples, ontology inside the store). Worked queries on both, with the count each returned at build.

Find
Packs · blocks of nodes

Switch a block on and its nodes and edges join the graph.

Types
Edges

speaks_at is off by default: 64 spokes into one node hide everything else. attested_by is off because every node carries its source in the detail pane anyway.

Colour by
Labels
Size by
Layout
Explore from one place

0 shows everything. Above 0, only what is within that many hops of the centred node.

Keep this view
Screen

Start here

Each button sets the packs and, where it makes sense, runs a query.

The room: event, organisations, peopleThe programmeWhat moved between snapshotsWhat the press saysOur stories and what they stand onOrganisations with an investor-side speakerWho is no longer listed, and which snapshot still has themTopics: what the event says each speaker speaks onDerived tags: industries, technologies, ideas, offeringsOrganisations whose speakers speak on AI

Query the paths

Tracing answers how do these two connect? This answers show me every route shaped like this: a start filter, then up to three edge-and-node steps, walked breadth-first with a bound — and it says when it hit the bound, because a query that silently truncates is worse than one that refuses.

1
2
3

The vocabulary

Every edge is a verb with a distinct, named inverse, and every verb carries its Portuguese. Walked forwards a path uses the verb; walked backwards it uses the inverse; either way it is a sentence. Inherited from graphs.sgit.ai’s edge grammar.

VerbInverseDomain → rangeReads as
speaks_at
fala_em
hosts
recebe
Person → EventA speaks at B
listed_under
listado_em
lists
lista
Person → OrganisationA is listed under B
takes_place_at
decorre_em
venue_of
é_local_de
Event → PlaceA takes place at B
organised_by
organizado_por
organises
organiza
Event → OrganisationA is organised by B
part_of
parte_de
contains
contém
Session → EventA is part of B
on_stage
no_palco
stages
acolhe
Session → StageA is on B
captured_in
capturado_em
captures
captura
Source → SnapshotA was captured in B
attested_by
atestado_por
attests
atesta
Person → SourceA is attested by B
attested_by
atestado_por
attests
atesta
Session → SourceA is attested by B
attested_by
atestado_por
attests
atesta
Event → SourceA is attested by B
present_in
presente_em
includes
inclui
Person → SnapshotA is present in B
absent_from
ausente_de
lacks
não_inclui
Person → SnapshotA is absent from B
covers
cobre
covered_by
coberto_por
Coverage → EventA covers B
published_by
publicado_por
publishes
publica
Coverage → OrganisationA is published by B
stands_on
assenta_em
supports
sustenta
Story → SourceA stands on B
reports
relata
reported_by
relatado_por
Story → EventA reports B
reports
relata
reported_by
relatado_por
Story → SnapshotA reports B
speaks_on
fala_sobre
spoken_on_by
falado_por
Person → TopicA speaks on B
active_in
atua_em
practised_by
praticado_por
Person → IndustryA is active in B
uses
usa
used_by
usado_por
Person → TechnologyA uses B
advocates
defende
advocated_by
defendido_por
Person → IdeaA advocates B
offers
oferece
offered_by
oferecido_por
Person → ServiceA offers B
offers
oferece
offered_by
oferecido_por
Person → ProductA offers B

Banned

VerbWhy
related_toSymmetric, so it would be its own inverse, and it says nothing a reader could walk.
mentionsEvery edge in a graph built from text 'mentions' something. It is the absence of a verb.
associated_withThe verb people reach for when they do not know the relationship. Find out, or leave the edge out.
works_atNot what the source says. A speaker card lists an organisation; it does not assert employment. The edge is listed_under.

The one formula

One of two classifications this graph makes rather than reads. Matched against the LISTED role title, first match wins, and every value carries 'by listed title'.

ClassShown asPattern, against the listed title
investorinvestor-side, by listed title\b(investor|partner|ventures?|vc|angel|capital|fund|lp)\b
founderfounder or operator, by listed title\b(founder|co-founder|ceo|cto|coo|cpo|chief|head of|director|managing)\b
advisoradvisor, counsel or academic, by listed title\b(advisor|adviser|counsel|professor|researcher|lawyer|legal|consultant|author)\b

For an agent

Fetch /portugal/data/graph.json and /portugal/data/ontology.json rather than parsing this page. Every node names its frozen source; every edge is a verb with a named inverse in both languages. This page also publishes an API: after the tool:ready event, window.__graph exposes read methods (get_graph, get_nodes, get_node, get_edges, get_ontology, search) and view methods (set_packs, explore, select_node, set_layout, set_language, fit_graph, graph_snapshot, reset_view). Nothing writes. The role_class on a person is a published formula over the listed title, not a fact.