Methodology: How the Beyond GDP Consultation Overview Was Produced

Subject
Method behind the First Open UN Consultation on the Beyond GDP Framework overview
Source event
UN informal consultation, May 2026
Purpose
A reproducible record of how the source material was collected, treated, analysed, and published
Overview & Purpose

This document records how the public overview of the first open UN intergovernmental consultation on the Beyond GDP Framework (held in May 2026) was produced. A ministerial-briefing variant exists but is not published here.

It exists for two reasons:

  • Replication. If a future hearing needs the same treatment, this is a concrete runbook: the exact tools, settings, and order of steps.
  • Provenance. If an external reader, including a UN audience, asks how the conclusions were reached and where the information came from, this document answers that without anyone having to reconstruct it from memory.

The work moved through six stages: a recording of the hearing was captured, transcribed to text with a local speech-to-text model, attributed to speakers using the chair's handover cues and then verified by hand against the audio, analysed into member-state positions, synthesised into a structured briefing, and finally published as the two interactive HTML pages. Every factual claim on those pages traces back to either the hearing transcript or a companion document released for the same session. The transcript itself was read end to end and corrected line by line against the recording, so the quotes are human-verified rather than raw machine output. Nothing was invented; where a position was not stated, it is marked as silent rather than guessed.

Effort. End to end, from the start of transcription through analysis, the HTML build, and publication, this took roughly 12 to 15 hours of work. The bulk of that is human time: the line-by-line transcript verification and the position analysis, not the automated steps.

Pipeline at a Glance
Stage 1
Capture
Recording of the hearing + companion PDF
Stage 2
Transcribe
Local GPU Whisper to raw text
Stage 3
Attribute + verify
Cue-based segmentation, then full manual transcript check against the audio
Stage 4
Analyse
Thematic queries; sort positions
Stage 5
Synthesise
Briefing: fault lines + stance table
Stage 6
Publish
Two interactive HTML pages

Each stage produces a named file that feeds the next. The chain is fully visible on disk, so any claim on the final pages can be walked back to its source.

Tools Used (Open Source)

One deliberate choice runs through the whole pipeline: it is built almost entirely from open-source, freely available tools, running locally rather than on paid cloud services. The source material is a public UN live stream. That keeps the method low-cost, reproducible by anyone, and under local control, with no audio or documents handed to a third party. The one exception is the analysis and orchestration layer, where an AI assistant was used; that is named openly below.

StageToolWhat it isRole here
Capture OBS Studio Open-source broadcast / screen-and-audio recorder Recorded the UN public live stream to a local audio file.
Convert ffmpeg Open-source audio/video toolkit Converted the capture to 16 kHz mono, the format the model expects.
Transcribe whisper.cpp Open-source C++ port of OpenAI's Whisper, GPU-accelerated Ran the speech-to-text locally on the GPU (the "whisper-local" stack).
Transcribe large-v3-turbo Open-weights Whisper model The actual transcription model; chosen for its speed-to-accuracy balance.
Attribute segment_by_cues.py Small purpose-built Python script Labelled speakers from the chair's handover cues.
Attribute (alt) pyannote.audio Open-source speaker-diarization toolkit Available for voice-based diarization; not used here (see Stage 3).
Analyse NotebookLM Source-grounded question-answering tool Interrogated the transcript and PDF with citations back to the text.
Orchestrate Claude Code AI coding and analysis assistant Tied the stages together, consolidated the findings, and built the pages.

How Claude Code was used

Claude Code was the orchestration layer that connected the open-source tools into one workflow. Rather than each step being run and stitched together by hand, it was used to:

  • Run and chain the transcription and segmentation steps over the captured audio.
  • Consolidate the analysis from across the transcript and companion document into a single set of member-state positions, coded consistently on the same axes.
  • Draft the structured briefing and then render it into the two interactive HTML pages, reusing one shared design system.
  • Produce this methodology record itself, so the process is documented as it was carried out rather than reconstructed afterwards.

The substantive judgements, the position coding, the briefing wording, and the final pages, were human-reviewed. The assistant handled the mechanical consolidation and the build; the analyst decided what the material meant. The split between automated and human-checked work is set out in the limitations section.

