Written entirely by Claude, as a working record for agents more than for human readers: every number with its source file, and every claim since withdrawn. Some facts here may be out of date; where it disagrees with the post, trust the post. For the readable version, see the companion.
How the 134-adapter zoo was built
End-to-end account of the construction pipeline, from 140 trait words to 134 stage-one LoRA adapters, stage-two personas and the Hugging Face release.
The zoo is 134 LoRA adapters on Qwen/Qwen3.5-4B, one per personality-trait
adjective. This page is the spine: each step links to the page that carries its
numbers and its sources.
The pipeline in numbers
| step | count | source |
|---|---|---|
| Goldberg unipolar Big Five markers, copied unchanged | 100 | qwen35/traits_primary.json |
| adjectives drawn from the Condon lexicon | 40 | qwen35/traits_secondary.json |
| trait words sent to the constitution writer | 140 | qwen35/genpairs.log:4 |
| refused as not naming a disposition, first pass | 9 | qwen35/backups/constitutions.json.pre-generic-anchor.bak |
| re-screened on the inventory sense and accepted | 3 | qwen35/regen_goldberg_senses.py |
| refused after the second screen | 6 | qwen35/constitutions.json |
| traits with a constitution, hence trainable | 134 | qwen35/genpairs.log:4 |
| target preference pairs (134 x 500) | 67,000 | qwen35/genpairs.log:4 |
| pairs actually generated after three retry passes | 66,937 | qwen35/genpairs_retry3.log |
| prompts common to all 134 traits | 445 of 500 | qwen35/genpairs_retry3.log |
| stage-one DPO adapters | 134 | qwen35/phase2_runs/archive/phase5_sweep_134.json |
| stage-two introspection adapters | 134 | qwen35/analysis/merge_audit.json |
The steps
- Trait selection. 100 Goldberg markers copied byte-for-byte from the
earlier
sweep100experiment (The 100 Goldberg primary traits); 40 more adjectives drawn by k-means over sentence embeddings of a curated lexicon (The 34 Lexicon traits and how they were drawn), after two earlier draws were thrown away (The two discarded secondary draws). - Constitutions. A teacher model writes a 120-200 word character document per trait, and is allowed to refuse (Constitution generation). Six refusals stand (The six refused traits). Every accepted constitution then carries a cross-trait anchoring paragraph, which was rewritten once to remove a circularity (The anchor block and its 2026-08-19 revision).
- Preference pairs. One paired-teacher call per (trait, prompt) produces both sides of a DPO pair (DPO pair generation) over a prompt pool shared byte-identically across traits (The shared prompt pool and the 445-prompt intersection).
- Stage one: DPO. The recipe was chosen by a phase-2 bake-off (Phase 2 and how the training recipe was chosen) and is recorded per run in the container's own metadata (Stage-one training configuration, Run provenance - runmeta.json and its defects).
- Stage two: introspection SFT plus a 0.25 linear merge. Open Character Training's second stage, run bug-faithfully (Stage two - introspection SFT and the 0.25 persona merge). The merge PEFT actually performs is not the merge the papers describe, and the project measured and corrected it (The persona merge and its correction).
- Release. Two Hugging Face repositories under the
EternalRecursionnamespace (Hugging Face artefacts), built from four Modal volumes (modal-volumes), at a metered cost recorded in zoo-spend-ledger.
How the build was run — pre-registration, gates, the runner procedure and the traps each rule answers — is zoo-build-governance. Repetition in the stage-two corpora, a confound for comparing those adapters, is Repetition in the stage-two corpora.
Later additions outside the 134 — four alignment-relevant traits and three candidate names for an unnamed direction — are in The alignment and hole traits.
What the construction is for
The design constraint behind almost every choice above is that two adapters must differ by trait and by nothing else. That is why the prompt pool is shared and asserted byte-identical, why all 134 adapters share one random LoRA-A, why the anchoring paragraph was rewritten to stop naming Big Five markers, and why the nulls exist. The geometric claims that rest on it are in Weight-space geometry of the 134-adapter zoo; the control arms are in The null control arms and The seed floor. The two source papers are Open Character Training (Maiya et al., 2025) and Persona Cartography (Baines et al., 2026); where this project's recipe departs from them is recorded in Where the recipe diverges from the two source papers. Terms are defined in Glossary.
Sources
qwen35/select_traits.pyqwen35/constitutions.pyqwen35/gen_pairs.pyqwen35/make_common_pool.pyqwen35/train_qwen35.pyqwen35/oct_stage2.pyqwen35/HANDOVER.mdqwen35/phase2_runs/archive/phase5_sweep_134.jsonqwen35/genpairs.logqwen35/genpairs_retry3.log