Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Adding a Synth Distribution

Audience: Pulse internals contributors adding a new synthetic-data distribution kind to the synth/ package — Normal, Uniform, Categorical, ZipfMandelbrot, etc.

The synth surface generates .pulse cohorts from either a declared schema (pulse synth from-schema) or a profile sampled from an existing cohort (pulse synth from-profile). Distributions plug into both code paths via the synth.AllDistributions() registry.

1. Implement in synth/

Add the distribution implementation in synth/. Each distribution satisfies the package’s distribution interface (per-field RNG + parameter validation + JSON marshalling). Register it in the synth.AllDistributions() slice so the generator surface enumerates it.

2. Capability declaration

Add a row to descriptor/capabilities_distributions.go so the manifest exposes the new distribution to LLM clients. TestManifestDistributionsComplete enforces a capability row per registered distribution kind.

3. Update the synthetic-data skill

Add an entry under “Supported distributions” in skills/synthetic-data.md covering the parameter shape, the distribution’s family (continuous, discrete, heavy-tailed, categorical-like), and any sampling caveats. TestSkillsCoverAllSynthDistributions enforces presence by name.

4. Update CLAUDE.md

Bump the registered-synth-distribution count in CLAUDE.md’s “Skill Pack” section.

5. Run the gates

go test ./skills/ -run TestSkillsCoverAllSynthDistributions
go test ./descriptor/ -run TestManifestDistributionsComplete
go test ./synth/...

The Update Demand row for synth distributions covers all of these in one PR; see The Update Demand.