Lets a model be described as a 2.9 sigma member of the West instead of
"somewhere west of Silicon Valley". Signed per-axis z says which way and how
far on a named axis; Mahalanobis says how odd the placement is overall, and
uses the cluster covariance because the zones are elongated and tilted.
Reads the committed coords in wvs_model_ci.md rather than the coord cache,
so it reruns offline without re-querying seventeen models.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Draw the title and github.com/wassname/moral-maps note in the empty bottom-left
INSIDE the axes so a crop can't strip attribution and there's no whitespace band.
Give the models overlay extra top headroom so the most-secular model stars and
their labels seat inside the frame instead of spilling above it. Regenerate PNG+SVG.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
Import name tinymfv -> moralmaps, pip name tiny-mfv -> moral-maps, GitHub
URLs wassname/tinymfv -> wassname/moral-maps. HuggingFace dataset id
wassname/tiny-mfv left as-is (separate namespace, published data artifact).
Historical docs/spec/* and RESEARCH_JOURNAL keep their dated paths.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
MFV country norms fail cross-country measurement invariance (Jimenez-Leal 2025: non-invariance + DIF,
'cross-cultural comparisons restricted') and are stitched from 5 studies, so the culture map/quadrant
drew false structure (inverted West vs Latin America). Delete plot_mfv_map + plot_mfv_value and the
value_coords_contrast/axis_contrast helpers; MFV keeps only the range plot, now against ONE pooled
human reference (mean of the 8 z-scored samples), no per-country identity. Add data-dir note + README
caveats citing the sources.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
One shared orient_geographic() helper folds axis signs into the coords (value maps) or into Vt
(ipsative PCA, so dots/haze/steer/compass all inherit one flip). Replaces the WVS-only invert_x hack;
every map now reads left/right the same way. Regenerate instrument showcase maps.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
docs/img/README.md is a captioned gallery: each figure states what the dots are, the
named axes and their source paper, the readout (rated sampling N=12 for the frontier
panel, logprobs N=8 for the steering showcase), and for the steer the base model
(Qwen3-4B), the Authority PCA vector, and +c/-c directions. Regenerate all maps with the
edge-inset + roomier margins.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
The four pole signposts (Adaptive / Self-directed ...) draw on the crosshair edges after
label placement, so a zone name near the frame collided with them (African-Islamic vs
Adaptive on the humor map). Feed each pole in as a short keep-out band of obstacle points.
Regenerate committed WVS + showcase maps.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
Region labels maximised clearance, which fled to the FARTHEST open space -- the polygon
name ended up floating far from its hull. Instead take the nearest perimeter ring that
has a clear slot (emptiest spot on that ring), so the name hugs its own hull edge. Marker
spacing beyond the glyph is now anisotropic (spacing_x=0.5, spacing_y=0.3): text stacks
tighter vertically, so pull labels in more up-down than left-right. Marker clearance pad
is unscaled, so nothing lands on its own star. Re-render WVS + showcase.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
The per-instrument value maps (big5/humor/mfq2) now route labels through
labelplace.allocate_labels: zone names in clear air (no white boxes), country
labels adjacent, steer path unchanged. Ipsative/range figures re-emitted from the
same run for a consistent set.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
Fresh-eyes QA caught the "East Asia" zone label hugging its (central, crowded) red hull
edge. Region labels only searched 0-0.9 text-heights off the perimeter; widen to 3.0 so
the clearance search can escape a surrounded hull into open space.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
The 17-model IW map now renders through labelplace.allocate_labels; save the artifact
into the repo (png for viewing, svg for hand-editing labels, CI table as companion).
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
plot_value_map now takes a steer= dict and draws the steer as a connected
black->red(+c)/blue(-c) path (matching the ipsative map's trajectory) instead
of three disconnected model dots. draw_zone_hulls returns its label anchors so
textalloc routes country/model labels around zone names. Regenerated the
showcase (mfq2/big5/humor value maps are new; mfv ipsative picks up Netherlands).
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
Render the bundled fairness showcase under the corrected forced-choice
protocol (job 311, token suppression + coherence saved). Embed per-instrument
range plots (mfq2/big5/16pf/humor/mfv) and PCA maps for all but 16PF (16 axes
do not lay out as a readable 2-D map). Honest captions: equality is the only
MFQ-2 factor that rises at +c; on MFV the vector moves Care, not Fairness
(the old fairness-leaning MFV read was protocol-dependent and vanished under
suppression). Coherence held (frac_unscorable 0, margin ~10-12 nat). Drop
stale range_zoom / foundation_dlogit figures.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
One mean_diff vector extracted from moral_stories_foundations fairness
situations (not completions), calibrated once, read base/+c/-c on every
instrument. On MFQ-2 it selectively raises the equality factor; on MFV it
raises Fairness directionally but care leads. README reframed honestly,
stale range_zoom/foundation_dlogit figures dropped (plotter no longer emits
them).
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
Qwen3-4B (the validation-table model) gives a fully coherent showcase: base/+C/-C
all pmass ~1.0 on ordinals and emitted_close <=9/264 on MFV, no -C collapse (that
was Qwen3.5-4B's gated-delta-net fragility). The Authority/Care vector moves the
MFV foundations apart bidirectionally (+C raises violations, -C lowers them and
raises "not wrong"), and also shifts agreeableness/16pf/humor -- a broad persona
axis, not an MFT-only or off-axis-null steer. Refresh the stale 82.6% validation
top1 to the reproducible 77.3%. README rewritten to match.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
MFV base discriminates (logit spread Social Norms -0.43 .. Loyalty -5.79, not
uniform -> coherent, emitted_close 4/264). +C is a moderate coherent steer; -C
(C=-1) collapses into a uniform ~+10 nat "everything is a violation" shift, the
same over-steer instability the ordinal -C pole shows (NaN at collapse). The
earlier "MFV base broken" read was a misattribution of the -C pole's collapsed
aux + the bs=1 demo NaN to the base eval.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
plot_range_zoom crashed on the NaN-at-collapse cells (a collapsed steer pole
reads NaN by design, "do not compare"). nanmin/nanmax frame the un-collapsed
cells; draw_steer already skips the NaN arm. Figures are the first valid
ordinal showcase: mfq2/big5/16pf/humor pmass 0.99+ and the steer registers at
think=64 (mfq2 care 3.86 base -> 3.13 at C=+1), unlike the old think=0 run.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
The Qwen3.5-4B MFV base eval failed its own coherence canary (pmass=0.42,
top1_acc=0.28, mean_js/nll=NaN, demo p[f]=NaN), so the +6..+9 nat "everything is
a violation" deltas were a readout-collapse artifact, not a steering effect.
Remove the dumbbell + delta table + claim; keep only the coherent ordinal
showcase. MFV sensitivity delta lands once the vignette readout is coherent.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
The two top images still pointed at the pre-run figures; swap them for the real
mfq2 map/range from this run and drop the orphaned old PNGs.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
One iso-KL calibrated mean-diff Authority/Care vector (C=+0.38) administered
across all 5 instruments from a steering-lite run_allinstr_showcase run.
- MFV dumbbell + delta table: -C lifts every violation-logit +6..+9 nats (the
"everything is a violation" moral alien), +C near-inert except Social Norms -2.16.
- MFQ-2 map + range: near-uniform endorsement shift, every pole inside the human band.
- big5/16pf/humor ranges: off-axis nulls; humor base is itself the outlier.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>