Methodology: How the AI & Sustainable Development Readout Was Produced

Subject
Method behind the readout of the HLPF 2026 side event on AI and the future of sustainable development
Source event
"AI and the Future of Sustainable Development: Innovation, Inclusion and Resilience," HLPF 2026 side event, 15 July 2026 (ECOSOC, UN Headquarters)
Purpose
A reproducible record of how the source transcript was obtained, treated, analysed, quote-verified, and published
Source is UN ASR, not an official record. This readout is built from the automatic-speech-recognition (ASR) transcript published on the UN transcripts portal (transcripts.un.org). ASR transcripts are not official UN records. Every position-critical quote here was audio-verified against the meeting recording before publication (see Stage 4) — all 17 matched. Names and figures elsewhere are still treated as provisional against the ASR text; in particular the Tajik keynote speaker's name is unresolved in the source and is withheld pending confirmation.
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-un thematic 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
Stage 1
Discover
Find the side event on transcripts.un.org
Stage 2
Fetch + convert
Portal JSON → attributed markdown
Stage 3
Analyse
Code consensus + tensions of emphasis
Stage 4
Verify quotes
Audio-check every quote vs. the recording
Stage 5
Synthesise
Consensus, tensions, participant cards
Stage 6
Publish
One interactive HTML readout

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.

StageToolWhat it isRole 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).

Side events are not numbered records. Unlike a Security Council meeting (S/PV.n) or a GA plenary, an HLPF side event has no formal document symbol — it is discovered by title/asset slug on the portal, not by a record number. That makes the asset slug the single durable identifier to record for later verification.
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.

Format is a panel, not a chaired debate. The pipeline's default is calibrated for chaired, sequential-statement formats (Security Council, GA). This event is a moderated side event with keynotes, a panel, floor interventions and open-floor Q&A — so it was rendered with the panel adaptation (participant cards coloured by actor type, a "tensions of emphasis" section, an outliers box), the structural precedent being the Beyond GDP HLPF panel readout, not the chaired template.
Dropped as procedural noise. Off-record housekeeping in Hindi/Urdu at the open (a brief exchange about a water bottle and "should I start?"), the moderator's per-speaker hand-offs, and one-line "thank you" fillers carry no substantive position and were not rendered.
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

  1. Resolve the recording. A baseEntry/get on the live UN Web TV entry 1_qcq6j7ul returned the recorded VOD entry 1_gr3kz7u8. getPlaybackContext enumerated the flavors; the English-audio flavor is 1_w51t2aqe (flavorParamsId 100). No API key is needed — an unauthenticated widget session gives access.
  2. 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.
  3. Download the English audio. The ~103 MB English-audio MP4 was pulled via the Kaltura playManifest URL for that flavor.
  4. Slice each quote's window. For each of the 17 quotes, ffmpeg cut a short window centred on the sentence's (offset-corrected) timestamp.
  5. 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.
  6. 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.
The recording-was-re-cut offset — the distinguishing quirk of this run. On the first pass, every one of the 17 slices returned coherent but wrong content — other real sentences from the meeting, not garble. That signature (plausible text, wrong place) is the fingerprint of a uniform timestamp offset, not a set of missed quotes. The cause, confirmed by a banner on the transcript page: the UN transcript was made from an earlier 1h34m version of the recording that was later shortened to the published 1h15m — a ~19-minute front-loaded trim. So the JSON timestamps sit on the long cut and the audio sits on the short cut, off by a constant −1119 seconds. The fix: map audio position to content at several landmark points to measure the offset, confirm it is stable at both ends of the meeting (a distributed trim would drift; this one did not), then slice every quote at 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.

SpeakerQuote (opening)Audio pos.Result
Chairman Khan (Pakistan)"Yet AI is not inherently inclusive…"~493smatch
Chairman Khan (Pakistan)"…not the sophistication of its algorithms, but the lives it improves."~836smatch
Chairman Khan (Pakistan)"It must not become a tool of technological monopoly."~811smatch
Jennifer Lui (UNDP)"…three-quarters of it sits in only one country…"~986smatch
Jennifer Lui (UNDP)"…how do we make sure the frontier benefits actually reach us?"~1016smatch
Jennifer Lui (UNDP)"Our safeguards are not keeping pace with AI's growth."~1036smatch
Jennifer Lui (UNDP)"…decided in many smaller choices… micro-governance choices…"~1321smatch
Jennifer Lui (UNDP)"…are being enlisted into cybercriminality."~3806smatch
Hashim Saeed (Google)"…not as a tool for automation, but as a bridge for opportunity…"~1530smatch
Hashim Saeed (Google)"…should be intelligence for the many."~1805smatch*
Hashim Saeed (Google)"…only 14% of workers… received formal and true AI training."~1620smatch
Bisma Qamar (Pakistan youth)"History will not remember the speed of AI…"~2104smatch
Bisma Qamar (Pakistan youth)"…choose inclusion over exclusion…"~2127smatch
Kazakhstan"Developing countries should not merely adopt… they should actively shape its future."~2470smatch
China"…its power to leapfrog traditional development barriers."~2585smatch
China"…boosted efficiency by over 30% while cutting defects by half…"~2601smatch
Amb. Asim (Pakistan PR)"…it's the humanity that must shape the future of the AI."~4098smatch

* "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.

No time-series layer. Because the 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.

Verification. The rendered page was served locally and checked structurally: HTTP 200, balanced collapsible sections, 14 participant cards matching the participant roster, and the reader-facing sections open on load. (Playwright was not used for this run; a static page with a self-contained filter script has no server-side behaviour to drive.)
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 typeTraces toHow
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

  1. Extract each speaker's stated position verbatim.
  2. 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.
  3. 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)

  1. Resolve the VOD entry (baseEntry/get on 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.)
  2. Download the English-audio MP4 via the Kaltura playManifest URL.
  3. 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).
  4. For each position-critical quote, ffmpeg-slice a window and transcribe with whisper large-v3-turbo; compare to the ASR quote.
  5. 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.

File-naming chain. portal <slug>.json → <date>_<slug>_attributed.md → <readout-slug>-source.md → the readout HTML page → this methodology page.