The full graph, downloadable under CC BY 4.0.
Take the graph
The website is a window; the knowledge graph is the actual project. It is published in full so the reasoning can be audited rather than believed. Free to use with attribution — if you build on it, cite DeepTunisia and the underlying sources.
The graph is released under CC BY 4.0 (attribution only — reuse freely, including commercially, keep the credit). The code that builds it is MIT. See data/LICENSE in the repository for what each covers.
How to read a record
Two fields carry most of the epistemic weight. basis says what kind of claim this is: documented, reported, inferred or unsubstantiated. The interval carries four date fields rather than two, because historical personnel records are rarely precise and collapsing them would invent certainty. raw preserves exactly what was authored, so you can see the difference between a decree date and an estimate.
Here status: "last-verified" means the officeholder was confirmed in post on 1 October 2025 and may well have continued. It does not mean they left. That distinction is the difference between a dataset and a guess, and it is why the Chronicle draws that bar with a soft right edge.
{
"id": "p-dgsn-saidane",
"role": "dg-national-security",
"holder": "mourad-saidane",
"basis": "documented",
"datesInferred": false,
"interval": {
"startEarliest": 1653955200000,
"startLatest": 1653955200000,
"endEarliest": 1759276800000,
"endLatest": 1785110400000,
"startPrecision": "day",
"status": "last-verified",
"raw": { "start": "2022-05-31", "end": "verified:2025-10-01" }
},
"review": { "by": "Initial compilation", "date": "2026-07-26",
"method": "Checked directly against the JORT decree text" },
"sources": ["jort-2022-546", "lapresse-saied-securite-2025"]
} Entity model
| Type | Purpose | Key fields |
|---|---|---|
| Source | A citation. Everything else points at these. | id, title, publisher, date, url, archive_url, tier (1–5), lang, excerpt |
| Institution | Ministries, services, parties, companies, families, foreign states, organisations. | id, name_en/fr/ar, abbr, type, layer, parent, active interval, sources |
| Role | A canonical office. Normalising titles kills transliteration drift. | id, title_en/fr/ar, institution, authority (published weight table) |
| Person | Names in three scripts plus alias spellings, for entity resolution. | id, name_en/fr/ar, aliases, birth, death, layers, trajectory, basis, sources |
| Position | The join that makes time-travel possible: person × role × span. | id, role, holder, interval (4-field fuzzy), basis, datesInferred, reasoning, falsifiable_by, disputes, review, predecessorDerived, successorDerived, sources |
| Relationship | A typed, dated, graded edge between any two entities. | id, from, to, type, subtype, interval, basis, attributed_to, reasoning, falsifiable_by, disputes, sources |
| Event | Dated events, with competing characterisations held side by side. | id, date, title_en/fr/ar, category, rupture, actors, institutions, contested, disputes, sources |
| Era, Question, Hypothesis | The analytical layer: periodisation, open research tasks, falsifiable claims. | era: interval, thesis, formula · question: kind, status · hypothesis: support, reasoning, falsifiable_by |
Caveats you should carry with the data
- 232 records await a primary source. They are marked. Do not cite an inferred span as a date.
- 64 contradictions are unresolved. Where sources disagree, the dataset records the disagreement instead of choosing. Check the
disputesarray before using a figure. - The pre-2011 police chronology is the weakest area. The sequence of national police chiefs under Ben Ali rests largely on secondary sources.
- The authority weights are editorial. They are a judgement about formal authority, published on the method page so you can substitute your own.
- Only 46 of 1715 records have been through independent human review. Treat the rest as compiled but unaudited.
What the map does not contain
The build measures its own shortfalls and publishes them. Every number in this section is written by the build, not by hand.
| Presidential network coverage | Edges | Family ties | Missing categories |
|---|---|---|---|
| Kais Saied | 21 | 3 | party, political-alliance |
| Moncef Marzouki | 18 | 4 | all categories present |
| Zine El Abidine Ben Ali | 17 | 8 | political-alliance, political-conflict, reported-influence |
| Habib Bourguiba | 15 | 3 | political-alliance |
| Mohamed Ennaceur | 13 | 2 | all categories present |
| Fouad Mebazaa | 11 | 1 | political-alliance |
| Beji Caid Essebsi | 11 | 1 | political-alliance, reported-influence |
Card completeness
| Sections filled | People |
|---|---|
| 0 / 5 | 42 |
| 1 / 5 | 60 |
| 2 / 5 | 107 |
| 3 / 5 | 134 |
| 4 / 5 | 90 |
| 5 / 5 | 17 |
Research queue
Senior figures with two sections or fewer — the roadmap's next targets.
- Hayreddin Pasha 2 of 5 sections
- Mohamed Chenik 2 of 5 sections
- Slaheddine Baccouche 2 of 5 sections
- Mohamed Salah Mzali 2 of 5 sections
- Habib Essid 1 of 5 sections
- Kamel Feki 1 of 5 sections
- Mohamed Najem Gharsalli 1 of 5 sections
- Hédi Khefacha 2 of 5 sections
- Tahar Belkhodja 2 of 5 sections
- Khaled Nouri 2 of 5 sections
- Elyes Fakhfakh 0 of 5 sections
- Mehdi Jomaa 1 of 5 sections
- Najla Bouden 1 of 5 sections
- Ahmed Hachani 1 of 5 sections
- Kamel Madouri 1 of 5 sections
- Bahi Ladgham 2 of 5 sections
- Mohammed Mzali 2 of 5 sections
- Hedi Baccouche 2 of 5 sections
- Hédi Nouira 2 of 5 sections
- Hamed Karoui 2 of 5 sections
Human review by claim kind
Every claim kind the schema can carry a review on, with its denominator. The previous figure counted only positions, relationships and events.
| Claim type | Reviewed | Coverage |
|---|---|---|
| Institutions | 2 / 207 | 1% |
| People | 2 / 450 | 0% |
| Positions | 29 / 422 | 7% |
| Relationships | 8 / 362 | 2% |
| Events | 1 / 112 | 1% |
| Agreements | 0 / 23 | 0% |
| World claims | 4 / 10 | 40% |
| Companies | 0 / 25 | 0% |
| Contracts | 0 / 15 | 0% |
| Licences | 0 / 11 | 0% |
| Declarations | 0 / 9 | 0% |
| Education | 0 / 25 | 0% |
| Places | 0 / 44 | 0% |
Human review by risk flag
Flags overlap: a record carries every flag true of it, so these totals sum to more than the record count. An inferred claim that names its source is counted under both.
| Risk bucket | Reviewed | Coverage |
|---|---|---|
| Unsubstantiated | 16 / 19 | 84% |
| Attributed | 19 / 307 | 6% |
| Inferred | 2 / 32 | 6% |
| Reported | 20 / 1161 | 2% |
| Documented | 8 / 321 | 2% |
A review note is not an independent check. No review yet records an independence statement, and the schema has no field for one, so independent coverage is published as zero rather than inferred from a reviewer name.
Rebuilding it yourself
The source of truth is YAML, not this JSON. The build validates every reference, rejects any claim without a source, rejects an inference without stated reasoning and a falsifier, rejects an unattributed low-confidence claim, and derives all succession chains from the position records so gaps surface instead of being smoothed over. If it builds, the referential integrity holds.