Overview & Purpose
This document records how the AI & Sustainable Development readout was produced. The readout summarises a side event held at the margins of the High-level Political Forum on Sustainable Development (HLPF) 2026 on 15 July 2026, co-hosted by the Permanent Missions of Pakistan and Tajikistan with Pakistan's Prime Minister's Youth Program, on how artificial intelligence can advance the Sustainable Development Goals.
It exists for two reasons:
- Replication. This is the first readout in the
ai-at-unthematic track, and it is the first the pipeline has run on a panel / side-event format sourced from the transcripts portal (earlier panel readouts were captured and transcribed locally). It is a concrete runbook for the next AI-at-the-UN session. - Provenance. If a reader asks how the conclusions were reached and where the information came from, this document answers that directly.
The source transcript was obtained from the UN transcripts portal rather than captured and transcribed locally. The portal supplies a speaker-attributed ASR transcript, which removes the recording and speech-to-text stages but adds a dependency on machine transcription — and, in this case, surfaced a timing quirk (the transcript was made against a longer cut of the recording than the one now published) that had to be corrected before verification. That is written up in full at Stage 4.
The work moved through six stages: the meeting was discovered on the portal, its transcript fetched and converted to attributed markdown, analysed into consensus and tensions of emphasis, its quotes verified against the recording, synthesised into a structured briefing, and published as a single interactive HTML page with this methodology record. Every stance on the readout traces to a verbatim passage in the transcript. Where a speaker did not state a position, they are marked silent rather than guessed (the project's no-fabrication rule).
Pipeline at a Glance
Each stage produces a named file on disk, so any claim on the readout can be walked back to its source. The transcript, the source-analysis notes, and the HTML all live under the project's transcripts/ai-at-un/ and readouts/ folders.
Tools Used
The transcript came from the UN's own portal, so this readout needed no recording or first-pass speech-to-text tooling to produce the source text. Quote verification, however, does download the meeting audio and run a local speech-to-text model to check the ASR text — those tools are named below alongside the fetch, analysis and build.
| Stage | Tool | What it is | Role here |
|---|---|---|---|
| Discover / fetch / convert | fetch_un_transcripts.py | Purpose-built Python script (stdlib only) | Queried the portal, downloaded the meeting JSON, and converted it to speaker-attributed markdown. |
| Source | transcripts.un.org | Official UN transcripts portal (ASR) | Supplied the raw transcript with built-in speaker attribution (name, role, affiliation) and per-sentence timestamps. |
| Verify — audio | UN Web TV / Kaltura VOD | Official UN video archive (Kaltura partner 2503451) | The recording against which every position-critical quote was audio-verified. English audio flavor pulled via an unauthenticated widget session. |
| Verify — slice | ffmpeg | Audio/video toolkit | Cut a short window from the MP4 around each quote's (offset-corrected) timestamp for transcription. |
| Verify — transcribe | whisper.cpp (large-v3-turbo) | Local CUDA speech-to-text (projects/whisper-local/) |
Independently transcribed each sliced window so the quote could be compared against a second speech-to-text pass, not just the portal ASR. |
| Analyse + orchestrate + build | Claude Code (Opus 4.8) | AI analysis and coding assistant | Extracted and coded positions, ran the verification workflow, drafted the briefing, and rendered the HTML. |
How Claude Code was used
Claude Code read the full attributed transcript, extracted each speaker's stated position verbatim, coded the event as consensus + tensions of emphasis (see the frame note), ran the quote-verification workflow end to end — including diagnosing and correcting the recording-cut timing offset — drafted the structured briefing, and rendered it into the interactive HTML page, reusing the panel-format design system established by the Beyond GDP HLPF readout. Opus 4.8 was chosen because the honest reading of this event (a consensual advocacy room, not a clash of camps) is a subtle judgement that is easy to get wrong by manufacturing conflict. The substantive judgements — what each speaker meant, how to frame the room, the briefing wording — are the analyst's; the assistant did the extraction, the verification runs, the consolidation and the build. The human's only gate is reading the final HTML.
Stage 1 — Discovery
The UN transcripts portal carries ASR transcripts for the preceding 365 days. This side event was located on the portal as asset k1q/k1qcq6j7ul. Its companion video sits on UN Web TV as the same Kaltura asset (live entry 1_qcq6j7ul).
Stage 2 — Fetch & Convert
The meeting was fetched into the ai-at-un track and converted to attributed markdown:
python pipeline/fetch_un_transcripts.py fetch k1q/k1qcq6j7ul --silo ai-at-un
python pipeline/fetch_un_transcripts.py convert transcripts/ai-at-un/2026-07-15_k1qcq6j7ul.json
The portal's JSON nests the useful fields — title and summary under metadata, the statements under transcript.data, and per-sentence word timestamps under each statement's paragraphs[].sentences[]. The conversion produced 52 statements across 15 substantive speakers: a moderator, two keynote speakers (Tajikistan, Pakistan), a three-person panel (UNDP, Google, a youth delegate), floor interventions from Kazakhstan, China and Azerbaijan, four audience questioners, and Pakistan's Permanent Representative closing.
Stage 3 — Analysis & Coding
With the attributed transcript in hand, each speaker's stated position was extracted verbatim and sorted. The working notes are kept in readouts/ai-sustdev-panel-2026-07-source.md, which records the consensus points, the tensions of emphasis, the stand-out interventions, and the per-participant positions, each anchored to a quote.
How the event was coded
Unlike the Security Council readouts, this event was not coded onto opposing stance axes — because there were no opposing camps to plot (see the note on the analytical frame). It was coded on three layers drawn directly from what was said:
- Consensus — the commitments nearly every speaker shared (bridge the divide; youth as shapers; human-centred, safe AI; AI for the SDGs; cooperation as the mechanism), each anchored to a verbatim quote from a different speaker.
- Tensions of emphasis — real differences in weight, not open disputes: finance-vs-skills as the binding constraint; sovereign capacity vs. Big-Tech partnership; state showcase-optimism vs. the UNDP risk warning. Each is shown as the speakers' verbatim words side by side, explicitly labelled as differences in emphasis rather than a fight.
- Stand-out interventions (outliers) — the distinct or dissenting notes worth reading twice: UNDP's compute-concentration and safeguards warning, the Myanmar conflict-state question, the procurement-access exchange, China's parallel-venue announcement.
Participants are coloured by actor type — member state, UN system, industry, youth, audience — not by negotiating bloc, because this was a mixed advocacy room, not a bloc negotiation. Where a speaker did not state a position on a point, they are simply not shown on it; nothing was inferred.
Stage 4 — Quote Verification (audio)
The portal transcript is machine ASR, so every quote destined for the page — talking points, participant cards, the executive summary — was checked against the actual meeting audio before publication rather than flagged as provisional. This is a mandatory pipeline stage. The full method, escalation ladder and run log live in pipeline/quote-verification.md; the summary follows.
The method
- Resolve the recording. A
baseEntry/geton the live UN Web TV entry1_qcq6j7ulreturned the recorded VOD entry1_gr3kz7u8.getPlaybackContextenumerated the flavors; the English-audio flavor is1_w51t2aqe(flavorParamsId100). No API key is needed — an unauthenticated widget session gives access. - Confirm the flavor layout. This was the first panel-format entry the pipeline had verified, so the flavor list was checked before assuming the Security Council layout transferred. It did: the English flavor is paramsId 100, exactly as for the chaired sessions — the method carried over unchanged.
- Download the English audio. The ~103 MB English-audio MP4 was pulled via the Kaltura
playManifestURL for that flavor. - Slice each quote's window. For each of the 17 quotes, ffmpeg cut a short window centred on the sentence's (offset-corrected) timestamp.
- Transcribe independently. Each window was run through
whisper-cli.exe(large-v3-turbo, flags-mc 0 -tp 0.0 -nf -nt) so the quote could be compared against a second, independent speech-to-text pass — not just re-read from the portal ASR. - Compare and judge. The whisper output was compared to the ASR quote text; a match confirms the quote, a mismatch triggers a correction and a re-slice.
json_start − 1119 with a ±12s window. This is now written up as a second known cause (alongside interpretation drift) in the verification method.Why the English flavor, never "Interlingua"
The English audio flavor (paramsId 100) is always the verification target. It is the channel the portal ASR actually transcribes — floor audio for English speakers, the English interpreter for everyone else — so it is the like-for-like comparison. This event ran mostly in English on the floor, so drift within the audio was negligible; the only timing issue was the global re-cut offset above.
The result: 17 of 17 quotes matched
After the offset correction, all 17 position-critical quotes matched the recording; no corrections were needed. One non-correcting artifact was noted and left as-is: the audio has the Google speaker say "intelligent for the many" (a slight slur of delivery) where both the readout and the ASR read the intended "intelligence for the many." The readout, source notes and track index were updated to verified with timestamps.
| Speaker | Quote (opening) | Audio pos. | Result |
|---|---|---|---|
| Chairman Khan (Pakistan) | "Yet AI is not inherently inclusive…" | ~493s | match |
| Chairman Khan (Pakistan) | "…not the sophistication of its algorithms, but the lives it improves." | ~836s | match |
| Chairman Khan (Pakistan) | "It must not become a tool of technological monopoly." | ~811s | match |
| Jennifer Lui (UNDP) | "…three-quarters of it sits in only one country…" | ~986s | match |
| Jennifer Lui (UNDP) | "…how do we make sure the frontier benefits actually reach us?" | ~1016s | match |
| Jennifer Lui (UNDP) | "Our safeguards are not keeping pace with AI's growth." | ~1036s | match |
| Jennifer Lui (UNDP) | "…decided in many smaller choices… micro-governance choices…" | ~1321s | match |
| Jennifer Lui (UNDP) | "…are being enlisted into cybercriminality." | ~3806s | match |
| Hashim Saeed (Google) | "…not as a tool for automation, but as a bridge for opportunity…" | ~1530s | match |
| Hashim Saeed (Google) | "…should be intelligence for the many." | ~1805s | match* |
| Hashim Saeed (Google) | "…only 14% of workers… received formal and true AI training." | ~1620s | match |
| Bisma Qamar (Pakistan youth) | "History will not remember the speed of AI…" | ~2104s | match |
| Bisma Qamar (Pakistan youth) | "…choose inclusion over exclusion…" | ~2127s | match |
| Kazakhstan | "Developing countries should not merely adopt… they should actively shape its future." | ~2470s | match |
| China | "…its power to leapfrog traditional development barriers." | ~2585s | match |
| China | "…boosted efficiency by over 30% while cutting defects by half…" | ~2601s | match |
| Amb. Asim (Pakistan PR) | "…it's the humanity that must shape the future of the AI." | ~4098s | match |
* "intelligence for the many" — audio delivery slurs to "intelligent for the many"; the intended and ASR-canonical reading is kept. Audio positions are offset-corrected (json_start − 1119s). Because these span the keynotes, all three panelists, and every floor intervention, verifying them anchors both the consensus layer and the UNDP counter-current directly to the recording.
Stage 5 — Synthesis & Briefing
The coded, verified material was collapsed into a single structured briefing following the panel-adapted house format:
- Executive summary — the headline proposition (bridge or widen the divide) plus the four shared commitments as a skimmable bullet list, and a callout flagging the one voice (UNDP) that complicated the room's optimism.
- Governing frame — a highlighted box for the reference point four speakers kept returning to (the UN Global Dialogue on AI Governance + Independent Scientific Panel, Geneva the week before) plus China's parallel Shanghai venue. This replaces the "process news" box a negotiation readout would carry, since no hard deadline emerged here.
- Areas of consensus — the shared frame, each point anchored to a verbatim quote from a different speaker.
- Who spoke — searchable participant cards, coloured by actor type, filterable by segment (keynote / panel / floor / audience).
- Tensions of emphasis — the three differences in weight, each shown as the speakers' verbatim words side by side and explicitly framed as emphasis, not dispute.
- Stand-out interventions — the outliers box.
- Talking points — the single verbatim home of the key quotes, all audio-verified; body prose paraphrases them.
Two structural rules keep it brief: each position appears once in prose, with full detail only in the participant cards; and the page opens with the reader-facing sections expanded and the deeper layers collapsed behind an expand-all control — a two-to-five-minute read for a high-level reader.
ai-at-un track is thematic with time-series intent "none" (retrieval + optional summary, not a tracked negotiation), this readout ships as a standalone: no sequence banner and no topic-persistence table. Those elements belong to active-sequence tracks such as Beyond GDP.Stage 6 — Publication (HTML)
The briefing was rendered as a single self-contained HTML page — a static file with inline CSS and JS, no build step, no external dependencies.
Interactive elements
- Searchable participant grid. A card per speaker, coloured by actor type, filterable by actor type and by segment (keynote / panel / floor / audience) and free-text-searchable across names and positions.
- Tension rows. Each tension of emphasis is a stack of verbatim quote rows, colour-keyed to the speaker's actor type, with a short "lean" label per speaker (e.g. "Finance / investment", "Skills / capacity") — deliberately not framed as opposing poles.
- Tiered collapse. Reader-facing sections open on load; deeper sections sit behind an expand-all / collapse-all control.
Accessibility choices
- A skip-to-content link and visible keyboard focus outlines.
- Collapsible sections with an expand-all / collapse-all control.
- A sticky table of contents that tracks the reader's position.
This methodology page reuses the same design system, so the readout and its method read as one family.
A Note on the Analytical Frame
The single most important analytical judgement in this readout is a negative one: this event had no hard fault lines, and it would have been a fabrication to invent them. The house panel template centres a "fault lines — where the room divides" section, and it would have been easy to force this event into it. But this was a co-hosted advocacy side event, convened by Pakistan and Tajikistan to put a shared message on the HLPF record — not an intergovernmental negotiation. Nearly every speaker agreed on the same frame.
So the readout is coded to three honest layers instead: a strong consensus; the real tensions of emphasis underneath it (differences in where speakers put the weight — finance vs. skills, sovereignty vs. Big-Tech, optimism vs. risk — not open disputes); and the one genuine counter-current, UNDP's Jennifer Lui, whose compute-concentration and safeguards warning is the clearest departure from the room's celebratory tone. Presenting the tensions as if they were camps in a fight would have overstated the disagreement and misrepresented the event. This choice is disclosed here so a reader can weigh it; the coding table in the source notes shows the quote behind each placement, and the underlying transcript is the check.
This mirrors the reasoning used elsewhere in the project: where a dimension is universal and non-diagnostic (every Security Council speaker "condemns the atrocities"; every UN80 speaker "supports UN80"), coding it produces a uniform field with no signal, so the analysis moves to the axis where the real variation lives. Here, the real variation is not whether the room agrees — it does — but where the emphasis falls and who complicates the optimism.
Provenance & Traceability
This is the short answer to "how do you know?" Each type of claim on the readout traces to a specific source.
| Claim type | Traces to | How |
|---|---|---|
| Verbatim quotes in talking points and cards | Portal ASR transcript, audio-verified against the recording | Reproduced from the ASR text, then checked sentence-by-sentence against the Kaltura English-audio VOD (Stage 4), after correcting the recording-cut timestamp offset. All 17 matched. |
| Who said what (speaker attribution) | Portal metadata + moderator hand-off cues | Attribution supplied by the portal, cross-read against the moderator's introductions in the transcript. One name (the Tajik keynote) is unresolved in the source and withheld. |
| Consensus / tension / outlier coding per speaker | ai-sustdev-panel-2026-07-source.md |
Extracted from the transcript; each anchored to a quote; unstated positions marked, not guessed. |
| Consensus points, tensions of emphasis, stand-out interventions | ai-sustdev-panel-2026-07-source.md |
Synthesis of the coded positions into a structured briefing. |
| Hard figures (₹60 bn, 1.6 M laptops, 2 M professionals, etc.) | Portal ASR, flagged as provisional | Reproduced from the ASR text and explicitly flagged for number-check; the audio pass verifies wording, not figures. Listed in the source notes' ASR watch-list. |
| Section text and visual elements on the page | The readout HTML file | Rendered directly from the briefing; no new facts introduced at this stage. |
Limitations & Honesty Notes
The method is transparent about where error can enter. None of the steps below were hidden; each was managed.
- The transcript is machine ASR, not an official record. Portal ASR mishears names, acronyms and figures. The quotes on the readout are mitigated by the Stage 4 audio check, which passed 17/17; but non-quoted ASR text remains provisional.
- One speaker's name is unresolved. The Tajik keynote speaker is headed "Abdurrahman Zadeh" in the transcript but introduced phonetically as "Ramonov"; the two do not match (and the ASR separately renders the President's name "Emomali Rahmon" nearby, a plausible confusion source). The name is withheld from the readout — the speaker is labelled by office only — pending confirmation against the video or a UN protocol list.
- Hard figures are unverified. The audio pass confirms that a speaker said a figure, not that the figure is correct. All quantitative claims (₹60 bn, 1.6 M laptops, 73k trained, 2 M AI professionals by 2030, Kazakhstan's index rankings, China's +30% / 90% figures, and so on) are reproduced from the ASR and flagged for number-check; they are the speakers' own claims, not independently corroborated.
- The recording was re-cut. The published audio (1h15m) is shorter than the version the transcript was timed against (1h34m). Verification handled this with a measured, both-ends-confirmed −1119s offset — but it means a naive slice at the raw JSON timestamp lands in the wrong place, a documented gotcha for any future portal-sourced session carrying the same "some parts may not match playback" banner.
- The consensus reading is interpretive. Framing the event as consensus + tensions + one counter-current (rather than as camps) is an analytical judgement, disclosed in the frame note. A different analyst might weight the tensions differently; the transcript is the check.
What was automated versus human-checked
- Automated Portal discovery, transcript fetch, JSON-to-markdown conversion, first-pass position extraction, and the entire quote-verification workflow (flavor resolution, VOD download, offset diagnosis, ffmpeg slicing, whisper transcription, comparison) — Claude runs this end to end.
- Human-checked The reading of the transcript for meaning; the decision to code it as consensus rather than camps; the briefing wording. The human's only gate is reading the final HTML — by design, per the pipeline's division of labour.
Replication Runbook
To repeat this for the next AI-at-the-UN session in the ai-at-un track, or any other portal-sourced panel / side event. All commands run from the project folder so the relative transcripts/ paths resolve. See pipeline/un-transcripts.md for the fetcher guide and pipeline/quote-verification.md for the full verification method.
1. Discover the meeting
Find the session on the portal by its title / asset slug (side events have no document symbol). Record both the transcript asset slug (k…/k…) and the UN Web TV / Kaltura live entry for later verification.
2. Fetch and convert
python pipeline/fetch_un_transcripts.py fetch <slug> --silo ai-at-un
python pipeline/fetch_un_transcripts.py convert transcripts/ai-at-un/<file>.json
Produces <date>_<slug>_attributed.md and updates transcripts/ai-at-un/INDEX.md. Drop procedural noise (housekeeping, hand-offs, one-line fillers). Confirm the format: a panel / side event uses the panel adaptation, not the chaired template.
3. Analyse and code
- Extract each speaker's stated position verbatim.
- Decide the frame honestly. Is this a negotiation with real camps, or a consensual room? If consensual, code consensus + tensions of emphasis + outliers — do not manufacture fault lines. Mark unstated positions silent.
- Save the working notes as
<readout-slug>-source.md, with an anchor quote per point, an ASR-flag list, and any unresolved names.
4. Verify quotes against the audio (mandatory, do not skip)
- Resolve the VOD entry (
baseEntry/geton the live entry) and the English audio flavor (getPlaybackContext; paramsId 100). Check the flavors — do not assume paramsId 100 exists for a differently-configured entry. (For panel-format entries it does — confirmed on this run.) - Download the English-audio MP4 via the Kaltura
playManifestURL. - Sanity-check the timing before slicing all quotes. If a banner warns the recording was re-cut, or if a first slice returns coherent-but-wrong content, measure the JSON→audio offset at 2–3 landmarks, confirm it is stable at both ends, and slice at
json_start − offset. Interpreted speakers can additionally drift 10–20s (widen the window). - For each position-critical quote, ffmpeg-slice a window and transcribe with whisper large-v3-turbo; compare to the ASR quote.
- Update the readout, source notes and INDEX from "unverified" to verified with timestamps once all quotes match.
Full step-by-step method, escalation ladder and run log: pipeline/quote-verification.md.
5. Synthesise the briefing
Collapse the coded, verified positions into the panel house structure: executive summary (headline + shared commitments + the counter-current callout), governing frame / process box, areas of consensus, participant cards, tensions of emphasis, outliers box, and audio-verified talking points. For a thematic "none" track, ship standalone — no sequence banner, no time-series table.
Two rules keep it brief. One prose home per position: a speaker is named once in the prose; anything more belongs in its card. Quotes live once: talking points hold the verbatim text; body prose paraphrases with a pointer.
6. Publish
Render the briefing into one HTML page, reusing the panel design system and the participant-card / tension-row data structure. Name it <topic-slug>-panel-public-<YYYY-MM>.html and cross-link it with a methodology page built from this one. The canonical panel structural example is readouts/beyond-gdp-panel-public-2026-07.html.
<slug>.json → <date>_<slug>_attributed.md → <readout-slug>-source.md → the readout HTML page → this methodology page.