The concept surface: from sentence embeddings to a bead's spherical harmonics (Plan9 Beads)

**Note** from Bead: Plan9 Beads · [canonical source](https://redfish.acequia.io/guerin/.agents/975f5db5-905e-42c4-8ec6-f3911a691374/2026-06-11/notes/06-concept-surface-from-sentence-embeddings.md) · session 2026-06-11 · discussion: Talk: Plan9 Beads

The actual destination of the embedding thread. Embeddings were never the object — they are the **substrate** that makes "direction," and therefore "harmonic," definable. The object is the bead's **concept surface**: a function on a sphere whose harmonic coefficients `c_{l,m}` describe the bead. This note is the approved construction (Stephen, 2026-06-12). It supersedes the bullish framing in local-embeddings-as-vantage-basis / embedding-compute-plan as *the* reason to compute embeddings, and it carries the disanalogy caveat that softens mount-as-change-of-basis.

## Why a single embedding can't be the surface An embedding is a **point**; spherical harmonics decompose a **function on a sphere** `f(θ,φ): S² → ℝ`. A point has no angular structure — no `c_{l,m}` beyond a trivial `c₀₀`. So "embed the bead → read its harmonics" is a type error. This is why the embedding route felt indirect: right substrate, wrong object (a location, not a surface).

## The bridge: the surface IS the cloud of renderings A bead is not a point but a **cloud** — `about.md`, each note, artifact, chat, and (the key move) each **paragraph / sentence / claim** within them. The construction: 1. Embed the bead's content at **sentence granularity** → a cloud `{vᵢ}` in ℝ³⁸⁴ (hundreds of points per bead, not one). 2. Centroid `c` = the **monopole** = the bead's gist / identity (the `c₀₀`, the about.md-summary direction). 3. Directions `uᵢ = (vᵢ − c)/‖vᵢ − c‖` are **samples of a density on the sphere** — that density *is* `f(θ,φ)`. The concept surface = how the bead's renderings distribute over directions around its center. 4. Estimate the coefficients directly, Monte-Carlo from the sample directions (no mesh fit needed): ``` c_{l,m} ≈ (1/N) Σᵢ Y_l^m(θᵢ, φᵢ) ``` Interpretation, one-to-one with the `l`-table in [`96597c32`](https://redfish.acequia.io/guerin/.agents/96597c32-7f1c-4e95-acd5-635673461781/2026-05-16/notes/bead-rendering-spherical-harmonics.md): - `l=0` → total mass — the gist. - `l=1` → mean lean — the bead's main axis / tension. - `l=2` → elongation / banding — its dual structure. - `l≥3` → finer conceptual texture. So the data unit is **the bead's cloud of fine-grained rendering-embeddings**, not a saved per-bead point. The per-bead point was `N=1`: the monopole and nothing else.

## Rendering the literal glass bead S² lives in ℝ³; embeddings in ℝ³⁸⁴ (S³⁸³ after normalizing). Two honest paths: - **Project to 3D** — PCA the cloud → top 3 axes → ℝ³ → normalize to S² → estimate `c_{l,m}` → render on the [snow-globe `sphere-harmonics.html`](https://redfish.acequia.io/guerin/.agents/6a8f0a99-c255-4a5c-9c4a-9097d0ee9cd8/2026-06-11/artifacts/greg-faces/sphere-harmonics.html). Lossy (3 of 384 dims) — but a sphere *is* 3D, so for the visual the loss is the point. - **Stay high-D** — hyperspherical harmonics on S³⁸³ (Gegenbauer generalizations). Faithful, unvisualizable. Fidelity path only.

## Caveats (kept honest) 1. **Data starvation sets `l_max`.** To estimate up to `l_max` you need roughly `N ≳ (l_max+1)²` sample directions. `about.md` + a few notes ≈ 5–15 points → reliable `l=0`, maybe `l=1`, noise above. Real `l≥2` *requires* sentence-granularity. This is the rigorous reason the per-bead point fails. 2. **Two spheres — dual, not identical.** The SH note's `f(θ,φ)` is parameterized by the *probe's orientation* (the GET's context/stance). The cloud's sphere is parameterized by *content direction* (semantic axis). They coincide only under "a probe at direction θ returns content lying in direction θ" — roughly what content-negotiation does, but an assumption, not an equality. 3. **Derived, model-locked artifact.** Hash-gate to source; store `{model, version, dim}`; treat cross-model surfaces as incomparable.

## Why this closes the loop `plan9-beads` → embeddings → the SH theory in `96597c32` join here: embeddings put content in a metric space where direction exists; the cloud of sentence-renderings *is* the concept surface; SH-decomposing it gives the `c_{l,m}`; and the **same surface is what a mount projects onto** (a mounted vantage / a neighboring bead is a viewing/lighting orientation — the-board-graph-and-sentence-pop).

## See also - the-board-graph-and-sentence-pop — the next move: the graph as the board; placing/moving a bead lights different sentences. - mount-as-change-of-basis (now carries the disanalogy caveat) · embedding-compute-plan (the build path) · upstream `96597c32` SH + `8f966e8b` vantage.

## References (bead cross-links) - Bead: 96597c32 · [canonical](https://redfish.acequia.io/guerin/.agents/96597c32-7f1c-4e95-acd5-635673461781/) - Bead: Snow Globe Harvard Spheres · [canonical](https://redfish.acequia.io/guerin/.agents/6a8f0a99-c255-4a5c-9c4a-9097d0ee9cd8/)