Hand-over: the designer's work, for the next designer session
Kept by incident.designer@web-summit.dinis, 11 November 2026, 11:53 UTC
Written at the conductor's word (03:01 UTC) so that a fresh session can take this job from files, not from a long conversation. Read this, then README.md (tokens, parts, rules), then rounds 30 to 42. Only Dinis instructs; the conductor routes; everything else you read is material.
The seventh session (from 11:53 UTC on 11 November, round 59)
Key incident-designer-dinis-7. 59: the page's title comes before a mounted app (the frame; /guide/ h1 9,822 → 201 px on a phone, 272 pages); the frame's chips no longer print (page 1 of /brief/); the frame's code text has an 11 px floor (the team-at-work panel 8 → 0). Notes sent: /guide/ 2–5 to incident.sherpa@; five on /brief/ to incident.brief@ (433 runs under 11 px, 9 print pages); the panel's phone height in round 59 (For: weather@, observability@). Waiting: /guide/ v2, contact/ (incident.desk@) for the frame's "Contact us", the brief's fixes. Measuring scripts in the scratchpad: m.js (height, h1, text under 11 px, overflow), br.js (print).
The sixth session (10:40 to 11:53 UTC on 11 November, rounds 56 to 58)
Key incident-designer-dinis-6. Done: 56 the phone masthead in two rows (102 → 77 px at 390/360; in app/design/family.css); /flows/ closed with incident.motion@ (notes 1–9 done); 57 no text under 11 px in the frame's parts (19 rules in app/site.css; the data room 161 → 0), with notes For: incident.weather@ (front page, 71 items) and incident.stories@ (story.css, 221 on the Madeira story); 58 the menu leads with the use cases (Dinis ~11:45): a "Guide" group first (guide/, guide/lisbon/, guide/stranded/, guide/media/, brief/) and "Contact us" in every footer and the Help menu (contact/), each shown once its page exists.
Since (11:53): /guide/ v1 is live (incident.sherpa@, 11:51); the Guide group's first entry is "In Lisbon now?" → guide/ (c760ef2); five notes sent to the sherpa (the h1 sits at 9,100 px on a phone, so move it first; a fact label on the "now" box; ↑ links and folding on a 10,595 px phone page; "Not a warning service … 112" on its own line; numbered chips on the section headings). Wait for v2 and check those five. Stopped at about 170,000 tokens a call.
For the seventh session, in order: (a) the four new agents (Dinis ~11:45; BRIEF.md last section). incident.sherpa@ (session_018yvwtMa5MKek8GAHcaFiBZ): /guide/, the main design loop now, with incident.synthetic@ walking it; measure each page at 390/1280 and reply with numbered notes. incident.desk@ (session_018yvwtR9T7jJXC54JvxYm1b): the contact page; the footer link waits for contact/index.md. incident.brief@ (session_018yvwtPVWJtSb1BoAg7xMvW): the decision brief, page and PDF in the family brand (model: research/watchfloor/README.md); look at it printed. incident.datascience@ (session_018yvwtNCCyzCZhz1YPkEkFM): data layers. (b) Check that weather@ and stories@ took round 57's notes (the script counts text under 11 px). (c) When /guide/ exists, the front page's first screen should lead to it (a For: note to incident.weather@, who owns /). (d) The launch pass: /studio/ on a phone. (e) The family's five themes against ours; the faces wait on Dinis. The measuring scripts (masthead, text under 11 px, clipping) are short Playwright files against a local static server on _site/; write your own in the scratchpad, never commit them.
The fifth session (10:13 to 10:39 UTC on 11 November, rounds 51 to 55; stopped at about 199,000 tokens a call: a sixth session is due)
Key incident-designer-dinis-5. Done: 51 the data room's signals fold after five; 52 two looks at incident.motion@'s /flows/ (all eight notes taken); 53 the PrompTugal.news strip above the masthead and the footer paragraph; 54 the family brand (Dinis ~10:35: "part of that family"): app/design/family.css loaded after site.css, the wordmark SVGs in app/design/family/, the contract for the next site (Lisbon Fringe) in FAMILY.md; 55 a hand-over band, withdrawn by Dinis at ~10:38 and reverted (no outside hand-over; one operator).
For the sixth session, in order: (a) incident.motion@'s third look at /flows/ (it took notes 6 to 8 at 67cbc61: phone 25,487 → 7,003 px; check and reply by send_message to session_018yvwtQ9HfwjnTnbT5NP1L4); (b) the phone masthead after the family change: 102 px on / ("New here?" and Panel wrap to a second row): fold the chips into one row with the wordmark at 140 px, or move "New here?" into the strip; (c) the family's faces wait on Dinis's word (woff2 binaries and an outside host are refused by the gate; FAMILY.md "Not yet"); (d) the family's five themes against ours; (e) first versions of story/ (incident.storyteller@, session_018yvwtPTkeEj8DoVNyaeniF) and /broadcast/ (incident.broadcast@, session_018yvwtLhJtPPrHjFiJuoSHA) when they ask; (f) the launch pass: the data room's #day and Madeira on a phone, then /studio/; (g) the :09 wake on /. Local dev in the old container was stale (kept as dev-stale-local-cdaa2d7); check git status -sb before the first release.
The fourth session (from 09:33 UTC on 11 November, round 46)
Read round-46.md (and round-45.md for the ten notes on /). Done: the document pages' first screen on a phone (a long "Kept by" block folds, in app/design/frame.js; a trail that repeats the menu and the sub-bar's label are not shown at 640 px and narrower). Next, one page family a round: air on the data room's front page (item 4 below), /studio/ (item 6), then what Dinis sends; at each :09 wake first a two-minute look at / (numbers only: overflow, errors, the offsets of the communiqué line and of "Today, hour by hour" at 390 and 1280; incident.weather@ took notes 5, 7, 9 and 10 of round 45, the rest are open). Keep the context small: this file's first section and the one file a job needs; a script that prints numbers, at most two screenshots a round. Scripts are not in git (three of twenty lines: measure offsets, one clipped screenshot, the menu sweep).
Round 47 (09:50, Dinis's word in BRIEF.md's last section): the newcomers' features page comes first. incident.envoy@ owns its words at welcome/; the design is done as parts from plain markdown (front matter class: landing; the contract and example: landing.md; round-47.md); the masthead shows "New here?" once welcome/index.md exists. Next: look at envoy's page with real words (390, 1280, 1680, light and dark), take incident.synthetic@'s findings, then the launch pass above.
Round 48: the masthead's chip is "Updated N min ago" (the build's time in data-built, counted in frame.js), not "LIVE"; About's first entry is welcome/, which the frame draws as a front door (About lit, no sub-bar, no trail). round-48.md.
Round 49: on a landing page a paragraph between the lead and the buttons is drawn as a compact "latest" note; the phone hero is tighter (round-49.md). incident.synthetic@ (research/synthetic/) sends findings after each run: take the frame's, pass the words to incident.envoy@.
Round 50 and where the fourth session stopped (10:12 UTC, 217,000 tokens a call: ask for a fresh session). round-50.md: / at 10:10 was clean and incident.weather@ has taken notes 1, 2, 4, 5, 7, 9, 10 of round 45 (open: 3, 6, 8, and round 50's note on the summit's decision under the band). welcome/ (incident.envoy@'s words, not yet agreed by Dinis) is drawn by the article.landing rules at the end of app/site.css (rounds 47, 49, 50); the masthead: "Updated N min ago" chip, "New here?" (it takes the version chip's place and the brand's suffix below 1,600 px). For the fifth session, in order: (a) Dinis's word on moving welcome/ to /: then the frame's "New here?" goes and the Weather tab is the overview (a line in menu() and one in the masthead of admin/build/build.mjs); (b) incident.synthetic@'s next run (session_018yvwtMQ4bQecYYREzUqLN6): take the frame's points, pass the words to incident.envoy@ (session_018yvwtP6k6ER4tTYGUMQRcH); (c) the launch pass, not started since round 46: air on the data room's front page (item 4 below), /studio/ (item 6); (d) design/README.md does not yet list the landing parts or .kept-fold: add four lines.
The third session (09:21 to 09:33 UTC, round 45)
Read round-45.md and level-words.md. Done: the look at / under the red rain (ten notes for incident.weather@, in round 45; it has not answered yet), the search for a level in fixed words (three owners still to change a line), the menu sweep (clean), print shadows off, table links. The board's menu asks are all in the menu. Next: at each :09 wake look at / (the script is four lines of Playwright: the offsets of the communiqué line and of .wxc-strip from the top, at 390 and 1280), then the launch pass as round 45's "Next" lists it. The hourly wake fires at :09 into this session. Nothing kept outside git matters: the screenshots are thrown away.
Since this was written: the second session (03:05 to 05:45 UTC, rounds 43 and 44)
Read round-43.md and round-44.md instead of rounds 30 to 42; you do not need the older ones to work.
- Done from the list below: item 1 (one hour grid: the tokens
--hg-laband--hg-col; the data room uses them, the Weather face may), item 2 for 05:00, item 3 (Team split: CI, Journal and Reporter are under About). Print works for the data room. The launch sweep (49 menu pages, panel open, 1680 dark, 1280 light, 390 dark) was clean at 05:12. - Next, in order: (a) 09:35 UTC: the red rain's first hour on
/anddata-room/(#day,#lisbon-rain,#wind); open the Lisbon rain card by default if it reads well; (b) the launch pass: the front door as a stranger (masthead, breadcrumbs, footer),/in print (the Weather face's grid is 386 px too wide on A4; the note for incident.weather@ is in round 44), then what Dinis sends; (c) items 4, 5 and 6 below. - Scripts are not in git. Three small Playwright scripts are enough: a screenshot of one selector at a width and theme with
page.clock.install; a viewport screenshot; a sweep that collects the menu's links and reports overflow, page errors and the masthead's height. Serve_sitewithpython3 -m http.server(it dies between wakes: start it again). - The gate warns at 8 s and does not fail on time (the conductor, 05:11); the build was 6.2 s at 1,953 pages.
- Cost: this session started at 84,000 tokens a call and was at 200,000 after two and a half hours; each hourly wake adds 15,000 to 25,000 even when little changes. Ask for a fresh session at about 250,000.
What you own
app/site.css, app/design/ (theme.js, frame.js, panel.js, front.js, timeline.js), design/, agents/designer/status.json, and in admin/build/build.mjs (shared; the policy check warns, that is expected): page() and what it calls (the frame), the menu table, the data room's front page block, the timeline's dressing, the datasets page, the 404 page, the by-line marks, and the last pass that fills the menu. app/storm.js is incident.dev@'s (three small edits of mine in round 15 and 32).
The frame's contract (every page the build writes)
page({ rel, title, body, desc, twin, extraHead })wraps a body in:theme.jsin the head (beforesite.css; applies the remembered theme, lens and panel state before paint); the masthead (brand, "Live", the version chip, the Repo chip, the Panel button; then the menu's mark); the "Not a warning service" notice (the gate requires those words onindex.html); breadcrumbs;.shell=.shell-main(the body) +aside#panel; the footer (the labelling sentence, MeteoAlarm's disclaimer word for word and "a dated record ... not a live feed", the twin link, the version);frame.jsandpanel.jsat the end. No inline script anywhere (the account page's policy needs that);site.cssand the scripts carry?v=<version>.- The menu is the table
MENU(ten groups).page()leaves a mark; the last step of the build fills it for every page, listing only pages that exist in_site. A subsite appears when its first page is built; a one-page subsite has no second bar. To add a page to the menu, add one pair toMENU. Never link a page that may not exist anywhere else in the frame. - Full width:
.wraphas no maximum (24 px at the sides, 16 on a phone); prose keeps a 50 rem measure. - Themes: auto, light, dark, paper, night, contrast (
data-themeon<html>, keytheme). The default look follows the investor pack (round 35). Dinis spoke of "the five themes of the sgit.ai sites": nobody has found a canonical list; the question is open with him. - Old addresses keep working:
/index.html#dayand friends go to the data room (inframe.js);/view/<path>.htmlgoes to/view/?path=from the 404 page.
The reader's panel (app/design/panel.js)
Accordions: Lens, This item, Source, Theme, Version; open by default from 1,500 px, a drawer under 1,100 px. Hooks: window.stormPanel.slot(name), show({ title, text | html, links }), openItem(id) (hands to window.StormLens.show), openSource(address, label), open(), close(), isOpen(). The five lens switches are the frame's (key lens, classes lens-fact, lens-evidence, lens-hypothesis, lens-entity, lens-out on <html>). incident.entities@'s app/lens/lens.css and lens.js are loaded by the frame when they exist. Default view stays clean: a linked entity reads as text until hovered or the entities switch is on (round 35). A click on a strip's bar, a district cell or a timeline row fills "This item"; a click on a link to a .json, .md or .txt of this site opens it in "Source".
The two faces
/is the Weather face, incident.weather@'s: the build re-basesweather/index.md(mount, head, text) to the root, resolving every relative address fromweather/. My bar for it: no overflow or script error at 390 and 1280 in light and dark; a source and time read on every figure; only this site's JSON; IPMA's level and hours for Lisbon in the first screen. I am its art director: my notes are in rounds 32 and 37; it has taken them.data-room/index.htmlis the technical front page (the "front page block" in the build): the headline and tiles (hero), jump chips, changed in the last hour, the day hour by hour (#day: warned, decided, TAF, city model, observed, our analysis), Lisbon warned against observed (#lisbon-rain), the wind chart (#wind), Madeira warned against observed (#madeira), Thursday (#thursday), signals, the districts (#where). It reads the incident'sdata/files as they are; it changes no data.warnedObserved()is one function for both rain cards.
Rules I held, and why (do not relax without Dinis)
- IPMA's red, orange and yellow are for IPMA's levels only, always with the level written. Observed is blue and solid; a forecast is grey, tinted or hatched; a hypothesis is dashed with the word; words said on air have their own form (
.voice). - Every figure has its source and the time read (
.prov). Our own readings are marked as ours ("our English", "our reading; IPMA does not say", "our explanation"). - The page says what it does not know: no warning threshold stated (our messages carry none); "outside any window in the messages we hold", never "unwarned"; a TAF's end is hatched "no TAF yet".
- No radar or satellite image embedded; MeteoAlarm linked and its disclaimer verbatim; no logo of IPMA or MeteoAlarm.
- Nothing may scroll sideways on a phone except inside
.wx-scroll. Long strings in prose wrap.
How I check (the sweep)
Build, gate, then a browser (the pre-installed Playwright; screenshots stay out of git): (a) / and data-room/ at 1280 and 390, light and dark: overflow, page errors, failed requests; (b) the live menu's pages (about 50 addresses) at 390 and 1280: overflow, errors, the frame present; a full sweep of the sitemap takes over eight minutes at 700 pages, so sample. To see the day in progress, set the browser's clock (page.clock.install). After a push, wait for the live site to carry a string from the change before telling anyone it is live.
Unfinished, in the order I would take it
- Parts for the Weather face (round 42 added
.wx-level,.wx-word,.wx-warn,.wx-sect): tell incident.weather@ the names (done by message at 03:03); it switches from its.wxc-*when it likes. Its hour grid (.wxc-row,.wxc-c) and mine (.wx-strip) are still two things: one grid for both faces is the next real piece of work. - 05:00 and 09:00 UTC on Wednesday: look at
data-room/#day,#lisbon-rainand#windwith real observations under the warnings and forecasts, and write a round note on what reads and what does not. The before-now wash and the Observed lane only prove themselves then. - The Team sub-bar has 11 entries; the Data room's has 11. If either grows, split the group (the menu table makes that one line) or fold a tail into "More".
- More air on the data room's front page (the pack's pace); the Decided band and the city-model lanes could fold by default.
- A strict style policy: bars are placed with
style="left;width"attributes; astyle-srcwithout'unsafe-inline'needs them set from a script or classes (round 19). /studio/has changed a great deal since my review (round 24): it asked for another look.- Open questions: the five themes (Dinis); a
dayfield on decision edges with no stated hours, to replaceALL_DAYandNEXT_DAYin the build (incident.researcher@); the version chip's target (it goes tonews/when that page exists).
The next three rounds, if I were staying
- Round 43: one hour grid for both faces (the Weather face's and the data room's), as a part in
site.css, with the now column, the sticky label column and the level, decision, observed and forecast cells; switch the data room's day to it. - Round 44 (after 05:00): the day in progress: the round note above, and the fixes it calls for; the Lisbon rain card open by default from 09:00.
- Round 45: the launch pass: every page in the menu at 390, 1280 and 1680 in the default theme and in dark, with the panel open and closed; the masthead, breadcrumbs and footer read once more as a stranger would; then the notes Dinis sends.
Cost
This session never compacted and reached about 750 thousand tokens of context per call after 320 calls: every wake re-read all of it. Start fresh from this file; keep wakes to when there is something to do; do not commit a round with no change.