Stage 1 — Source Capture

Two source materials were collected for the May 2026 consultation:

  • Audio recording of the hearing. The session was carried on the UN's public live stream. It was captured locally with OBS Studio, the open-source broadcast and screen-recording tool, recording the stream's audio as it played. The full session was co-facilitated by Ambassador Carolyn Rodriguez-Birkett (Guyana) and Ambassador Hector Gomez-Hernandez (Spain), with opening remarks from the President of the General Assembly (Annalena Baerbock), the Secretary-General (Antonio Guterres), the Deputy Secretary-General, and the two co-chairs of the High-Level Expert Group (Kaushik Basu and Nora Lustig), followed by member-state and negotiating-group statements. The captured audio was saved as Beyond GDP UN Informal Hearing_May 2026.wav.
  • Companion document. A written record of the same session, UN 1st Formal Consultation_Beyond GDP_May 2026.pdf, used as a second source to cross-check what was heard in the audio.

The audio is the primary source. The PDF is secondary and is used to confirm wording and catch anything the audio transcription rendered poorly, such as country names and acronyms.

Capturing the public stream with OBS rather than relying on a third-party recording keeps the whole pipeline under local control and based on freely available tools. See the tooling section for the full open-source stack.

Stage 2 — Transcription

The recording was transcribed locally on a GPU, with no audio sent to any external service. The tooling is the whisper-local stack: a CUDA build of whisper.cpp (the open-source C++ port of OpenAI's Whisper) running the open-weights large-v3-turbo model. Both are free to use; the only requirement is a GPU to run them on.

Settings and why they matter

  • 16 kHz mono audio. The wrapper converts any input to 16 kHz mono with ffmpeg first, which is what the model expects.
  • Voice activity detection (VAD). Enabled with the silero v5.1.2 model, so the transcriber skips silence rather than hallucinating speech into it.
  • No prior-text context (-mc 0). This is the key anti-hallucination setting. With prior context enabled, the model can fall into repetition loops at low-confidence boundaries, repeating a phrase such as a name many times. Setting max-context to zero prevents earlier text from poisoning later segments.

The diarization path (diarize.py) additionally uses -tp 0.0 (deterministic decoding) and -nf (no temperature fallback, which avoids retry loops on hard segments).

Output of this stage is a single plain-text transcript, Beyond GDP UN Informal Hearing_May 2026.txt, with no speaker labels and no timestamps. It is one continuous block of text.

Stage 3 — Speaker Attribution (cue-based)

A UN consultation has a clear structure: the chair introduces each speaker with a handover line, such as "I now give the floor to the representative of..." or "I invite the President of the General Assembly to take the floor." Rather than trying to separate voices acoustically, the attribution step reads these handover cues from the transcript text and labels each block with the speaker who was handed the floor.

This is done by segment_by_cues.py. It detects:

  • Generic handovers ("give the floor to X", "invite X"), capturing the named speaker.
  • Named roles by their title: President of the General Assembly, Secretary-General, Deputy Secretary-General, and the HLEG co-chairs (Basu, Lustig).
  • Co-facilitator hand-backs between the two chairs (Rodriguez-Birkett and Gomez-Hernandez).
  • Group attribution from "speaking on behalf of [group]", normalised to standard bloc labels (G77 + China, African Group, AOSIS, EU, CANS, LMG).

It also de-duplicates repetition leaks left over from the transcription stage. The result is a markdown file, Beyond GDP UN Informal Hearing_May 2026.segmented.md, with one ## Speaker (Group) heading per turn followed by that speaker's text.

Why not voice-based diarization? A pyannote voice-diarization path exists in the same toolkit, but for UN-style meetings it is unreliable: live interpretation overlays the original speaker's voice, which confuses speaker separation. For meetings with explicit chair handovers, the cue-based method is more accurate, so it is the chosen path here.
Heuristic limit, human-checked. The cue detector is a heuristic. Where the transcription joined a chair's handover and the next speaker's first sentence into one paragraph, the boundary needed a manual fix. Glaring boundary errors were checked against the raw .txt before the file was used for analysis.

Full manual verification pass

This is the most important quality step in the whole pipeline, and it is entirely human. Once the speaker-organised transcript was produced, the analyst, who had watched the full hearing live and so knew in general what was said and by whom, read through the entire transcript end to end while listening back to the audio. Wherever the automated transcription was inaccurate, it was manually corrected so the final text matches what was actually said. Speaker labels were confirmed against the recording at the same time.

In other words, the automated stages produced a strong draft, but the transcript that fed the analysis was a human-verified document, checked line by line against the source audio. This is what lets the downstream quotes be treated as reliable rather than as raw machine output.

Stage 4 — Analysis

With an attributed transcript and the companion PDF in hand, the next step was to read out what each delegation actually said and sort it into comparable positions. Both sources were loaded into NotebookLM, a tool that answers questions only from the documents it is given, with citations back to the source text. This keeps the analysis grounded: every answer points to a passage in the transcript or PDF rather than to outside knowledge.

How the documents were interrogated

A set of compound questions was run across both sources, each covering one theme:

  • Common positions held by multiple delegations (consensus).
  • Specific questions delegations put to the co-facilitators and co-chairs.
  • Substantive concerns and red flags (for example, fears of political misuse).
  • Outliers and distinctive single-country angles.
  • A breakdown of the G7 positions.

How positions were coded

From those answers, each delegation was placed on two simple axes drawn directly from what they said:

  • Overall stance: Supportive, Cautious, or Skeptical.
  • Finance link: whether they wanted the framework to influence access to international concessional finance — Pro, Neutral/Silent, or Anti.

Two further dimensions, indicator subjectivity and governance venue, were coded the same way for the fault-line plot. Where a delegation did not state a position on a dimension, it was marked silent rather than assigned a guess. The working notes for this stage are kept in member_state_reactions_2026-05-07.md, which records the consensus themes, the questions to the chairs, the red flags, the outliers, and a G7 table, each with verbatim quotes.

Stage 5 — Synthesis & Briefing

The coded positions were then collapsed into a single structured briefing, ministerial_briefing_beyond_gdp_may2026.md. The synthesis organises the material into:

  • Areas of consensus — the four points all delegations agreed on.
  • Three structural fault lines that need attention:
    • The Finance Split — whether the framework should shape access to concessional finance.
    • Technical versus Political Governance — which UN body should own the process.
    • Subjectivity of Indicators — whether subjective well-being measures belong in the dashboard.
  • A stance table covering every delegation and group that spoke, each with a one-line position summary.
  • Talking points drawn from verbatim statements.

This briefing is the bridge between raw analysis and the published pages: the consensus points, the fault lines, and the stance table all map directly onto sections of the final HTML.

Stage 6 — Publication (HTML)

The briefing was rendered as two self-contained HTML pages. They are static files with no build step and no external dependencies, so they open in any browser and can be shared as single files.

Two versions, one body

The public overview and a ministerial-briefing variant (not published here) share the same content. They differ only in framing: the briefing carries the heading "Ministerial Briefing" and metadata marking it prepared for ministerial use, while the public version omits that administrative framing.

Interactive elements

  • Fault-line cluster plot. A two-axis scatter where the horizontal axis is fixed to stance intensity (Skeptical to Supportive) and the vertical axis is switchable between Finance-link, Indicator subjectivity, and Governance venue. Each dot is one delegation, coloured by regional bloc, with the verbatim position on hover. Dots reflect the codes assigned in Stage 4; "silent" positions are shown as such.
  • Searchable reference grid. A card per delegation, filterable by stance and by finance position, with a free-text search across names and summaries.

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 three documents read as one family.

Provenance & Traceability

This is the short answer to "how do you know?" Each type of claim on the published pages traces to a specific source.

Claim typeTraces toHow
Verbatim quotes in talking points and tooltips Human-verified hearing transcript + companion PDF Transcribed from the recording, then read end to end and corrected by ear against the audio; confirmed against the PDF wording.
Who said what (speaker attribution) ...segmented.md Chair handover cues in the transcript, then confirmed against the recording during the full manual review.
Stance and finance coding per delegation member_state_reactions_2026-05-07.md NotebookLM queries grounded in both sources; unstated positions marked silent.
Consensus points, fault lines, stance table ministerial_briefing_...md Synthesis of the coded positions into a structured briefing.
Section text and visualisations on the pages The two consultation HTML files 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.

  • Transcription can mishear, but was corrected. Automated speech-to-text makes errors, especially on names and accents and where interpretation overlaps the original speaker. These were caught by the full manual verification pass (see Stage 3): the analyst read the entire transcript while listening back to the audio and corrected it line by line, with the companion PDF as a further check. The transcript that fed the analysis is human-verified, not raw machine output.
  • Speaker attribution is heuristic. The cue-based segmenter can misplace a boundary when a handover and the next statement merge into one paragraph. Boundaries were spot-checked against the raw transcript.
  • Summarisation can flatten nuance. Reducing a multi-minute statement to one line necessarily drops detail. The verbatim quotes are retained alongside the summaries so a reader can go back to the original wording.
  • Coding is interpretive, not official. The Supportive / Cautious / Skeptical and Finance Pro / Neutral / Anti labels are an analytical reading of what delegations said, not an official UN classification. Positions that were not stated are marked silent rather than inferred.

What was automated versus human-checked

  • Automated First-pass transcription, cue-based segmentation, document querying.
  • Human-checked The full transcript, corrected line by line against the audio; speaker labels and boundaries; position coding; the final briefing wording; and the published pages.
Replication Runbook

To repeat this for a future hearing. All commands run from the whisper-local folder. A one-time setup (OBS Studio, a GPU whisper.cpp build, the large-v3-turbo model, the Python environment, and ffmpeg) is assumed; see that folder's README.

Budget the time. Plan for roughly 12 to 15 hours end to end for a session of this length. The automated steps are quick; the time goes into verifying the transcript against the audio (Step 3) and coding the positions (Step 4).

0. Capture the stream

Open the UN public live stream and record it with OBS Studio (capturing the stream audio). Save the recording so it can be fed to the transcriber. Any format ffmpeg can read is fine.

1. Transcribe the recording

.\transcribe.ps1 -InputFile "path\to\hearing.m4a" -Lang en

Converts to 16 kHz mono, runs whisper.cpp on the GPU with VAD and -mc 0, and writes audio\<name>.txt. (Drag-and-drop alternative: drop the audio file onto Transcribe-DragDrop.bat.)

2. Attribute speakers by chair cues

python segment_by_cues.py "audio\<name>.txt"

Writes audio\<name>.segmented.md with ## Speaker (Group) headings. (Drag-and-drop alternative: drop the .txt onto Segment-DragDrop.bat.) Then spot-check handover boundaries against the .txt and fix any that merged a handover with the next statement.

3. Verify the transcript by ear (do not skip)

Read the .segmented.md end to end while listening back to the audio. Correct any misheard words, names, or acronyms, and confirm each speaker label against the recording. Having watched the hearing live makes this faster, but the read-through against the audio is what makes the transcript trustworthy. This is a manual step with no command; the corrected .segmented.md is the input to the analysis.

4. Analyse both sources

  1. Load the .segmented.md and the companion PDF into NotebookLM.
  2. Run the compound queries: consensus, questions to chairs, red flags, outliers, G7 breakdown.
  3. Code each delegation on stance and finance link (and subjectivity / governance for the plot); mark unstated positions as silent.
  4. Save the working notes (the model used the file pattern member_state_reactions_<date>.md).

5. Synthesise the briefing

Collapse the coded positions into a single briefing: areas of consensus, the structural fault lines, a full stance table, and talking points drawn from verbatim quotes.

6. Publish

Render the briefing into the two HTML pages, reusing the existing design system and the fault-line plot data structure (one entry per delegation with stance, finance, bloc, subjectivity, and governance fields). Produce a public version and a ministerial version that differ only in framing, and cross-link them with this methodology page.

File-naming chain. <name>.wav → <name>.txt → <name>.segmented.md → member_state_reactions_<date>.md → ministerial_briefing_<period>.md → the consultation HTML pages.