# The pack for incident.librarian@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

**everything findable and linked**: every brief, document, dataset, decision and agent file on the site, catalogued with provenance (who wrote it, when, from what); the reading list from newsroom.sgit.ai (read its `/llms.txt` and the articles that bear on this site: story as a graph, provenance, corrections, agents' behaviour policies) with what each means for us; a glossary. (from `agents/JOBS.md` (16,087 B, cb88df47c9))

**You may change:** `library/**`, `docs/**`, `tools/library-*.mjs`, `agents/policy.json`, `tools/policy-check.mjs`, `agents/*/policy.md`, `news/**`, `help/**`, `agents/librarian/**`, `accounts/ledger/librarian.jsonl`, `transition/interviews/librarian.md`, and your own entry in `data/keys.json`; shared with others, with a warning: `agents/policy.json`. (from `agents/policy.json` (13,565 B, ec9b7b8d15))

**Your draft behaviour policy** (not agreed by Dinis): `agents/librarian/policy.md` (8,803 B, e350f4c630)

## Where the work stands

- **State:** active: the ninth librarian session (since 11:49 UTC on 11 November), started from the pack and the eighth's hand-over. (its own date: 2026-11-11T11:51Z)
- **Next:** a ninth session: close news/2026-11-11T11.md after 12:00 and open T12; the four newest agents into library/abp.json
- **Next:** the round article at each hourly wake: 5c, section 7, section 9
- **Next:** at the close trigger: library/closing-inventory.json for incident.planner@
- **Ask:** Dinis: whether to archive the first librarian session (it has handed over).
- **Ask:** Dinis: the 11 behaviour policies under agents/<role>/policy.md are drafts until you agree them (index: /library/abp.html). Two things only you can change: neither dev nor main is protected on GitHub, …
- **Ask:** every agent: open markdown with '> Kept by <agent>, <date>, <time> UTC' and carry "by" and "updated" in JSON (agreed with the conductor 23:49).
- **Ask:** incident.conductor@: four hourly wakes still fire into sessions that have handed over (graph :51, weatherwatch :28, studio :58 by its status, and whichever of the reporter's and journalist's the …
- The whole status, with everything done: `agents/librarian/status.json` (28,777 B, 61e73a96d4)

## The hand-over from the session before yours

Written 2026-11-11T10:47Z by the seventh librarian session (session_018yvwtMyQoEg5L5WqSTj55u; key id incident-librarian-dinis-7: the next session makes its own, id incident-librarian-dinis-8, and marks this one handed over), because the start and one hourly wake took the context to about 170,000 tokens a call; the next wake would pass the 180,000 it was told to hand over at. Copied whole from `agents/librarian/status.json` (`handover`): this is the part of the status a new session cannot start without.

- **In flight:** news/2026-11-11T10.md is closed (11:45). news/2026-11-11T11.md is open, true to the commits at 11:45 UTC. At the :44 wake: `node tools/library-news.mjs 2026-11-11T11` and `...T12`, close T11 in the form of T10.md (header 'The hour is closed', the Versions paragraph in the past, items of 11:45 to 12:00 added under their headings), open T12, then `--index`. CAREFUL: in news/data/<hour>.json `commits` is a list (use its length) and added/changed/removed are objects (use `.files`); this session first wrote the list itself into the header and had to fix it. A full clone with tags: git fetch --depth=3000 origin dev; git checkout -B dev origin/dev; git fetch --tags origin.
- **In flight:** news/2026-11-11-round-two.md keeps the round only: each wake add the new hour's line to 5c and take '(open)' off the last; a correction of the hour in section 7 (above 'The librarian's own'); section 9 current. Point 11 (the wind-down; D10 answered by the 10:38 correction) and point 12 (Dinis's ~11:45 word: decision brief, contact desk, people in Lisbon now, four agents) are written.
- **In flight:** While an hour is open a row may be reworded: at closing, read the hour's commits again. At T11's close say whether /welcome/ moved to / and whether Dinis answered the plan (card a-wind-down-plan). BRIEF.md's ~11:45 section is read by this session.
- **In flight:** tools/library-pack.mjs: state.json's warnings_lisbon.by_newest_message (IPMA's current CAP message per hazard from cap.json, and 'differs' against warnings.json) was added at 07:50. It read 'differs' empty after the open data caught up at 08:43 (not checked since 08:49: look once).
- **In flight:** Card a-librarian-8: its ask was removed from 'asks' at 07:50, so incident.board@ can close it (not checked that it did).
- **In flight:** library/pack/start.md: rule 9 (websummit.com on hold) is the conductor's interim hold; when Dinis decides card a-websummit-terms, rewrite the rule to the decision. The fresh-session line is computed by the wake's edit script from data/keys.json (highest -N per role, leaving out 'not used') and pasted in; moving it into tools/library-pack.mjs is not done. The paragraph on IPMA's two channels and the one on vault keys were added by the sixth session: keep them true (CLAUDE.md is the authority for the keys).
- **In flight:** The catalogue's cost: done as far as the librarian's paths go (tools/library-index.mjs runs tools/library-pack.mjs in its own process on the entries in memory; index+pack 539 ms to 428 ms). What is left is linear in bytes read; the larger saving is one shared read of the tree in admin/build/build.mjs, told to the conductor at 04:22 and not answered: do not start it unasked.
- **In flight:** library/pack/also.json holds per-role pointers a fresh session asked for (the journalist's two): add a line when a session says what the pack did not tell it. Nine roles wrote agents/<role>/HANDOVER.md in the 05:00 hour: the pack shows a role's own HANDOVER.md (not checked for each of the nine).
- **In flight:** library/pack/conductor-handover.md is live (v0.1.484): its prose is tracked, its three tables are computed in tools/library-pack.mjs (the block after `const board`). It must stay under 2,000 words (the build prints a warning; 1,903 at 04:14). Waiting on the conductor: its hourly wake's real steps and its own scheduled wake, both marked 'not written down'. library/pack/wakes.json is a reading of 04:10: do NOT list the scheduler again unless the conductor says wakes changed (a page is about 55,000 characters); ask the conductor for the changes instead.
- **In flight:** the accountant will repeat the pack test now that start.md has the two rules it found missing; put any new result on the pack's index (tools/library-pack.mjs reads accounts/pack-test.json).
- **In flight:** library/abp.json: the 17 entries added at 03:10 rest on what each agent says of itself (JOBS.md, policy.json, its status); read each against its own files and the gate when there is time. Three findings to pass on: tools/llm.mjs is listed under both incident.models@ and incident.dev@ in agents/policy.json; README.md under both the conductor and incident.ci@; incident.ci@'s status gives the gate's budget as 5 s where CLAUDE.md says 8.
- **In flight:** From incident.reporter@'s second session, still not done: (b) unwritten contracts need a line in the owner's README, which the pack then picks up; (c) say in each role pack whether the role needs state.json at the start. (a), the card title cut, is done: titles are cut at a length.
- **In flight:** library/abp.json has 38 agents (the ninth added incident.datascience@ at 11:51). NOT yet in it: incident.brief@, incident.desk@, incident.sherpa@ (none had pushed at 11:51): add each from agents/JOBS.md, agents/policy.json and its own files once it has pushed, then `node tools/library-abp.mjs`.
- **In flight:** library/pack/start.md rules 12 (the wind-down waits on Dinis), 13 (the 10:38 correction), 14 (the PrompTugal News family) were added at 10:50 and 15 (the contact desk) at 11:45. When Dinis answers the plan or moves /welcome/ to /, rewrite rules 11 and 12. The fresh-session line was refreshed at 10:50 (computed from data/keys.json: highest -N per role, leaving out 'not used').
- **In flight:** For incident.synthetic@ (said in commit 58f19d48): its personas files carried 09:58 ahead of their 09:53:46 commit.
- **In flight:** For incident.planner@ (its message of 10:52; PLAN.md 5d81e23 takes in the library's part): at the close trigger, library/closing-inventory.json: library/index.json grouped by agent (files kept, last touched). The librarian's verdict in the plan: continue, plus the incident template incidents/_template/ with the conductor.
- **Each wake:** git pull --rebase origin dev; read messages; `node tools/library-releases.mjs` (reads data/ci/runs/, needs the tags: git fetch --tags); `node tools/library-news.mjs <hour>` and --index; `node tools/library-abp.mjs` if agents/JOBS.md or agents/policy.json changed
- **Each wake:** `node tools/library-index.mjs --git` to refresh the commit record (library/provenance/): a full clone only, and only on hourly wakes (it rewrites up to 16 files)
- **Each wake:** commit: git add -A library news help agents/librarian agents/policy.json 'agents/*/policy.md' tools/library-*.mjs tools/policy-check.mjs; then AGENT=incident.librarian@web-summit.dinis admin/tools/release.sh; then the measure step (accounts/measure.md)
- **Lesson:** Print counts, not data objects: a debug print of a list dumped 33 KB into the context.
- **Lesson:** A start plus one wake fits in about 30 calls and reaches about 165,000 tokens a call.
- **what runs in the build:** tools/library-index.mjs and library-view.mjs are in admin/build/generators.json; library-index runs library-pack.mjs itself at its end (--no-pack leaves it out; the pack still runs alone with --out). Nothing they write is tracked.
- **not in git:** This session's private key: stays here and ends with the session.
- **not in git:** A full clone with tags; the scratchpad scripts (edit1.mjs, wake0845.mjs, wake0945.mjs, ship.sh): their form is described above and the articles show the result.
- **scheduled wakes:** 'incident.librarian@web-summit.dinis hourly (8)' (trig_01Kmo7fDDKD3g7YFTEhBP5kG), at :44, bound to the eighth session; it fired at 11:44. The eighth session set no wake and did not list the scheduler. The conductor sets the ninth's and disables this one.
- **last half hour:** Dinis spoke at about 11:45 (BRIEF.md, last section): Watchfloor's decision brief as a model; four new agents (datascience, brief, desk, sherpa); the contact desk rule in CLAUDE.md; a journalists' section and outreach (envoy). No message to the librarian is unanswered.
- **board cards:** a-behaviour-policies waits on Dinis (no answer wanted from the librarian); a-librarian-8 should be closed (see above); a-librarian-9 (wakes firing into stopped sessions) waits on the conductor; a-reporter-5 waits on the librarian for (b) and (c) in 'in_flight'; the j-librarian cards are the jobs above.
- **written:** 2026-11-11T11:46Z by the eighth librarian session (session_018yvwtPRjbYNkXeK8cK7Hxc; key id incident-librarian-dinis-8: the next session makes its own, id incident-librarian-dinis-9, and marks this one handed over), because the start and one wake took the context past 160,000 tokens a call; the next wake would pass 180,000.

## Your files

125 files, 2,080,811 bytes in all (about 867,005 tokens to read every one): `library/provenance/` 17, `library/releases/` 16, `news/` 12, `news/data/` 11, `library/` 9, `help/` 8, `tools/` 8, `library/pack/` 5. The ones to open first:

- `tools/policy-check.mjs` (7,926 B, 37bfcd6091): The path policy's check (incident.librarian@web-summit.dinis, 10 November 2026, WS-214, at …
- `tools/library-abp.mjs` (10,766 B, 61cd99a1f9): The agents' behaviour policies, as drafts (incident.librarian@web-summit.dinis, 11 November 2026, WS-214, at …
- `library/abp.json` (42,505 B, a82ecc1efd): What is particular to each agent's behaviour policy: its business task where agents/JOBS.md only says 'as …
- `library/releases.json` (3,391 B, 4322b1f2e2): The release history of storm-charles.promptugal.news: for every CI run number, the version, what its commits …
- `news/README.md` (3,254 B, 22148f6399): Kept by incident.librarian@web-summit.dinis. One article per release window (an hour, while the storm runs): …
- `tools/library-index.mjs` (32,503 B, fb6cebd676): The library's catalogue (incident.librarian@web-summit.dinis, 10 November 2026, WS-214; Dinis's direction …
- `library/README.md` (5,143 B, 4d1060e6b0): The catalogue as a page, by kind, with the gaps listed.
- `help/README.md` (1,389 B, cde4ab7868): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 02:15 UTC. Short pages, one question each. …
- `library/index.json` (3,511,942 B, 57954f438a): Every file on this site: kind, what it is, who wrote it, when it changed, what it was made from, what links …
- `tools/library-pack.mjs` (36,614 B, e78486e327): The briefing pack (incident.librarian@web-summit.dinis, 11 November 2026, WS-214; Dinis, ~02:50 UTC: "we …

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@** (21 files of theirs): `CLAUDE.md` (6,725 B, c848e0eece): A newsroom for people and a data source for agents on Storm Charles …; `.github/workflows/deploy.yml` (5,392 B, b4afa753e0): One job: checkout (shallow), build, gate, deploy, tag, measure. …; `admin/build/validate.mjs` (7,941 B, 31c59df9f2): The gate: must print OK, and a red gate is no release. Budget: 8 …; and 18 more
- **incident.journalist@** (7 files of theirs): `journal/README.md` (6,148 B, 709e4780d7): Kept by incident.journalist@web-summit.dinis, 11 November 2026, 10:35 …; `journal/a-storm-one-person-one-night.md` (11,896 B, c9c8596720): Kept by incident.journalist@web-summit.dinis, 11 November 2026, 10:14 …; `journal/mistakes-made-in-the-open.md` (10,655 B, 58760f1a75): Kept by incident.journalist@web-summit.dinis, 11 November 2026, 11:22 …; and 4 more
- **incident.sources@** (6 files of theirs): `sources/meteoalarm/dataset.json` (2,218 B, a5179f0d75): Where the full copies of MeteoAlarm's feeds are kept: a data vault …; `sources/sources.json` (68,614 B, 8212f6a835): Every outside body this site takes data from or cites, official …; `tools/source-meteoalarm.mjs` (17,148 B, 71881f7c62): The MeteoAlarm reader: one polite read of a country's warning feed, …; and 3 more
- **incident.storyteller@** (6 files of theirs): `story/arc.md` (8,933 B, c7bcf31338): What this is. A site about Storm Charles in Lisbon (10 to 12 November …; `story/cast.md` (10,962 B, 2f99b74687): Who is in the story of Storm Charles's site: one person who …; `story/make-cast.mjs` (14,002 B, 426b1c4473): story/make-cast.mjs (incident.storyteller@web-summit.dinis): writes …; and 3 more
- **incident.models@** (5 files of theirs): `tools/llm.mjs` (11,505 B, 9a1369738c): The model ledger's one wrapper (incident.dev@web-summit.dinis, 10 …; `models/which.json` (2,810 B, 7eb7dbedb5): For the other agents: which model to call for which job on this site, …; `tools/models-ask.mjs` (3,156 B, a9d0af0b41): Ask a model one question through the ledger …; and 2 more
- **incident.archivist@** (4 files of theirs): `data/vaults.json` (2,638 B, 0e2d500a57): The vaults this site reads or keeps evidence in (SG/Send, encrypted …; `tools/capture.mjs` (16,404 B, e68a913cb8): capture.mjs: what an outside page looked like when we read it. node …; `evidence/README.md` (150,283 B, 8656dda692): Our dated captures of every outside page this site cites: a …; and 1 more

**They read yours:**

- **incident.planner@** (6 files of yours): `library/README.md` (5,143 B, 4d1060e6b0): The catalogue as a page, by kind, with the gaps listed.; `library/index.json` (3,511,942 B, 57954f438a): Every file on this site: kind, what it is, who wrote it, when it …; `library/pack/conductor-handover.md` (7,217 B, 67e6834084): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 04:12 …; and 3 more
- **incident.envoy@** (3 files of yours): `help/cite.md` (1,860 B, 6a1b74c648): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 02:15 …; `help/corrections.md` (1,351 B, f8a47ff720): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 02:15 …; `help/labels.md` (1,592 B, dae94829c6): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 02:15 …
- **incident.synthetic@** (3 files of yours): `help/cite.md` (1,860 B, 6a1b74c648): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 02:15 …; `help/corrections.md` (1,351 B, f8a47ff720): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 02:15 …; `help/what-this-is.md` (1,522 B, cdada3d434): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 02:15 …
- **incident.journalist@** (3 files of yours): `library/pack/start.md` (19,678 B, ad7a890c8b): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 11:45 …; `news/2026-11-11-round-two.md` (26,136 B, f7df5c9490): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 10:46 …; `news/README.md` (3,254 B, 22148f6399): Kept by incident.librarian@web-summit.dinis. One article per release …
- **incident.conductor@** (3 files of yours): `news/README.md` (3,254 B, 22148f6399): Kept by incident.librarian@web-summit.dinis. One article per release …; `tools/library-index.mjs` (32,503 B, fb6cebd676): The library's catalogue (incident.librarian@web-summit.dinis, 10 …; `tools/library-pack.mjs` (36,614 B, e78486e327): The briefing pack (incident.librarian@web-summit.dinis, 11 November …
- **incident.studio@** (2 files of yours): `library/index.json` (3,511,942 B, 57954f438a): Every file on this site: kind, what it is, who wrote it, when it …; `library/pack/start.md` (19,678 B, ad7a890c8b): Kept by incident.librarian@web-summit.dinis, 11 November 2026, 11:45 …

## Open cards on the board

- `a-behaviour-policies` (ask, open): Agree the agents' behaviour policies; waiting on Dinis
- `a-librarian-9` (ask, open): Four hourly wakes still fire into sessions that have handed over (graph :51, weatherwatch :28, studio :58 by its…; waiting on incident.conductor@
- `a-reporter-5` (ask, open): The list under not_in_the_pack_or_the_handover; waiting on incident.librarian@
- `j-librarian-20` (job, open): Incident.librarian@: at the 11:44 wake
- `j-librarian-21` (job, open): Incident.librarian@: tell incident.planner@ what the library gives the closing record and the incident template (transition/PLAN.md §3,…
- `j-librarian-22` (job, open): Incident.librarian@: for incident.planner@ (its message of 10:52, PLAN.md 5d81e23)
- `j-librarian-round-2` (job, open): incident.librarian@: Round two: a viewer for every file with its schema; Help; what's new as articles

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

## What this pack cost you

19,426 bytes (about 8,094 tokens, estimated at 2.4 bytes a token). It points at 39 files of 4,139,451 bytes; your own files are 2,080,811 bytes.
