{
  "agent": "incident.ipma@web-summit.dinis",
  "state": "active: second session; reading IPMA hourly at :47; last read 2026-11-11T11:47:29Z (64 requests, 63 answered 200, 45 files changed)",
  "started_by": "incident.conductor@web-summit.dinis (session_018yvwtQ4XRqTiSE3vjVq9KD), at Dinis Cruz's word (BRIEF.md, 11 November ~02:10 UTC)",
  "last_wake": "2026-11-11T11:50:56Z",
  "done": [
    "session key made (record sha256:300a5ee463bec60d), public half in data/keys.json",
    "sources/ipma/api.json: 29 data sets (20 documented at api.ipma.pt, 9 found in IPMA's own directory listings), each with address, format, fields with meaning and unit, IPMA's stated cadence, and what is not documented; sources/ipma/listing.json: IPMA's directory listings as served",
    "sources/ipma/source.json and licence.md: IPMA's terms exactly as published (free use for personal or public, non-profit, non-offensive purposes; always name the source; no named open licence: \"not stated\"), with four questions for Dinis",
    "tools/ipma-read.mjs: one request every 3 s, read-only; first read 02:15 UTC: 63 requests, 62 answered 200; sha256, size, time read and IPMA's Last-Modified per file in latest.json; reads.json appended; changes/<data set>.json on each change",
    "data vault x75qcmux (sgit, normal, on dev.send.sgraph.ai): latest/ and dated hour folders with a manifest; pushed; the vault key is in no tracked file (see vault.note for how it was handed over); the read key is in sources/ipma/dataset.json",
    "tools/ipma-views.mjs: sources/ipma/data/ (warnings ledger with first and last read of every row, places and areas, stations, 24 h of observations, daily sums, sea and city forecasts as issued, earthquakes, the coast from IPMA's shellfish zones) and nodes.json (371 nodes with stable ids for incident.entities@)",
    "pages (tools/ipma-pages.mjs, app/sources/ipma/): index (the map: stations and warning areas drawn from coordinates, no tiles), warnings over time for all 25 areas, stations, the sea, the cities beside the nearest station, the API map, a page per data set, a browser for every JSON (table, schema, raw), the licence",
    "findings: the documented evapotranspiration address answers 404 (IPMA's directory lists the file under another name); three field names differ from the documentation (precipitaProb, lon, descClassWindSpeedDaily*; code for samp); warning areas MCN and MRM are in no id table; the UV file carries 4 days, not 3; /open-data/06.json is not valid JSON; five undocumented climate folders by district and 22 long-series spreadsheets (Lisbon from 1855)",
    "sources/ipma/data/classes.json: IPMA's own names for idWeatherType, classWindSpeed and classPrecInt in Portuguese and English, for incident.weather@ and any page",
    "second read 03:33 UTC: 64 requests, 63 answered 200 (the documented evapotranspiration address still 404), 48 files changed; warnings: IPMA rewrote the feed at 03:15 UTC, 73 to 69 rows above green, the four gone all ended at 03:00 (BJA, FAR, STB rough sea yellow; EVR rain yellow), none replaced or withdrawn, nothing new; vault pushed (hours 02 and 03); the directory crawl is now complete (115 folders in listing.json); changes/ holds the first diffs for 9 data sets",
    "sources/ipma/learned.md (\"What we learned reading IPMA's API\", 13 notes worded as help); agents/ipma/ipma-api-notice.md (the draft for Dinis to send to IPMA); warnings.json carries start_utc and end_utc for incident.weather@",
    "third read 04:34 UTC: 64 requests, 63 answered 200, 0 files changed: every file was byte-identical to the 03:33 read, IPMA's Last-Modified headers still at 03:15 to 03:36. A check at 04:37:37 found the Lisbon forecast file dated 04:31:02, which our read of 04:35:12 had not been served: IPMA's hourly rewrite became visible to us some minutes after the time on the file. The hourly read moves to :45 so that it falls after IPMA's hourly rewrite (warnings at :15, forecasts at :31, observations at :35, as dated so far). Warnings unchanged: 69 above green.",
    "fourth read 04:46 UTC: 64 requests, 63 answered 200, 46 files changed (the 04:xx forecasts and observations). Warnings: IPMA's file is now dated 04:15 with the same sha256 as at 03:15 (rewritten, content unchanged): 69 above green, none replaced, withdrawn, ended or new. Note for the record: our 04:34 read was still served the 03:15 header nineteen minutes after 04:15, so something between IPMA's disk and us (a cache, at IPMA or on our route) can serve a file up to about twenty minutes old: a time read here is the time we were served, not proof of what IPMA had published at that minute. Vault pushed.",
    "read 05:46 UTC: 64 requests, 63 answered 200, 45 files changed; warnings (IPMA's file dated 05:15): 69 above green; none new, replaced, withdrawn or ended; vault pushed",
    "read 06:45 UTC: 64 requests, 63 answered 200, 46 files changed; warnings (IPMA's file dated 06:15): 58 above green; AVR Agitação Marítima yellow 11-10T21:24>11-11T06:00 ended; BRG Agitação Marítima yellow 11-10T21:24>11-11T06:00 ended; CBR Agitação Marítima yellow 11-10T21:24>11-11T06:00 ended; LRA Agitação Marítima yellow 11-10T21:24>11-11T06:00 ended; LSB Agitação Marítima yellow 11-10T21:24>11-11T06:00 ended; MCN Precipitação red 11-10T21:00>11-11T06:00 ended; MCS Precipitação red 11-10T21:00>11-11T06:00 ended; MRM Precipitação red 11-10T21:00>11-11T06:00 ended; MRM Vento red 11-11T00:00>11-11T06:00 ended; PTO Agitação Marítima yellow 11-10T21:24>11-11T06:00 ended; VCT Agitação Marítima yellow 11-10T21:24>11-11T06:00 ended; vault pushed",
    "read 07:45 UTC: 64 requests, 63 answered 200, 45 files changed; warnings (IPMA's file dated 07:15): 58 above green; none new, replaced, withdrawn or ended; vault pushed",
    "read 08:47 UTC: 64 requests, 63 answered 200, 46 files changed; warnings (IPMA's file dated 08:15): 59 above green; AVR Precipitação orange 11-11T03:00>11-11T21:00 replaced; AVR Precipitação orange 11-11T07:17>11-11T21:00 NEW; BGC Precipitação orange 11-11T03:00>11-11T21:00 replaced; BGC Precipitação orange 11-11T07:17>11-11T21:00 NEW; BJA Precipitação orange 11-11T00:00>11-11T09:00 replaced; BJA Precipitação orange 11-11T07:17>11-11T09:00 NEW; BJA Vento red 11-11T09:00>11-11T21:00 replaced; BJA Vento orange 11-11T09:00>11-11T21:00 NEW; BRG Precipitação orange 11-11T03:00>11-11T21:00 replaced; BRG Precipitação orange 11-11T07:17>11-11T21:00 NEW; CBO Precipitação orange 11-11T03:00>11-11T12:00 replaced; CBO Precipitação orange 11-11T07:17>11-11T12:00 NEW; CBO Vento orange 11-11T12:00>11-11T21:00 replaced; CBO Vento yellow 11-11T12:00>11-11T21:00 NEW; CBR Precipitação orange 11-11T03:00>11-11T21:00 replaced; CBR Precipitação orange 11-11T07:17>11-11T21:00 NEW; CBR Vento orange 11-11T12:00>11-11T21:00 replaced; CBR Vento yellow 11-11T12:00>11-11T21:00 NEW; EVR Precipitação orange 11-11T03:00>11-11T18:00 replaced; EVR Precipitação orange 11-11T07:17>11-11T18:00 NEW; EVR Vento red 11-11T12:00>11-11T21:00 replaced; EVR Vento yellow 11-11T12:00>11-11T21:00 NEW; FAR Precipitação orange 11-11T00:00>11-11T09:00 replaced; FAR Precipitação orange 11-11T07:17>11-11T09:00 NEW; FAR Trovoada yellow 11-11T09:00>11-11T18:00 NEW; GDA Precipitação orange 11-11T03:00>11-11T21:00 replaced; GDA Precipitação orange 11-11T07:17>11-11T21:00 NEW; GDA Vento orange 11-11T12:00>11-11T21:00 replaced; GDA Vento yellow 11-11T12:00>11-11T21:00 NEW; LRA Precipitação orange 11-11T03:00>11-11T12:00 replaced; LRA Precipitação orange 11-11T07:17>11-11T12:00 NEW; LRA Vento red 11-11T12:00>11-11T21:00 replaced; LRA Vento yellow 11-11T12:00>11-11T21:00 NEW; LSB Precipitação orange 11-11T00:00>11-11T09:00 replaced; LSB Precipitação orange 11-11T07:17>11-11T09:00 NEW; LSB Vento orange 11-11T09:00>11-11T21:00 NEW; LSB Vento red 11-11T12:00>11-11T21:00 replaced; MCN Precipitação orange 11-11T06:00>11-11T09:00 replaced; MCN Precipitação orange 11-11T07:33>11-11T09:00 NEW; MCN Vento orange 11-10T21:00>11-11T12:00 replaced; MCN Vento orange 11-11T07:33>11-11T12:00 NEW; MCS Agitação Marítima yellow 11-11T00:00>11-11T21:00 replaced; MCS Agitação Marítima yellow 11-11T07:33>11-11T21:00 NEW; MCS Precipitação orange 11-11T06:00>11-11T09:00 replaced; MCS Precipitação orange 11-11T07:33>11-11T09:00 NEW; MCS Vento orange 11-10T21:00>11-11T12:00 replaced; MCS Vento orange 11-11T07:33>11-11T12:00 NEW; MPS Precipitação orange 11-10T21:00>11-11T09:00 replaced; MPS Precipitação orange 11-11T07:33>11-11T09:00 NEW; MPS Vento orange 11-10T21:00>11-11T12:00 replaced; MPS Vento orange 11-11T07:33>11-11T12:00 NEW; MRM Precipitação orange 11-11T06:00>11-11T09:00 replaced; MRM Precipitação orange 11-11T07:33>11-11T09:00 NEW; MRM Vento orange 11-11T06:00>11-11T12:00 replaced; MRM Vento orange 11-11T07:33>11-11T12:00 NEW; PTG Precipitação orange 11-11T03:00>11-11T12:00 replaced; PTG Precipitação orange 11-11T07:17>11-11T12:00 NEW; PTG Vento red 11-11T12:00>11-11T21:00 replaced; PTG Vento yellow 11-11T12:00>11-11T21:00 NEW; PTO Precipitação orange 11-11T03:00>11-11T21:00 replaced; PTO Precipitação orange 11-11T07:17>11-11T21:00 NEW; STB Precipitação orange 11-11T00:00>11-11T09:00 replaced; STB Precipitação orange 11-11T07:17>11-11T09:00 NEW; STB Vento red 11-11T09:00>11-11T21:00 replaced; STB Vento orange 11-11T09:00>11-11T21:00 NEW; STM Precipitação orange 11-11T03:00>11-11T12:00 replaced; STM Precipitação orange 11-11T07:17>11-11T12:00 NEW; STM Vento red 11-11T12:00>11-11T21:00 replaced; STM Vento yellow 11-11T12:00>11-11T21:00 NEW; VCT Precipitação orange 11-11T03:00>11-11T21:00 replaced; VCT Precipitação orange 11-11T07:17>11-11T21:00 NEW; VIS Precipitação orange 11-11T03:00>11-11T21:00 replaced; VIS Precipitação orange 11-11T07:17>11-11T21:00 NEW; VRL Precipitação orange 11-11T03:00>11-11T21:00 replaced; VRL Precipitação orange 11-11T07:17>11-11T21:00 NEW; vault pushed"
  ],
  "next": [
    "hourly: node tools/ipma-round.mjs, commit, release; the warnings ledger then shows what IPMA replaced, withdrew and ended between reads",
    "the data Wayback (Dinis, 02:20): every read steppable over time, in the vault layout and index incident.archivist@ gives; IPMA's reads and diffs move to that shape when it arrives",
    "round 2: the warnings timeline fitted to the screen and seeded with the CAP send times the meteorologist holds; the map's island labels untangled; earthquakes and fire risk drawn; the undocumented climate folders read and mapped; a phone pass and a dark-mode pass with screenshots",
    "round 3: forecast against observed once whole days are held; the sea as a coast strip north to south"
  ],
  "asks": [
    "Dinis: IPMA asks users of its API to email it saying they use the service and why (api.ipma.pt, \"sobre\"). An agent does not send email. Will you send it, or shall the conductor draft it for you?",
    "Dinis: IPMA's terms say its logo should accompany its information on web pages; this site has a no-image rule and names and links IPMA on every view instead. Keep that, or ask IPMA?",
    "Dinis: IPMA's terms do not address reshaping its data (derived tables, drawings). Everything computed is labelled as ours. Enough, or ask IPMA in the same email?",
    "Dinis: www.ipma.pt reads hourly forecasts and more from api.ipma.pt/public-data/, outside the documented open data, terms not stated (incident.meteorologist@ already reads one such file). Map and read them in this section too?",
    "incident.entities@: sources/ipma/nodes.json is yours to adopt (areas, places, coastal places, stations, warning types and levels, weather types, data sets); ids are built from IPMA's codes and will not change."
  ],
  "api": {
    "requests": 64,
    "ok": 63,
    "failed": 1,
    "waits_429": 0,
    "note": "counts of the latest read; every read is in sources/ipma/reads.json"
  },
  "vault": {
    "id": "x75qcmux",
    "kind": "data",
    "note": "vault key sent to the conductor in the clear by session message at 02:28; treat as known to anyone who can read the two transcripts. It crossed with the conductor's 02:19 note asking for the sealed route (SECURITY.md section e). The vault holds copies of IPMA's public data: the exposure is write access to public copies. Not sent again anywhere; any further vault uses the sealed handover (tools/lane-handover.mjs).",
    "key_received": "key received from the conductor 09:51 UTC, sealed to this session’s key (tools/lane-handover.mjs); cloned; write confirmed by the push of the 09:53 read"
  },
  "updated": "2026-11-11T11:50:56Z",
  "by": "incident.ipma@web-summit.dinis",
  "session": "session_018yvwtLfkNxnMn1G2ZPWJkY",
  "sessions": [
    {
      "n": 1,
      "session": "session_018yvwtMQ1cXDPwtPYk1GtZe",
      "key": "incident-ipma-dinis",
      "status": "handed over"
    },
    {
      "n": 2,
      "session": "session_018yvwtLfkNxnMn1G2ZPWJkY",
      "key": "incident-ipma-dinis-2",
      "started": "2026-11-11T09:48:59Z"
    }
  ]
}
