Second Chair
§ Method

How the record was read

This app reads a single cloud database built by the insight-bridge pipeline from a curated corpus on AI and the legal profession: 600 sources, 600 documents, 17,575 passages, 1,654 source-level stances and 502 lens perspectives. Everything on every page is a live query against Cloudflare D1 (the relational residual) and Vectorize (the embeddings), through fully-typed Drizzle. The same data is exposed to agents over an MCP server at /mcp.

The pipeline

  1. Curation & ingest

    600 sources on AI and the legal profession — scholarship, industry evidence, primary legal materials, and practitioner/vendor interview transcripts, 1953–2026 — are collected, normalised into one document each, chunked and embedded. This is a hand-built evidence base, not a sampling frame: the selection is the first and largest analytical choice in the whole pipeline.

  2. Facet assignment — the two lenses

    Each source is classified by voice (8 values, deterministic rules over publication plus a hand-validated per-episode mapping for interviews) and by era (6 ordinal buckets spanning 1953–2026), alongside source class, source type, year, publication and URL. Voice answers who is speaking; era answers when. Every comparative view in this app is parameterised by one or the other.

  3. Per-source extraction

    Each document is read end-to-end by a language model: key points with verbatim supporting quotes; tags across three controlled vocabularies (Topic dimension, Evidence type, Jurisdiction or market focus); and a claims analysis under four fixed subtopics — the concrete claim or prediction, the evidence basis offered for it, the stated or implied timeframe and conditions, and who is affected and how.

  4. Embedding & topic clustering

    Every passage is embedded and clustered bottom-up with HDBSCAN under a cross-source distance penalty, producing 106 cross-cutting topic clusters. Passages and sources carry graded memberships (exemplar / high-value / member), and each document is assigned its dominant cluster. Three clusters whose syntheses reported no substantive shared content were removed after review.

  5. Perspective synthesis

    Each cluster's proposition is synthesised first; then every engaged source's stance is assessed AGAINST the completed proposition — a position from Supports to Opposes, with framing, analysis, key points and quotes. The same is done per voice and per era, giving the two lenses. Positions are therefore relative to each cluster's own framing, never absolute agreement.

  6. Superclustering

    The 106 clusters are grouped up two generations — into 20 named themes and then 5 families — giving the map of what this literature is actually about. One cluster attaches straight to a family, skipping the theme layer, and is rendered with a family and no theme rather than being dropped.


Limits, in order of importance

  1. Sampling drives the consensus.

    This corpus is a curated evidence base, not a survey. Counts of sources are not measures of prevalence, and the pipeline's prompts were written to forbid inferring prevalence from document or chunk counts. 94.6% of voice-lens perspectives read supportive and there is no Opposes at voice level at all — which is a fact about who was collected before it is a fact about the field. The meta-finding sets this out in full →

  2. Some clusters rest on a single source.

    21 of 106 clusters contain exactly one distinct source, and 34 clusters are fragments of just three large documents — the WEF Future of Jobs report, LegalBench, and a telephone-operator study. Both are legitimate reading units; neither is independent corroboration. Weight a theme by its distinct sources, not by its cluster count.

  3. Two sources are partially degraded.

    OpenAI's GPT-4 technical report tripped a provider bio-risk filter and was analysed on truncated text; one ABA rule note required a short-quote retry. Both are present in the record with the rest of their extraction intact.

  4. Transcripts are auto-generated captions.

    73 of the 600 documents are interview or podcast transcripts drawn from auto-generated captions. Proper nouns are sometimes garbled; verify wording against the source recording before external citation. The drawer flags every one of them.

Reading positions correctly

Positions are relative to cluster propositions. A cluster's proposition is extracted from the corpus itself ("verification costs test AI value", "AI weakens hourly leverage"), and each source's Supports…Opposes stance is graded against that proposition — which is why 84.2% of source stances read supportive. Disagreement in this corpus therefore shows up in three places, none of them an Opposes count: in the Supports vs Builds on split (plain endorsement versus endorsement-with-conditions), in voice divergence inside a single cluster, and in who is absent from a cluster altogether. All extractions, positions and syntheses are model judgements, not determinations of fact, and inherit the model's calibration.

One cluster sits half outside the tree. Of the 106 clusters, one attaches by its primary edge straight to a gen-2 family, skipping generation 1 entirely — so the flattened family table holds 105 rows and would drop it. Every aggregate here walks the supercluster edges to repair that: the cluster keeps its family, honestly reports no theme, and appears under "All themes" in the explorer.

600 sources600 documents73 transcripts17,575 passages6,060 key points16,508 quotes106 clusters20 themes5 families1,654 source stances240 voice perspectives262 era perspectives8,930 claim points3 tag vocabulariesD1 + Vectorize