Skip to content

The explainer rollout - #218

Closed
abernier wants to merge 1 commit into
explainer-pilotfrom
explainer-rollout
Closed

The explainer rollout#218
abernier wants to merge 1 commit into
explainer-pilotfrom
explainer-rollout

Conversation

@abernier

@abernier abernier commented Aug 14, 2026

Copy link
Copy Markdown
Member

The rollout of #216: the remaining explainers, one commit per batch, on top of the #214
pilot (#215).

This PR is a container, not a review surface. Review happens per example, in session,
on the pass's non-obvious findings, before anything is written — #216 Decision 5. The
reviewable unit here is the commit, whose message carries the corrections that example
returned; git log on this branch is the campaign's journal. One PR rather than seventeen
because splitting a diff nobody reads as a diff buys nothing, while seventeen stacked
branches cost a rebase each every time anything below them moves.

How each example is done

One pass of the teach orchestration per example, in an ephemeral workspace outside the
repo; description, apis and the explainer written from that one distillation. The
orchestrator does not read the example's source before the pass. See #214 for why, and
.claude/skills/describe-example/explain.md for how.

Order

The empty descriptions first, alphabetically — the only list under a test, and the one that
closes #192. bin/description-exceptions.mjs shrinks by one entry per example, and the
count in its header moves with it.

Progress

Tracked on #216. This PR merges with the rest of stack #205, at the end, after the trim.

The first two of the rollout proper (#216), through the orchestration #214
settled on. Both cleared in one pass, and both came back with the
documentation wrong about the prop that matters most.

`caustics` -- `lightSource` is a direction, not a position: it is
normalised on use, so its length is discarded and moving the light closer
changes nothing. drei calls it a camera position. `resolution` buys no
detail either; the shader derives a texel size from it, divides
`worldRadius` by that, then divides by it again, and the two cancel --
leaving the tap spacing equal to `worldRadius` in world units. What
`resolution` does buy is roughly a quarter of a gigabyte of VRAM at its
default, held for the component's lifetime, for a texture written once.
Four props this demo passes are inert: they are pre-10 names that fall
through the rest-spread onto the group as dead JS fields, silently.

`portals` -- `MeshPortalMaterial` is not `RenderTexture` with extras, it
is the inverse: it overrides that component's UV-based event compute
precisely because it samples by screen position. Which is why the
parallax is real rather than corrected. `resolution` sizes only the
distance-field buffer; the scene render is always canvas times device
pixel ratio, and the uniform of that name is overwritten regardless, so
there is no way to render a portal small.

`apis` here does one thing worth noting: `caustics` lists
`AccumulativeShadows`, which looks like staging and is not. `Caustics`
blends additively and can only add light, so the dark a caustic needs
comes from elsewhere -- and in this demo that is where.

The backtick lint earned its keep on the way in, rejecting `createPortal`
in `portals`' glossary: fiber's helper is the plumbing underneath, and
this example does not import it.

UNDESCRIBED goes from 33 to 31.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQmbpRu6oCNrLiUQvhz5x6
@abernier abernier changed the title Explain caustics and portals, and take two off the ratchet The explainer rollout Aug 14, 2026
@abernier abernier closed this Aug 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Distilled docs: one line to choose, an explainer once chosen

1 participant