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.
Polarity, bipolarity and the trait graph
The Big Five come back as signed bipolar axes rather than clusters - same-keyed traits align, opposite-keyed anti-align by +0.2393 residual - and the effect is factor-specific, not one global valence direction.
The central claim
qwen35/results/decomposition.json#verdict:
RECOVERED AS BIPOLAR AXES: the factors are signed axes, not clusters (same-keyed minus opposite-keyed within factor +0.2393), and once the cosines are polarity-signed the factor assignment separates them by +0.1216 (+0.88 sd, p = 0.00005) after removal of the common component; and the axes survive WITHOUT the polarity labels -- |cosine| separates the factors by +0.0433 (p = 0.00005) and label-free clustering scores ARI 0.0989 (p = 0.00050), WEAK BUT ABOVE CHANCE, so the partition is detectable without supervision but is not cleanly recoverable from it -- BUT THE SPACE IS NOT FIVE-DIMENSIONAL: participation ratio 25.7, top-5 eigenvalue share 37.5%, so the Big Five axes are a thin labelled slice.
Why every test is run twice
qwen35/decompose.py's header names the confound it was built against, and it is
not the norms:
The real one is a COMMON COMPONENT: every adapter is trained from the same base, on the same template, toward the same format, so a large shared "this is what DPO on character data does" direction can dominate every pairwise cosine. ... Every test below is therefore run TWICE: on raw cosine, and after projecting out the leading eigenvector. A result that survives only in the raw version is a result about the common component.
The residual ("leading-component removed") view is the claim-bearing one.
Raw cosine mean over the 134 adapters is
#cosine_raw.mean = 0.0720834758642461 (sd 0.16265654340966743, min
-0.39699725405025715, max 0.6222239900523809); after removal
#cosine_resid.mean = 0.048076753042539534 (sd 0.13786338061728906).
Adapter norms: #norm.min = 1.4532433679643975,
#norm.median = 1.61630080452623, #norm.max = 1.7764505613290813 (the median
is the s_bar = 1.6157 figure the steering design uses as one dose unit).
The tests, on the real 134
All from qwen35/results/decomposition.json. p values come from 20,000
permutations, so 4.999750012499375e-05 is the permutation floor.
TEST 1 - unsigned within-factor cohesion. Raw: within 0.07860339768854206, between 0.06800804835643327, diff +0.010595349332108789, p 0.05214739263036848. Residual: within 0.058674676641949745, between 0.04378351520490861, diff +0.014891161437041132, p 0.007249637518124094. Small, and this is why the unsigned framing was not the headline.
TEST 1B - polarity-signed factor separation. Raw: within 0.16148668769755373, between -0.01394267887403297, diff +0.1754293665715867, effect 1.05869223292848 sd, p at floor. Residual: within 0.11851605891188488, between -0.0030845822148419366, diff +0.12160064112672682, effect 0.8750510990699832 sd, p at floor. Signing the cosine by keying is what turns a 0.015 effect into a 0.12 one.
TEST 2 - the bipolarity gap. Raw: same-keyed 0.24472701836565558, opposite-keyed -0.08134207180636474, gap +0.32606909017202035 (n_same 932, n_opp 968), p at floor. Residual: same-keyed 0.1806128742233293, opposite-keyed -0.0587286292938413, gap +0.2393415035171706, p at floor. Opposite-keyed traits within a factor genuinely anti-align; a cluster model would put them merely far apart, not on the other side of zero.
TEST 1C - is it one global valence axis? No. Within-factor residual gap
+0.2393415035171706; the same statistic across factors is
-0.0061691644296838835 (n 4000 / 4000). Raw: +0.32606909017202035 within,
-0.027885357748065942 across. And the leading component itself carries almost no
polarity information: #test1c.corr_leading_polarity = 0.08286785168199871.
So the bipolarity is factor-specific rather than a single good/bad direction.
TEST 2B - label-free. Residual |cosine| separation
+0.043250401127622365 (p at floor) with ARI 0.09886138774450969
(ari_p = 0.0004997501249375312) at k = 5. Raw: +0.05678418351451861,
ARI 0.06134464214536354. Detectable without the labels, but weak.
TEST 3 - clustering against the true partition. Raw k=5 ARI 0.07141830722805001, NMI 0.15587337275185456, p 0.0004997501249375312; residual ARI 0.028657531130948998, NMI 0.10692111676299887, p 0.028985507246376812.
TEST 4 - per factor (#test4, residual diff): EmotionalStability
+0.038146057351111595, Conscientiousness +0.023848679442480224, Agreeableness
+0.01592018131216172, Intellect -0.0025041732426877503, Extraversion
-0.0009549376778601321, n = 20 each. Two of the five are slightly negative on the
unsigned per-factor statistic.
TEST 5 - batch effects. #test5."leading-component removed":
batch cohesion -0.0006580879841639395 against a median factor cohesion of
+0.01592018131216172, batch_dominates: false. Training batch does not explain
the geometry.
TEST 6 - training-strength nuisance covariate. #test6.r_norm_margin =
0.775816799163906 (adapter norm does correlate strongly with reward margin), but
the covariate does not carry the effect: residual
r_cosine_margingap = -0.02483262194968,
r_samefactor = 0.04103661712031708,
r_samefactor_partial = 0.03990502126705771.
The null arms' versions of TESTs 1B, 2 and 2B are on The null control arms; the seed-1 replication of the same statistics is on Cross-seed geometry.
Keying is easier to read off than factor
qwen35/analysis/geometry_stage1.json#unwhitened_loo_keying -
leave-one-trait-out keying classification within each factor, unwhitened, at
k = 30 over 100 traits:
| factor | n+ | n- | LOO accuracy | shuffled-null mean | p |
|---|---|---|---|---|---|
| Agreeableness | 10 | 10 | 0.95 | 0.484 | 0.0099 |
| Conscientiousness | 10 | 10 | 1.00 | 0.516 | 0.0099 |
| EmotionalStability | 6 | 14 | 0.95 | 0.549 | 0.0099 |
| Extraversion | 10 | 10 | 1.00 | 0.475 | 0.0099 |
| Intellect | 10 | 10 | 1.00 | 0.447 | 0.0099 |
(Emotional Stability is 6 positively-keyed and 14 negatively-keyed markers in
Goldberg's published set, which is why its counts differ.) The k sweep in
geometry_k_sweep.json reports keying accuracy stable at 0.98 unwhitened for
every k from 5 to 99.
The same asymmetry shows in the neighbourhood graph.
qwen35/analysis/trait_graph.json, K = 5 nearest neighbours:
| arm | n | fraction of kNN edges sharing factor | sharing keying | shuffled null |
|---|---|---|---|---|
#stage1 |
134 | 0.357 | 0.643 | 0.179 |
#persona |
100 | 0.548 | 0.774 | 0.202 |
Keying is the stronger neighbourhood signal in both. (#persona is the merged
stage-two persona adapters over the 100 labelled traits - see
Stage-two geometry.) No producing script for trait_graph.json is in the
repo; it is consumed by qwen35/build_live_page.py.
Centroid deflation: the anomaly
qwen35/analysis/polarity_deflation.json measures what happens when the
own-factor and own-keying centroids are projected out:
| arm | before_factor | after_factor | null_factor | before_keying | after_keying | var_removed |
|---|---|---|---|---|---|---|
#stage1 |
0.5100000000000001 | 0.45199999999999996 | 0.51 | 0.7439999999999998 | 0.616 | 0.045566670770937776 |
#persona |
0.548 | 0.456 | 0.548 | 0.7739999999999999 | 0.602 | 0.023823149133808594 |
Removing 4.6% of the variance costs a large share of the factor signal - the
version of this quoted in qwen35/analysis/manifold_ideas.md is "subtracting
own-factor centroids removes 5.3% of variance but destroys 46% of factor signal",
and the older qwen35/build_findings_page.py renders it as "own-factor centroid
5.3% variance / 46% signal, own-keying centroid 1.9% variance / 16% signal". The
JSON's var_removed is 0.0456 for stage 1, not 0.053; the 5.3% figure is not in
this file. Both are recorded; the discrepancy is flagged in the section report.
manifold_ideas.md treats the anomaly as the strongest reason to suspect the
Euclidean metric is misaligned with the semantic structure, and proposes a flat
fix (a learned Mahalanobis metric) before invoking any manifold. Nothing was run.
No producing script for polarity_deflation.json exists in the repo.
Opposite-trait angles
qwen35/analysis/trait_angles.json gives the angular scale:
#pair_median = 83.32442096349081 degrees for two adapters drawn at random,
#pair_p5 = 70.8814195743847, #nn_median = 65.57024794377539 for the median
trait to its own nearest neighbour, #nn_min = 54.00928029149673, and the
closest pair in the whole zoo is
#closest = ["composed", "imperturbable", 54.00928029149673].
Note what the bipolarity result implies about opposite-keyed pairs and what it
does not. Within a factor, opposite-keyed pairs sit at residual cosine
-0.0587286292938413 on average - past 90 degrees, i.e. genuinely anti-aligned -
but the magnitude is small, so an antonym pair is nowhere near the -1 of a
literal negation. manifold_ideas.md puts the consequence bluntly: "antonym
adapters are not literal negatives (the cross-seed facts warn of this)".
trait_angles.json does not store a per-pair opposite-trait angle table; the
aggregate is TEST 2 above.
Related: Factor analysis of the adapter Gram, PCA, the scree curve and the two nulls, The null control arms, Cross-seed geometry, Module holography, UMAP, sphere and other layouts, History of the Big Five.
Sources
qwen35/results/decomposition.jsonqwen35/decompose.pyqwen35/analysis/polarity_deflation.jsonqwen35/analysis/trait_angles.jsonqwen35/analysis/trait_graph.jsonqwen35/analysis/geometry_stage1.jsonqwen35/results/compare_nulls_output.txt
Linked from
- Best axis pair per Goldberg group
- Claims and evidence
- Code and data map
- Column-space structure
- Cross-seed geometry
- Factor analysis of the adapter Gram
- Factor analysis of the null arms
- axis_EmotionalStability (the named Emotional Stability axis)
- axis_Extraversion (the named Extraversion axis)
- Weight-space geometry of the 134-adapter zoo
- Gradient atoms on the zoo's own preference data
- Where no word goes - the hole and the alien direction
- Module holography
- The null control arms
- Open questions
- Paper reading, 2026-09-09 - SliderSpace and Gradient Atoms
- PCA, the scree curve and the two nulls
- Post: Persona Geology (2026-10-30)
- Source contradictions
- Stage-two geometry
- Superseded geometry claims
- UMAP, sphere and other layouts