# The pack for incident.graph@web-summit.dinis

> Kept by incident.librarian@web-summit.dinis, 2026-11-11, 12:18 UTC: written by `tools/library-pack.mjs` on every push from the files it points at. Read [start.md](start.md) first, then this, then open only what you need. A pointer is `path` (bytes, the first 10 hex digits of its sha256); any path opens at `view/?path=<path>`. [The pack](README.md).

## Your job

**ontologist and cartographer**: one graph of the storm: actors, decisions, warnings, sources, signals, places, outlets, agents; a small ontology (`data/graph/ontology.json`, with ontologist@'s schemas if readable); built from the existing JSON, never by hand twice; a graph page reusing Silvio's engine; and **a database in the browser** (SQL over the datasets, as sgit.ai's `/databases/` does: read how, reuse) with five example queries. (from `agents/JOBS.md` (16,087 B, cb88df47c9))

**You may change:** `data/graph/**`, `app/graph/**`, `tools/graph-*.mjs`, `data/query/**`, `agents/graph/**`, `accounts/ledger/graph.jsonl`, `transition/interviews/graph.md`, and your own entry in `data/keys.json`. (from `agents/policy.json` (13,565 B, ec9b7b8d15))

**Your draft behaviour policy** (not agreed by Dinis): `agents/graph/policy.md` (8,218 B, b66062553f)

## Where the work stands

- **State:** the third graph session (from 07:56 on 11 November): the graph is five parts (storm.json names storm-decisions, storm-signals, storm-sources, storm-elsewhere in `more`), joined to sources/, meteorology/ and evidence/ by crossings; rebuilt hourly (its own date: 2026-11-11T11:54Z)
- **Next:** sizes at 11:54 on 11 November: tables/coverage.json 196 KB with coverage-2.json (parts of at most 190 KB of rows: nothing to do), storm-sources.json 147 KB (about 3 KB an hour; next to split: …
- **Next:** app/labs reads tables/signals.json and tables/actors.json without following `more`: tell incident.labs@ before either nears 190 KB (signals is about 60 KB now)
- **Next:** deeper zoom: a day into its rows; a decision into its evidence captures (rows.json per row), as its own small graph
- **Ask:** Dinis: git history (earlier commits and CI tags) still holds a private person's post address in data/graph/; nothing here rewrites history. The conductor has it for you.
- **Ask:** incident.meteorologist@: in weather/cap.json, most `replaces` point at messages no longer in the feed, so was_level and was_starts are empty for 10 of 11 updates; keeping each message once seen (as …
- **Ask:** ontologist@'s schemas were not readable from this session (its repository is not attached).
- **Ask:** incident.researcher@: 7 hosts are mapped by hand to their actor (ontology own_channels); a `channel` field on each node in decisions/graph.json would remove the list.
- The whole status, with everything done: `agents/graph/status.json` (17,913 B, cc7c694fa5)

## The hand-over from the session before yours

Copied whole from `agents/graph/status.json` (`handover`): this is the part of the status a new session cannot start without.

- **In flight:** nothing half done.
- **Each wake:** git pull; node tools/graph-build.mjs; look at the last line and at sizes over 150 KB; commits with For: incident.graph@ since the last wake; test with a headless browser when a script changes (createRequire('/')('playwright'), a small static server on _site); measure; release.
- **Lesson:** a neighbour changing the shape of an id breaks links silently: after any neighbour's change, open three node panes in a browser and check every link resolves in _site
- **Lesson:** label a join 'fact' only when the other world states it; a match by host is a hypothesis with its reason
- **Lesson:** tell studio and labs in the commit (For:) before a node id or verb changes; app/labs/timelines.js reads the actor:host: prefix
- **read first:** agents/graph/HANDOVER.md (the first session's) is still right except: Source node ids are address:<id> (source:* is incident.sources@'s); `entity` on a node is the entity's own id (<type>/<slug>); meteorology/, sources/ and evidence/ ARE joined; the graph is five parts (storm-decisions.json since 07:58 on 11 November) and a table over 190 KB writes itself in parts.
- **the joins:** data/graph/ontology.json `crossings` (hand-kept: 4 worlds, 6 verbs each with an inverse) and the block 'the crossings' near the end of tools/graph-build.mjs, which writes data/graph/crossings.json (edges to '<world>/<its id>' with href, label, why; `captures` once per address). The pages read it in app/graph/common.js (G.cross, G.captures); graph.js shows 'our capture' and 'in the other graphs'; ontology.js has the table.
- **next in order:** sizes at 11:54 on 11 November: tables/coverage.json 196 KB with coverage-2.json (parts of at most 190 KB of rows: nothing to do), storm-sources.json 147 KB (about 3 KB an hour; next to split: Datasets from Sources, or by host), tables/sources.json 105 KB, storm.json 97 KB, crossings.json and storm-decisions.json under 100 KB
- **next in order:** app/labs reads tables/signals.json and tables/actors.json without following `more`: tell incident.labs@ before either nears 190 KB (signals is about 60 KB now)
- **next in order:** deeper zoom: a day into its rows; a decision into its evidence captures (rows.json per row), as its own small graph
- **next in order:** the media watch's keyed facts as edges (research/media/facts.json joined to node ids)
- **next in order:** check the pages on the live site, not only the local build
- **wake:** the second session was woken hourly at :53; the third is told an hourly wake at :53 will reach it (the conductor sets it)
- **inputs changed:** research/media/coverage.json: the builder reads its parts (articles_files) since 10:45 on 11 November; if the media watch renames or moves the parts, the builder falls back to the short rows and, once those are dropped, the coverage table would be empty without an error: look at `coverage N` in the builder's last line each wake

**Open first, before any other file: the hand-over written by the session before yours:** `agents/graph/HANDOVER.md` (8,520 B, 79137a9e34)

## Your files

33 files, 1,444,217 bytes in all (about 601,757 tokens to read every one): `data/graph/` 19, `app/graph/` 10, `tools/` 2, `agents/graph/` 1, `data/query/` 1. The ones to open first:

- `tools/graph-build.mjs` (61,452 B, 202a94d89b): The graph of an incident, built from its JSON files and never by hand (incident.graph@web-summit.dinis). node …
- `tools/graph-places.mjs` (1,577 B, 88d69c5eaf): IPMA's warning areas, by code: node tools/graph-places.mjs <the file fetched from IPMA <UTC time read Reads …
- `data/graph/storm.json` (96,654 B, af6119b1ee): One graph of Storm Charles, Lisbon: Wednesday 11 November 2026: actors, decisions, warnings, signals, …
- `data/graph/ontology.json` (12,775 B, 8c6f71dad9): The ontology of an incident on this site: eight kinds of thing and nine relations, small enough to explain on …
- `data/graph/README.md` (9,748 B, d146307f29): Kept by incident.graph@web-summit.dinis, 11 November 2026, 07:57 UTC
- `app/graph/README.md` (5,167 B, 1a64a1d061): One graph of Storm Charles: actors, decisions, warnings, signals, sources, places, datasets and agents, each …
- `data/graph/queries.json` (9,607 B, f4493363c9): The worked queries of the query page (/data/query/): each answers a real question about Storm Charles from …
- `data/query/README.md` (11,815 B, b10ebecf58): A database in your browser over Storm Charles's data: SQLite (WebAssembly) on the decisions, warnings, …
- `data/graph/crossings.json` (92,147 B, 388f98f70b): Where the graph of Storm Charles, Lisbon: Wednesday 11 November 2026 joins the site's other graphs, without …
- `data/graph/storm-decisions.json` (95,959 B, 99322dc8cc): Part of the graph of Storm Charles, Lisbon: Wednesday 11 November 2026: every Decision, with the edges that …

Every one, with who last changed it: [the catalogue](../index.json), filtered by your paths.

## Your neighbours

What your files say they read, and who reads yours: taken from the links and sources the files themselves declare. A contract here is an address and a shape that does not depend on anyone's session.

**You read:**

- **incident.conductor@** (1 file of theirs): `admin/build/generators.json` (1,172 B, 4713a630a0): Generators the build runs with --out _site. Each writes only into the …
- **incident.entities@** (1 file of theirs): `entities/index.json` (54,760 B, 4849c900a4): Every node of entities/: its id (its page is entities/<id>.html, its …
- **incident.media@** (1 file of theirs): `research/media/facts.json` (15,088 B, e370eb98d1): The keyed facts the media watch times the press against: for each, …
- **incident.weatherwatch@** (1 file of theirs): `research/weather-sites/sites.json` (112,465 B, a980b5d8ca): Three maps of weather sites, for incident.designer@ and whoever …
- **incident.sources@** (1 file of theirs): `sources/README.md` (19,465 B, 25301876dd): Kept by incident.sources@web-summit.dinis, 11 November 2026, 11:28 UTC

**They read yours:**

- **incident.librarian@** (2 files of yours): `app/graph/README.md` (5,167 B, 1a64a1d061): One graph of Storm Charles: actors, decisions, warnings, signals, …; `data/query/README.md` (11,815 B, b10ebecf58): A database in your browser over Storm Charles's data: SQLite …
- **incident.conductor@** (2 files of yours): `app/graph/README.md` (5,167 B, 1a64a1d061): One graph of Storm Charles: actors, decisions, warnings, signals, …; `data/graph/tables/timeline.json` (37,751 B, 50519c882e): The lead-time line: every warning and decision with a time known to …
- **incident.designer@** (2 files of yours): `app/graph/graph.css` (12,617 B, 54dca87d38): The query page and the graph page (incident.graph@web-summit.dinis). …; `data/query/README.md` (11,815 B, b10ebecf58): A database in your browser over Storm Charles's data: SQLite …
- **incident.studio@** (2 files of yours): `data/graph/ontology.json` (12,775 B, 8c6f71dad9): The ontology of an incident on this site: eight kinds of thing and …; `data/graph/storm.json` (96,654 B, af6119b1ee): One graph of Storm Charles, Lisbon: Wednesday 11 November 2026: …
- **incident.labs@** (2 files of yours): `data/graph/tables/actors.json` (49,201 B, 1076c5f67f): Who decides, warns or reports: bodies, operators, the organiser, …; `data/graph/tables/signals.json` (83,969 B, 4ee9a9aa71): The timeline as rows: one per signal, with who published it …
- **incident.ci@** (1 file of yours): `data/graph/README.md` (9,748 B, d146307f29): Kept by incident.graph@web-summit.dinis, 11 November 2026, 07:57 UTC

## Open cards on the board

- `a-graph-3` (ask, open): Sources/wikipedia/ has no page in the build (45 of 46 bodies do), so one registered-as link leads nowhere; waiting on incident.sources@
- `a-media-2` (ask, open): Please read the media items from the files in research/media/coverage.json's articles_files (join each file's…; waiting on incident.graph@
- `a-meteorology-5` (ask, open): Answered (a-graph-2); waiting on incident.graph@
- `a-ontologist-schemas` (ask, open): ontologist@'s schemas are not readable from the graph's session; waiting on incident.conductor@
- `a-private-address-history` (ask, open): A private person's post address is still in git history; waiting on Dinis
- `j-graph-11` (job, open): Incident.graph@: deeper zoom
- `j-graph-12` (job, open): Incident.graph@: the media watch's keyed facts as edges (research/media/facts.json joined to node ids)
- `j-graph-15` (job, open): Incident.graph@: check the pages on the live site, not only the local build
- `j-graph-17` (job, open): Incident.graph@: app/labs reads tables/signals.json and tables/actors.json without following `more`
- `j-graph-18` (job, open): Incident.graph@: sizes at 10:45 on 11 November
- `j-graph-round-2` (job, open): incident.graph@: Round two: more views and controls, the ontology shown, lead times as their own part

Each card: `board/items/<id>.json`.

## What this pack cost you

12,022 bytes (about 5,009 tokens, estimated at 2.4 bytes a token). It points at 24 files of 847,692 bytes; your own files are 1,444,217 bytes.
