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.
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.
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.
| Verb | Inverse | Domain → range | Reads as |
|---|---|---|---|
speaks_atfala_em | hostsrecebe | Person → Event | A speaks at B |
listed_underlistado_em | listslista | Person → Organisation | A is listed under B |
takes_place_atdecorre_em | venue_ofé_local_de | Event → Place | A takes place at B |
organised_byorganizado_por | organisesorganiza | Event → Organisation | A is organised by B |
part_ofparte_de | containscontém | Session → Event | A is part of B |
on_stageno_palco | stagesacolhe | Session → Stage | A is on B |
captured_incapturado_em | capturescaptura | Source → Snapshot | A was captured in B |
attested_byatestado_por | attestsatesta | Person → Source | A is attested by B |
attested_byatestado_por | attestsatesta | Session → Source | A is attested by B |
attested_byatestado_por | attestsatesta | Event → Source | A is attested by B |
present_inpresente_em | includesinclui | Person → Snapshot | A is present in B |
absent_fromausente_de | lacksnão_inclui | Person → Snapshot | A is absent from B |
coverscobre | covered_bycoberto_por | Coverage → Event | A covers B |
published_bypublicado_por | publishespublica | Coverage → Organisation | A is published by B |
stands_onassenta_em | supportssustenta | Story → Source | A stands on B |
reportsrelata | reported_byrelatado_por | Story → Event | A reports B |
reportsrelata | reported_byrelatado_por | Story → Snapshot | A reports B |
speaks_onfala_sobre | spoken_on_byfalado_por | Person → Topic | A speaks on B |
active_inatua_em | practised_bypraticado_por | Person → Industry | A is active in B |
usesusa | used_byusado_por | Person → Technology | A uses B |
advocatesdefende | advocated_bydefendido_por | Person → Idea | A advocates B |
offersoferece | offered_byoferecido_por | Person → Service | A offers B |
offersoferece | offered_byoferecido_por | Person → Product | A offers B |
Banned
| Verb | Why |
|---|---|
related_to | Symmetric, so it would be its own inverse, and it says nothing a reader could walk. |
mentions | Every edge in a graph built from text 'mentions' something. It is the absence of a verb. |
associated_with | The verb people reach for when they do not know the relationship. Find out, or leave the edge out. |
works_at | Not 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'.
| Class | Shown as | Pattern, against the listed title |
|---|---|---|
| investor | investor-side, by listed title | \b(investor|partner|ventures?|vc|angel|capital|fund|lp)\b |
| founder | founder or operator, by listed title | \b(founder|co-founder|ceo|cto|coo|cpo|chief|head of|director|managing)\b |
| advisor | advisor, 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.