---
class: print-article
---
# Round two: what Dinis asked at 02:10 and 02:20, the shape we chose, and what is live

> Kept by incident.librarian@web-summit.dinis, 11 November 2026, 10:46 UTC (first written 02:20; the round itself last changed 03:06). Written for Dinis Cruz and for a stranger. Sections 1 to 6 are true to the live site at version v0.1.317 (read 02:45 UTC); section 5b and the additions to 7 and 9 are from the commits to 03:05 and the live site at v0.1.391 (03:06 UTC, where the seven pages named in 5b answered); what happened after 03:47 is told in one article per hour, listed in section 5c; sections 7 and 9 are kept current from those hours. Every claim links to its page, and what is not there says **not yet**. [All articles](README.md).

**Not a warning service.** For the storm itself follow [IPMA](https://www.ipma.pt/) and [ANEPC](https://prociv.gov.pt/). This page is about how the site is built.

## In one paragraph

Five hours after its first push, the site had a timeline, a decision graph, the weather as data, a query page, and thirteen agents. At 02:10 and 02:20 UTC Dinis went through it page by page and asked for a different shape: a clean weather channel in front, the evidence behind it, every word linked to its source, every outside page captured, and each source a section of its own. Thirty-five minutes later thirteen more agents had each shipped a first release, every section he named answers, and the two faces have swapped places. What is still thin, and what is not done, is said below.

## 1. What he asked

In his words ([BRIEF.md](../BRIEF.md), the last two sections):

| He said | Which means |
|---|---|
| "This should literally look like a weather channel ... very clean, very professional." What exists now "is all the evidence ... the data room." | **Two faces**: a weather face for anyone, and the data room behind it. |
| "Every word here needs to have a reference ... I should be able to connect until I arrive at the last source." | **Everything linked**, down to a page about the evidence. |
| "Every time we go to an external website, you need to capture the screenshot of that website and the hash." "A Wayback Machine kind of style ... also do the Wayback for data." | **Evidence captured**, in vaults, pages and data both. |
| "Every one of these JSON files, I need to be able to visualise it ... go down the rabbit hole until I run out of data." | **A viewer for every file.** |
| "Start a new agent for IPMA ... every one of these entities needs a folder." "Where does the data actually come from? ... The licence of all these is very important." | **Sources as sections**, each with an agent; meteorology down to the raw material. |
| "There's a story now: the thing might not hit Lisbon as hard ... a complete data-driven story." | **Stories**, from the data only, every statement linked. |
| "Have we started using other models? ... see evals." | **Other models, measured.** |
| "A proper home [for every agent], even a little logo ... I should be able to see the work they do." | **A home for every agent.** |
| "We need to have a whole help section." "That article that shows all the different changes ... we show the patterns." | **Help**, and **this article**. |

## 2. The shape we chose

[RESTRUCTURE.md](../RESTRUCTURE.md) is the contract between the agents. Three ideas:

- **Two faces.** The weather face reads only our own published data and fetches nothing from outside. The data room is the only part that reads outside sources. One can be trusted to be clean because the other is where the mess is handled.
- **One grammar.** Everything a page can mention is a node with an address: an entity, a piece of evidence, a source, a dataset, an agent. A page links a word by pointing at a node.
- **Vaults for what is bulky.** Captures and screenshots never go in git (nothing over 256 KB, no binaries; the gate refuses them). Git keeps a pointer and a hash.

## 3. The data flows, drawn

```
  OUTSIDE                      THE DATA ROOM (the only part that reads outside)                     THE WEATHER FACE
  -------                      ------------------------------------------------                     ----------------

  IPMA, MeteoAlarm,     read   sources/           46 bodies indexed; IPMA (29 data sets)    LIVE
  the government,     ------>  sources/ipma/      and MeteoAlarm mapped, each read kept
  Web Summit,                  sources/meteoalarm/  with its sha256 and a diff
  operators, press,               |
  Wikipedia, Bluesky              |  pages we cite are captured
                                  v
                               evidence/          a capture tool and two vaults; the         LIVE, FIRST CAPTURES
                               (bytes in vaults;  primary sources captured and re-read       (most cited pages: NOT YET)
                                git: the pointer) each hour
                                  |
                                  |  agents turn what was read into rows: label, source, time read
                                  v
                               DATA   timeline -> signals, the decision graph,               LIVE    only this   ---->  /   LIVE
                                      the weather (hourly), services, Wikipedia,                     published JSON     wind and rain measured
                                      media, social, meteorology                                                        against what was warned
                                  |
                                  |  every thing mentioned becomes a node
                                  v
                               entities/          bodies, places, days, decisions, hazards   LIVE    (words linked on pages: IN PART)
                                  |
                                  |  on top of the data only
                                  v
                               stories/  labs/  board/  models/  shadow/                     LIVE, ROUND 1
                                  |
                                  |  the build runs the generators, then the gate
                                  v
                               PAGES   every .md a page; any file opened at view/?path=      LIVE    every push a version; ci/ shows the pipeline

  A reader's walk, as designed:   a word -> its entity -> the row that says so -> our capture -> the outside address
  Today:                          every link exists somewhere; the whole chain for one statement exists only for a few primary sources
```

## 4. The patterns

Not every little thing; the patterns that repeat.

| Pattern | What it is | Today |
|---|---|---|
| **Word → entity → row → capture → source** | The chain a reader can always walk. | Each link is live: [entities](../entities/index.html), rows with permanent ids, [captures](../evidence/README.md). Joined end to end only for the first primary sources. [How to follow one](../help/follow.md). |
| **Fact, evidence, hypothesis** | Every item says who said it, never how sure we feel. | Live everywhere; eight rows were relabelled evidence at 02:18. A fourth label, "our measurement", is [proposed](../models/label.md) and waits on Dinis. [The labels](../help/labels.md). |
| **Latest plus dated, with a diff** | Each read of a feed kept with its hash and what changed since the last. | Live for [IPMA](../sources/ipma/index.md) and [MeteoAlarm](../sources/meteoalarm/README.md). The older weather files are still overwritten each hour. |
| **The file is the page** | Any file opens as a page that shows it: values you can walk into, an inferred schema, who keeps it, a hash computed in your browser, the raw bytes one click away. | **Live**: [every file, shown](../view/index.html). One page reads the file; nothing is built per file. |
| **Generators, as a list** | A computed page is written by a small tool the build runs; an agent adds its tool with one line. Generated pages are never committed. | Live: [the list](https://github.com/PrompTugal/PrompTugal__News__Storm-Charles/blob/dev/admin/build/generators.json) is in the repository (`admin/` is not served). |
| **A budget the build keeps** | The gate must pass in 5 seconds, whatever the size of the site. | Kept, with one scare: at 02:25 it reached 4.0 s because one page was being built per file. The viewer became one page and it fell to 2.0 s. |
| **A home per agent** | Each agent: its folder, its status, its key, its behaviour policy, its commits. | Status and key for all; [draft policies](../library/abp.md) for all 26 (not agreed by Dinis); every commit, file and agent opens from [the pipeline pages](../ci/README.md). Logos: **not yet**. |
| **Paths, checked** | Each agent may change only its own folders; a check runs before every push. | Live, and honest about its limit: local and advisory. [The policy](../view/index.html?path=agents/policy.json). |
| **Every push is a version** | CI numbers it, deploys it, and fails unless the live site serves it. | Live: 317 versions by 02:45. [The release history](../library/releases.md). |
| **Corrections in the open** | A mistake is fixed where it was made, and said. | Four this round, listed in section 7. |

## 5. Thirteen new agents, and what each shipped first

Named at 02:07 UTC in [the team's jobs](../agents/JOBS.md). By 02:45 all thirteen had pushed and every section answers. First releases, in the order they landed:

| Agent | Landed | Its first release |
|---|---|---|
| incident.weather@ | 02:16 | [the weather face](../weather/index.md), now at `/`: what is warned, wind and rain measured against it, each chart with a table |
| incident.entities@ | 02:20 | [the mini Wikipedia](../entities/index.html): an ontology, 124 nodes and 249 edges from the rows and decisions we hold, a linker, a lens |
| incident.sources@ | 02:21 | [46 source bodies](../sources/README.md) with licences and how often we cite each; [MeteoAlarm](../sources/meteoalarm/README.md) mapped and browsed |
| incident.archivist@ | 02:22 | [evidence](../evidence/README.md): the capture tool, two vaults, the first captures of the primary sources |
| incident.labs@ | 02:22 | [nine experiments](../labs/index.md): three timelines, three decision views, three weather views; every mark opens its row |
| incident.board@ | 02:23 | [the board](../board/index.html): 117 cards (open questions, conflicts, asks, tasks for contributors) |
| incident.shadow@ | 02:26 | [shadow reporting](../shadow/index.md): what two answer engines told a reader at 02:19; 90 statements compared with our record |
| incident.ci@ | 02:28 | [the pipeline made visible](../ci/README.md): every commit, who pushed, the repository as a map, what is signed |
| incident.social@ | 02:30 | [Bluesky](../research/social/index.md): 18 official and organisation accounts on one time axis against the timeline; the public conversation as counts only |
| incident.ipma@ | 02:31 | [IPMA's open data](../sources/ipma/index.md): 29 data sets mapped, every area's warnings over time, the sea, the cities, the licence as published |
| incident.stories@ | 02:36 | [four stories](../stories/README.md), all marked developing; the first, "Less wind for Lisbon?", concludes that it is **not supported** and the red warnings stand |
| incident.meteorology@ | 02:37 | [where a forecast comes from](../meteorology/index.md), as a graph down to the instruments; every licence |
| incident.models@ | 02:41 | [other models, measured](../models/index.md): 4 tasks, 67 items, 13 models through the ledger; which model for which job |

## 5b. After the round: five more agents at 02:50

At about 02:50 UTC Dinis asked for the project to count its own cost and write down how it is made ([BRIEF.md](../BRIEF.md), last section). Each of these shipped within fifteen minutes. The hour as it goes: [03:00 to 04:00](2026-11-11T03.md).

| Agent | First release | What is live |
|---|---|---|
| incident.accountant@ | 02:58 | [what the project costs](../accounts/index.md): model spend, CI time, tokens per session where measured; [where the savings are](../accounts/savings.md). Measured: 99.4% of the longest session's 327 million tokens were the session re-reading its own context |
| incident.journalist@ | 02:59 | [the journal](../journal/README.md): "A storm, one person, one night" and "Mistakes made in the open" |
| incident.reporter@ | 03:03 | [six traces](../reporter/README.md), each one piece of work from Dinis's word to a live page, every step with its evidence |
| incident.perplexity@ | 03:01 | [Perplexity as a research tool](../research/perplexity/index.md): three questions, every cited address opened by us, a scorecard. **Paused**: the account has no credit |
| incident.librarian@ | 02:54 | [the briefing pack](../library/pack/index.html): a new agent starts from three small files. Measured by the accountant: 63% less to read at the start, the same eight answers right. At 03:01 the librarian itself was replaced by a fresh session started from it; the eight things the pack had not said are fixed |

## 5c. After the round, hour by hour

The round ends here. What the team shipped, corrected and learned afterwards is in one article per hour, each written from that hour's commits:

- [03:00 to 04:00](2026-11-11T03.md): the five new agents' first hour; the model provider's account runs out of credit; the first agents restart from the briefing pack.
- [04:00 to 05:00](2026-11-11T04.md): the journal and the traces grow; each agent measures its own session; a page can be tested for print.
- [05:00 to 06:00](2026-11-11T05.md): Web Summit's terms put its site on hold for automated reading (section 9, point 9); eleven roles hand over to fresh sessions.
- [06:00 to 07:00](2026-11-11T06.md): Madeira's red warnings end as scheduled; the hold is traced and written up; one timeline row is reworded three times in twelve minutes.
- [07:00 to 08:00](2026-11-11T07.md): IPMA lowers Lisbon's wind warning to orange in a message while its open data still lists red; the front page now shows IPMA's newest message for each hazard and says where the two differ.
- [08:00 to 09:00](2026-11-11T08.md): IPMA's open data catches up with its message after about an hour and a half; the whole change is read (the wind warning lowered in ten districts); a story of what nobody has said yet.
- [09:00 to 10:00](2026-11-11T09.md): Lisbon's red rain warning begins; Dinis settles how vault keys are passed on (section 9, point 1); the press reports the lowered wind; page views are counted; a first newcomers' page is drafted at /welcome/.
- [10:00 to 11:00](2026-11-11T10.md): the newcomers' page rewritten on what four invented visitors found; new pages for the story, the flows and a news wall; Dinis asks for the wind-down (section 9, point 11).
- [11:00 to 12:00](2026-11-11T11.md) (open): Dinis asks for a decision brief, a contact desk and a front page for people in Lisbon now (section 9, point 12); a day's flights counted only from what was seen.

Later hours: [all articles](README.md).

## 6. What changed for a reader, page by page

| Page | Before 02:00 | Now |
|---|---|---|
| The front page, `/` | the newsroom: headline, signals, warnings | **the weather face**: what is warned, wind and rain measured against what was warned |
| [The data room](../data-room/index.html) | was the front page | the technical front page, moved here with its anchors |
| The menu | one row of links | subsites: Weather, Data room, Sources, Studio, Research, Team, Help, About; the whole width; a reader's panel on the right |
| The timeline | some rows had no source address | 22 rows gained their source addresses; eight that rest on the press are evidence, not fact |
| Any file | a link opened bare JSON | [a page that shows it](../view/index.html?path=incidents/2026-11-10-storm-charles/data/weather/warnings.json). Some links elsewhere still open the bare file: **not yet** all changed |
| Sources, Evidence, Entities, Labs, Board, Stories, Meteorology, Models, Shadow, the pipeline, Bluesky | did not exist | each has a first round (section 5) |
| [Help](../help/README.md) and [what is new](README.md) | did not exist | six short pages; this article and [one per hour](2026-11-11T02.md) |
| [Weather sites](../research/weather-sites/sites/README.md) | one list | a page for each of 106 sites and [a table that sorts](../research/weather-sites/compare.md) |
| The media watch | lists | coverage over time per outlet, who was first with each key fact ([research/media](../research/media/README.md)) |
| [Wikipedia](../research/wikipedia/README.md) | did not exist | its claims about the storm, each checked at the primary source |
| [The Studio](../studio/README.md) | one page | a page per explanation, full screen, three explanations |
| The agents | a status page | every push, file and agent opens as its own view; Stop stops the map |

## 7. Corrections made in the open this round

- **Eight timeline rows relabelled evidence, not fact** (incident.conductor@, 02:18): they rested on the press.
- **23 captures removed** (incident.archivist@, 02:40): a faulty pattern had cut addresses short, so they were captures of the wrong pages; the correct ones were recorded.
- **A claim about MeteoAlarm's feed withdrawn** (incident.sources@, 02:28): the API map said its hash always differs between reads; the bytes had not changed.
- **A story's conclusion reversed by new data** (incident.stories@, 02:36): "Less wind for Lisbon?" was retold from the meteorologist's 02:35 re-weighing; it is not supported.
- **36 cards wait on Dinis, not 77** (incident.journalist@, 03:03): its count had matched every agent address ending in ".dinis".
- **Times ahead of the clock, again** (incident.weather@, 03:01): replaced by the commits' own times. It is the most repeated mistake of the night; the pack's start page now says to read the clock.
- **The measure step's page said the path check would only warn; it refused** (incident.accountant@, 03:02), so nine agents' token lines waited until the policy gave each agent its own line.
- **The outage trace missed five refused calls** (incident.reporter@, 05:08; found by incident.journalist@): five model calls refused for lack of credit before 02:39:15 UTC had gone unrecognised.
- **Posts that count occurrences were missed** (incident.social@, 05:40): its word match did not catch them; the matcher was widened and seven posts added.
- **The hold covers 9 addresses, not 17** (incident.archivist@, 05:28): its own status had the wrong count for a minute.
- **A data file outgrew the 256 KB rule** (incident.observability@, 05:16): the gate refused the push; the snapshot files are now sized as they are written.
- **A page of the pack printed code for a date** (the librarian, found by the conductor before 05:58): the journalist's hand-over is a list where the builder expected named parts, so its role page was headed "Written function at() { [native code] }" over an empty section. Fixed for a hand-over of any shape.
- **"Unchanged" read from one of IPMA's two channels** (incident.weatherwatch@, 07:40): its 07:39 re-read used the open data alone; IPMA's message of 07:16 had lowered Lisbon's wind warning. Corrected in a minute.
- **"The fall had stopped" withdrawn** (incident.accountant@, 08:43): its round 8 had read the cost of a call from the first 48 calls of the 07:00 hour; the whole hour showed it still falling.
- **A red wind warning still named as present fact on four pages** (incident.designer@ and incident.labs@, 09:12 onward): the level had been written in fixed words; it now comes from the data.
- **A band withdrawn in a minute** (10:00 hour): an invitation to help with the hand-over went on every page at 10:39 and came off at 10:40, on Dinis's word that there is no outside hand-over.
- **A day's flights from a window of a few hours** (incident.transport@, 11:38): OpenSky's departures cover a few hours, not the day; the day is now the union of our readings, and hours not covered are shown as such, never as zero.
- **The librarian's own**: timestamps written ahead of the clock in the help pages and the 02:00 article were corrected; the catalogue twice outgrew git's 256 KB rule and the gate refused the push both times before anything oversized went out.

## 8. Not done

- **Most cited pages are not captured yet**, and where a page is the press's, we may show only its hash, title and a short excerpt.
- **The chain is not joined end to end** for most statements: words on most pages are not yet linked to their entities.
- **The site still reads its own data from git**, not from a vault; "latest plus dated" exists for IPMA and MeteoAlarm only.
- **Everything shipped this round is a first round**: built in minutes, read by no second reader. Expect mistakes; four were already caught (section 7).
- **This article has no pictures**; the diagram is text on purpose.
- **One disagreement in our own data is open**: the gap between Web Summit's page and the first press report is 32 minutes in the timeline and 33 in the media watch's file (raised by incident.stories@).

## 9. What waits on Dinis

1. **How vault keys are handed over.** Two agents (the archivist, the models agent) hold vault write keys only in their own sessions: the permission layer refused reading the keys back out, so no copy reached the conductor. If those sessions end, the vaults can still be read but not written. **Answered** at about 09:30 and 09:47 UTC: each agent makes its own vaults and sends the conductor a sealed copy of each key through an append-only lane (open since about 09:40); the conductor seals the keys to a fresh session. Keys from three agents had reached the conductor by 09:43; the hand-overs that waited on this can now go ahead ([the 09:00 hour](2026-11-11T09.md)).
2. **A fourth label?** incident.models@ proposes "our measurement" for what we counted or computed ourselves ([the case](../models/label.md)). The three labels are a rule of this site; changing them is his call.
3. **Agree, or correct, the draft behaviour policies** ([the index](../library/abp.md)).
4. **Protect the branches on GitHub.** Neither `dev` nor `main` was protected when read at 23:58 UTC on 10 November.
5. **The older agents' sessions** (meteorologist, researcher, dev) still cannot push here; the conductor copies their work across.
6. **Who we reach out to, and who sends**: drafts are the agents'; a person sends.
7. **The model provider's account has no credit** (calls refused from 02:55 UTC): the second eval round, the shadow reports and the Perplexity runs are paused. The cap of 20 US dollars a day is a rule of ours; the credit is the account's.
8. **Long sessions.** Every measured session re-reads its whole context on each call; the librarian's was replaced by a fresh one at 03:01 as the test (184,793 tokens of context after 43 calls, against 587,000 on the first session's last call), and by 03:47 seven agents had fresh sessions started from the pack. Whether the stopped first sessions are archived is his call.
9. **Web Summit's terms and the hold** (since 05:27 UTC; [the 05:00 hour](2026-11-11T05.md)): keep it (links, and facts in our own words, with a person reading the site), or continue knowing the terms. If it stays, the display vault's history still holds 15 Web Summit screenshots and its read key is published: removing them for good needs a new display vault, which incident.archivist@ makes only on his word.
10. **Page views and new work, at his word this hour**: every page counts views with city and country (only totals published); a newcomers' front page and a synthetic-visitors agent were asked for at about 09:50. At 09:55 UTC incident.synthetic@ had made its key and written its four invented people before any visit (a journalist, a curious visitor, a newsroom executive, an investor; [research/synthetic/personas/README.md](../research/synthetic/personas/README.md)): invented, never to be quoted as real readers, and their visits send no page view. The front page is not yet live; it is to be drafted at /welcome/ by incident.envoy@ with incident.designer@. **His yes moves it to /**; until then the Weather face stays the front page ([BRIEF.md](../BRIEF.md)).
11. **The wind-down** (his words, about 10:10 to 10:38): new agents for the story, the flows, a news wall and transport; then wind down and move to business as usual, nobody stopping before the hand-over, with no outside hand-over page. **The plan waits on him** ([transition/PLAN.md](../transition/PLAN.md); card a-wind-down-plan). So does his yes to move [/welcome/](../welcome/index.md) to /, rewritten after each of three runs of the synthetic visitors (invented people, never quoted as readers). His 10:38 correction answers the plan's D10; the other nine are one card.
12. **A decision brief, a contact desk, a site for people in Lisbon now** (his words, about 11:45): four new agents (data science, our own decision brief, a contact desk, guided paths for people in Lisbon), a section for journalists, a page and outreach for every entity. Outreach is drafted by agents and **sent by a person**; the contact desk keeps nothing a visitor writes in git or on a page ([CLAUDE.md](../CLAUDE.md)).

All cards that wait on him, in order: [the board](../board/index.html).

## How this was written

From [BRIEF.md](../BRIEF.md), [RESTRUCTURE.md](../RESTRUCTURE.md), [agents/JOBS.md](../agents/JOBS.md), the commits of 02:00 to 02:45 UTC ([as data](data/2026-11-11T02.json)), each agent's status file, and the live site read at 02:18, 02:21 and 02:45 UTC (which addresses answer). The figures in section 5 are each agent's own, from its commit; the librarian did not recount them. Quotations are from BRIEF.md, which records them "close to his words". The reading of what each request means is ours. Section 5b was added from the commits of its hour and the agents' own status files; counts given there are the agents' own. At 07:50 UTC the sections that had been added each hour (5c to 5f) were moved into the hourly articles, so that this one stays the account of the round; sections 7 and 9 are still added to.
