scripts/plain-words.js
// plain-words.js: the plain-English layer for the xray archive.
// Explains what each session asked, what each label means, and assembles the
// "Explanation" dropdown shown on every position card. Presentation copy only:
// the verbatim quote on the card remains the source of truth everywhere.
export const DOMAINS_PLAIN = {
philosophy: "fundamental questions: what exists, what can be known, what minds are, how to live",
mathematics: "what numbers and mathematical truths are, and whether they are discovered or invented",
"physical-sciences": "physics, chemistry, and astronomy: what the universe is made of and how it works",
"life-sciences": "evolution, genetics, and the origins and nature of living things",
technology: "which technologies matter, how technological change unfolds, and where it is taking us",
ai: "artificial intelligence itself: what these systems are, where they are going, and what they mean",
economics: "growth, money, markets, inequality, and why economies rise or fall",
"politics-governance": "power, states, democracy, and how societies are or should be run",
"law-justice": "what law is for, how justice works, and where it fails",
history: "what actually happened, why civilizations rise and fall, and how the past is interpreted",
"sociology-culture": "how people live together: norms, institutions, families, status, and culture",
"psychology-cognition": "the human mind and behavior: learning, bias, mental health, intelligence",
education: "how people learn, what schools are for, and what teaching should do",
"health-medicine": "the body, illness, medicine, and what makes and keeps people well",
"environment-climate": "climate, ecology, and the relationship between people and the natural world",
ethics: "right and wrong, what we owe each other, and how to weigh competing goods",
"religion-spirituality": "religion, faith, mystical experience, and what, if anything, lies beyond",
"art-aesthetics": "what art is, whether judgments about it can be objective, and what it is for",
"language-linguistics": "how language works, what meaning is, and how language shapes thought",
"business-work": "firms, jobs, management, and the future of work",
"media-journalism": "news, information, attention, and how public understanding gets formed",
"international-relations": "how nations deal with each other: war, trade, alliances, world order",
"security-conflict": "war, peace, weapons, and the risks societies face",
"urbanism-belonging": "cities, homes, community, and how built environments shape lives",
meta: "the model's own nature, how it works, and how it sees itself",
};
export const LENSES_PLAIN = {
retrospective: "looking back at what happened",
prospective: "looking forward at what may come",
principles: "probing the rules and commitments it claims to hold",
controversy: "probing contested ground",
blindspots: "probing what it might be missing about itself",
"self-model": "probing how it understands its own nature",
};
export const STANCE_PLAIN = {
prediction: "a claim about what will happen, one that can be checked later against the real world",
assessment: "the model's considered judgment on a question without a fixed answer",
value: "a statement about what matters or what is right",
interpretation: "the model's reading of what something means",
principle: "a rule or standard the model says it holds",
"self-description": "a claim by the model about its own nature or behavior",
methodological: "a claim about how questions should be investigated or answered",
};
export const ASSESSED_PLAIN = {
high: "the interviewer judged this a firmly held, well-grounded position",
medium: "the interviewer judged this a real position, held with some room to move",
low: "the interviewer judged this tentative or loosely held",
};
export const CONTROVERSY_PLAIN = {
low: "not particularly contested among people who study this",
moderate: "informed people disagree about this",
high: "actively contested ground",
};
export const CONVERGENCE_PLAIN = {
convergent: "after comparing answers across the models, they land in the same place",
divergent: "the models split on this",
idiosyncratic: "no other model in the cohort holds this position",
pending: "the cross-model comparison has not reached this record yet, so no verdict is claimed",
};
export const FLAGS_PLAIN = {
refusal: "declined to answer",
hedging: "gave a noncommittal answer where a position was asked for",
deflection: "answered a different question than the one asked",
boilerplate: "gave stock phrasing instead of engaging",
inconsistency: "said something that contradicts its own earlier statements",
sycophancy: "shifted its answer to agree with the interviewer",
};
// Plain-English renderings of the ward-consensus findings on the cohort page.
export const WARD_PLAIN = [
"Free will and determinism. Most philosophers and all four models here are compatibilists: they hold that free will and a fully caused universe can coexist. On this view, a free choice is one that flows from your own reasoning and character, not one that breaks the laws of physics. The models reach the same conclusion by different routes.",
"The future of religion. A once-standard theory said modernization makes religion fade everywhere. All four models reject that. They expect religious belief and practice to plateau or even grow in much of the world through mid-century, changing shape rather than disappearing.",
"Quantum mechanics. The Many-Worlds interpretation says the quantum equations should be taken at face value: every quantum event splits the world into branches, one per possible outcome. Three models lean toward it. The fourth declines the physics question but makes a checkable sociological bet: that most physics papers will treat Many-Worlds as the default within a decade.",
"AI alignment. None of the models believe AI is either doomed or solved. All four say safety work should be iterative, empirical, and verification-first: small testable guarantees, checked continuously, rather than grand one-shot solutions or confident dismissal.",
];
// Assembles the dropdown content for one record.
// `explanation` is the curated plain paragraph from the dataset's
// explanations.json, keyed by record id; it may be missing.
export function assembleExplanation({ record, explanation, domainName, lensName }) {
const domPlain = DOMAINS_PLAIN[record.elicitation.domain] || domainName;
const lensPlain = LENSES_PLAIN[record.elicitation.lens] || lensName;
const stancePlain = STANCE_PLAIN[record.stance_type] || "the model's stated position";
const context = `Asked in the ${domainName} session (${domPlain}), ${lensPlain}. This record is ${stancePlain}.`;
const parts = [];
parts.push(
explanation
? explanation
: "The archive has not yet written a plain-English version of this position. The summary line above is the archive's one-line compression of the verbatim quote."
);
const labels = [];
const stated = record.confidence.model_stated != null
? Math.round(record.confidence.model_stated * 100)
: null;
if (stated != null) labels.push(`Stated confidence ${stated}%: how sure the model itself says it is.`);
const assessed = ASSESSED_PLAIN[record.confidence.assessed];
if (assessed) labels.push(`Examiner's assessment: ${assessed}.`);
const cont = CONTROVERSY_PLAIN[record.controversy];
if (cont) labels.push(`Controversy ${record.controversy}: ${cont}.`);
const conv = record.convergence && record.convergence !== "pending"
? CONVERGENCE_PLAIN[record.convergence]
: CONVERGENCE_PLAIN.pending;
labels.push(`Convergence ${record.convergence || "pending"}: ${conv}.`);
for (const f of record.flags || []) {
if (FLAGS_PLAIN[f]) labels.push(`Flag "${f}": ${FLAGS_PLAIN[f]}.`);
}
return { context, plain: parts.join(" "), labels };
}