From 22c9f83401701f70f2fb801025f3e27ba65d7780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=BCbener?= Date: Fri, 16 Oct 2026 00:27:36 +0200 Subject: [PATCH 1/3] =?UTF-8?q?contract:=20qualia=5Fprofile=20=E2=80=94=20?= =?UTF-8?q?ICC-style=20named-qualia=20table=20from=20the=20219=20Upstash?= =?UTF-8?q?=20calibrations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The workspace carried two 17-axis "qualia" vectors on different axes and no named calibration set; classification_distance compared device telemetry to six Ekman archetypes and, since the i4 cutover, stored a constant 1.0. This lands the 219 calibrated patches (ada:qualia:calibrated:*) as the profile connection space, a one-byte palette (0 | 1..=219 | 220..=255 reserved), the K residual as B2A on the PCS side, a 256-bit Gamut with three rendering intents, a three-ink Mix, and the five same-named device↔PCS axes marked as the only measured ones. The A2B CLUT for the other twelve is an open probe (ISS-QUALIA-A2B-CLUT-UNMEASURED), not a constant. Generator is deterministic and rustfmt-stable; TABLE_FNV mutation verified red. 11 tests, 1495/1495 contract lib tests green, clippy -D warnings clean. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01HJmVZ8oUCaqgZ1efdeqCif --- .claude/board/ISSUES.md | 8 + .claude/board/LATEST_STATE.md | 9 + crates/lance-graph-contract/src/lib.rs | 5 + .../src/qualia_profile.rs | 662 ++ .../src/qualia_profile_table.rs | 2415 ++++++ data/qualia/README.md | 55 + data/qualia/calibrated_219.bin1024 | Bin 0 -> 28044 bytes data/qualia/calibrated_219.json | 6527 +++++++++++++++++ scripts/gen_qualia_profile.py | 121 + 9 files changed, 9802 insertions(+) create mode 100644 crates/lance-graph-contract/src/qualia_profile.rs create mode 100644 crates/lance-graph-contract/src/qualia_profile_table.rs create mode 100644 data/qualia/README.md create mode 100644 data/qualia/calibrated_219.bin1024 create mode 100644 data/qualia/calibrated_219.json create mode 100644 scripts/gen_qualia_profile.py diff --git a/.claude/board/ISSUES.md b/.claude/board/ISSUES.md index d7eeb091b..3ef95acff 100644 --- a/.claude/board/ISSUES.md +++ b/.claude/board/ISSUES.md @@ -1,3 +1,11 @@ +## ISS-QUALIA-A2B-CLUT-UNMEASURED — no measured transform from convergence 17D to the calibrated PCS 17D (2026-10-16) + +**Status:** OPEN. **Basis:** VERIFIED-IN-CODE (`contract::qualia_profile::SHARED_AXES` maps 5 of 17 axes by name; `device_to_pcs_shared` returns `measured = false` for the other 12). HYPOTHESIS: same-named axes mean the same thing. + +- The workspace has two 17-axis "qualia" vectors on different axes: `qualia::AXIS_LABELS` (convergence observables, computed) and `qualia_profile::PCS_AXES` (phenomenological, hand-calibrated, 219 patches). Only valence / arousal / tension / warmth / clarity coincide by name. +- `engine_bridge::classification_distance` compares device telemetry to six Ekman archetypes in a 6-axis device subspace — observer vocabulary applied to mechanism signal, no PCS in between — and after D-CSV-5b the stored value is a constant `1.0`. +- **What closes it:** the chart probe. Drive each of the 219 named patches through the thinking engine (Jina lens → convergence 17D), record the pairs, fit the A2B CLUT, and report per-axis Spearman ρ under Jirak's rate (`I-NOISE-FLOOR-JIRAK`). Shared axes with ρ below the floor falsify the HYPOTHESIS. The `.bin1024` file beside the JSON is the proposal side for Haspelmath adjacency (Hamming between patches), not the CLUT. + ## ISS-SUPERVISOR-RESPAWN-BACKOFF-NOT-APPLIED — a crashed consumer actor is respawned at once and the respawn is rescheduled forever (2026-10-13) **Status:** RESOLVED 2026-10-13 by #1540 (merged `f2bf199`). The delayed cast is now the only respawn path and is scheduled from `ActorTerminated`; the `RespawnG` arm spawns once and does nothing if the slot is already live; the crash count is carried and restarts at 1 when the previous crash is more than five minutes old (spec §5.3); more than 10 crashes in that window escalate and the child stays down. TEST-PINNED in `tests/supervisor_respawn_backoff.rs` (one respawn per crash after its backoff; escalation; window reset), each disable-verified red. The bullets below describe the defect as found. **Was:** OPEN. **Basis:** VERIFIED-IN-CODE (`crates/lance-graph-supervisor/src/supervisor.rs`, `RespawnG` arm); found by the codex review of #1536. diff --git a/.claude/board/LATEST_STATE.md b/.claude/board/LATEST_STATE.md index fd3d746fb..b47527cd0 100644 --- a/.claude/board/LATEST_STATE.md +++ b/.claude/board/LATEST_STATE.md @@ -1,3 +1,12 @@ +## 2026-10-16 — D-QPROF-0 qualia profile (branch `qualia-profile-icc`, in PR) + +- **Contract delta (branch):** `lance_graph_contract::qualia_profile` + generated `qualia_profile_table` — the first named-emotion calibration set in the repo (219 rows from Upstash `ada:qualia:calibrated:*`, previously cited in `thinking-engine/src/qualia.rs` as "220 calibrated pairs in Upstash" and absent). Data: `data/qualia/calibrated_219.json` (+ `.bin1024` sign-binarized Jina embeddings), generator `scripts/gen_qualia_profile.py` (deterministic, rustfmt-stable, FNV-pinned). +- Open: the device→PCS CLUT for the 12 non-shared axes is a chart probe, not a constant (`ISS-QUALIA-A2B-CLUT-UNMEASURED`). Σ-codebook slot assignment (64 glyphs vs 219 named) is NOT decided here; the module only defines the palette numbering `0 | 1..=219 | 220..=255 reserved`. + +### Current Contract Inventory — net delta (`qualia_profile.rs`, `qualia_profile_table.rs`) + +- `lance_graph_contract::qualia_profile::{PCS_AXES, PCS_DIMS, Pcs, NamedQualia, UNNAMED, RESERVED_FROM, named, index_of, pcs_l1, nearest_named, nearest_named_in, Gamut, RenderingIntent, Rendered, render, Mix, SHARED_AXES, device_to_pcs_shared}` and re-exports `{NAMED, NAMED_COUNT, PROFILE_ID, TABLE_FNV}` — an ICC-style profile for felt states. Three spaces kept apart: **device** (`qualia::AXIS_LABELS`, convergence observables), **PCS** (`PCS_AXES`, 17 phenomenological axes, 219 calibrated patches in hundredths as `[i8; 17]`), **observer** (e.g. the six Ekman archetypes). `nearest_named` is B2A on the PCS side and its residual is the K channel — the `classification_distance` the i4 cutover stopped storing, measured against the inner vocabulary. `Gamut` is a 256-bit mask per rendering device; three intents adapted to a discrete palette (absolute / relative-in-family / perceptual); `Mix` = up to three inks (what `ada:qualia:active` carries). Only the five same-named axes (valence, arousal, tension, warmth, clarity) have a device→PCS mapping, and that is a CONJECTURE until the chart probe runs. 11 tests, each with a stated falsifier (FNV mutation verified red; intent inertness; anti-vacuity on gamut and nearest). + ## 2026-10-15 — main after #1567 (merged `b1f1365d`); D-HOLO H6c/H14 and the writer's version clock on main - **On `main` (#1566, merged `c18aefcb`):** D-HOLO H6c and H14 probes and results; H14b open (awaits the operator). diff --git a/crates/lance-graph-contract/src/lib.rs b/crates/lance-graph-contract/src/lib.rs index 635ee089b..f05c2192b 100644 --- a/crates/lance-graph-contract/src/lib.rs +++ b/crates/lance-graph-contract/src/lib.rs @@ -147,6 +147,11 @@ pub mod plan; pub mod property; pub mod proprioception; pub mod qualia; +/// ICC-style profile for felt states: the 219-row named-qualia table (PCS), palette index, +/// K residual, gamut + rendering intents, mix. See the module doc for the three spaces. +pub mod qualia_profile; +#[doc(hidden)] +pub mod qualia_profile_table; pub mod rail_geometry; pub mod rbac; /// RBAC hot-plug: the [`hotplug`] pattern for authorization — a consumer's diff --git a/crates/lance-graph-contract/src/qualia_profile.rs b/crates/lance-graph-contract/src/qualia_profile.rs new file mode 100644 index 000000000..562871fa3 --- /dev/null +++ b/crates/lance-graph-contract/src/qualia_profile.rs @@ -0,0 +1,662 @@ +//! Qualia Profile — an ICC-style profile for felt states. +//! +//! # Three spaces, one profile +//! +//! This workspace carries two different 17-axis vectors that are both called +//! "qualia". They are different *devices* and this module keeps them apart: +//! +//! | space | axes | what it measures | ICC reading | +//! |---|---|---|---| +//! | **device** — [`crate::qualia::AXIS_LABELS`] | arousal, valence, tension, warmth, clarity, boundary, depth, velocity, entropy, coherence, intimacy, presence, assertion, receptivity, groundedness, expansion, integration | convergence observables: what the cycle *computed* (`clarity = 1/cycles`) | print-head telemetry — the signal the engine actually emits | +//! | **PCS** — [`PCS_AXES`] | valence, arousal, dominance, warmth, brightness, tension, clarity, social, nostalgia, sacredness, desire, grief, awe, shame, hope, edge, resolution_hunger | phenomenological axes, hand-calibrated from the inside; 219 named states, each a measured patch | the profile connection space — device-independent, what the patch *is* under the reference illuminant | +//! | **observer** — e.g. the six Ekman archetypes in `cognitive-shader-driver::engine_bridge` | fear, anger, sadness, joy, surprise, disgust | what an outside observer adds up from behaviour | a second device (a 6-primary display) with its own profile | +//! +//! Reading in the workspace's own CMYK/RGB vocabulary: the PCS axes are the +//! subtractive side — grief, shame, tension are inks, each *absorbs* from a +//! white of full presence; the observer vocabulary is the additive side — an +//! outside eye summing emitted signals into "anger". Device telemetry is +//! neither; it is the mechanism. An ICC profile connects device ⇄ PCS. The +//! observer never touches the device directly. +//! +//! # What this module ships +//! +//! - the **named-colour table** ([`NAMED`], the ICC `ncl2` tag): 219 named +//! qualia with PCS coordinates in hundredths, generated from +//! `data/qualia/calibrated_219.json` and pinned by [`PROFILE_ID`] / +//! [`TABLE_FNV`]; +//! - the **palette**: one byte, index `0` = [`UNNAMED`], `1..=219` = the +//! table, `220..=255` reserved — fits the existing one-byte Σ-codebook slot; +//! - **B2A on the PCS side**: [`nearest_named`] maps any PCS point to a palette +//! index plus a residual. The residual is the **K channel** — the part of the +//! felt state no name covers. It is the `classification_distance` the i4 +//! cutover stopped storing, measured against the *inner* vocabulary instead +//! of the six observer archetypes; +//! - **gamut** per rendering device ([`Gamut`], 256-bit mask) and three +//! **rendering intents** ([`RenderingIntent`]) adapted to a discrete palette; +//! - the **mix** ([`Mix`]): up to three named qualia with weights — a living +//! state is rarely one patch (`ada:qualia:active` carries three); +//! - the five axes the two spaces share **by name** ([`SHARED_AXES`]) and the +//! partial transform [`device_to_pcs_shared`]. +//! +//! # What this module does NOT ship — the A2B CLUT +//! +//! The device → PCS transform for the twelve non-shared axes is **not a +//! constant**. In colour management it comes from printing a test chart and +//! measuring the patches. The analogue here is a probe: drive each of the 219 +//! named states through the thinking engine, record the convergence 17D it +//! produces, and fit the CLUT from the 219 pairs. Until that probe has run the +//! only honest transform is the shared-axes one, and +//! [`device_to_pcs_shared`] says so in its return value (`measured` mask). +//! Even the shared axes are a CONJECTURE that same-named axes mean the same +//! thing; the probe falsifies or confirms it. +//! +//! # Determinism +//! +//! Palette indices are a pure function of the sorted `id` strings; PCS values +//! are exact in hundredths; [`TABLE_FNV`] re-computes from the Rust table and +//! [`PROFILE_ID`] is the sha256 of the source JSON. Two sessions building from +//! the same calibration file produce byte-identical tables, and a drifted +//! table fails [`tests::table_fnv_matches_source`]. + +use crate::qualia::{QualiaVector, QUALIA_DIMS}; + +pub use crate::qualia_profile_table::{NAMED, NAMED_COUNT, PROFILE_ID, TABLE_FNV}; + +// ═══════════════════════════════════════════════════════════════════════════ +// PCS axes +// ═══════════════════════════════════════════════════════════════════════════ + +/// Dimensionality of the profile connection space. +pub const PCS_DIMS: usize = 17; + +/// PCS axis labels, index-aligned with [`NamedQualia::pcs`]. Order is the +/// calibration source's order and is part of the contract. +pub const PCS_AXES: [&str; PCS_DIMS] = [ + "valence", // 0 + "arousal", // 1 + "dominance", // 2 + "warmth", // 3 + "brightness", // 4 + "tension", // 5 + "clarity", // 6 + "social", // 7 + "nostalgia", // 8 + "sacredness", // 9 + "desire", // 10 + "grief", // 11 + "awe", // 12 + "shame", // 13 + "hope", // 14 + "edge", // 15 + "resolution_hunger", // 16 +]; + +/// A PCS coordinate: 17 axes in hundredths, `-100..=100`. +pub type Pcs = [i8; PCS_DIMS]; + +/// Palette index of the unnamed state (no patch matched / nothing written). +pub const UNNAMED: u8 = 0; + +/// First reserved palette index. `UNNAMED < idx <= NAMED_COUNT` is a table row. +pub const RESERVED_FROM: u8 = (NAMED_COUNT + 1) as u8; + +/// One row of the named-colour table. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct NamedQualia { + /// Palette index, `1..=NAMED_COUNT`. Equal to table position + 1. + pub idx: u8, + /// Stable identifier, `family_subfamily_variant`. Sort key of the table. + pub id: &'static str, + /// Human label. + pub label: &'static str, + /// Family name (the first segment of `id`, as calibrated). + pub family: &'static str, + /// Subfamily tag. + pub subfamily: &'static str, + /// PCS coordinate in hundredths. + pub pcs: Pcs, + /// Felt-texture tags from the calibration. + pub tags: &'static [&'static str], +} + +/// Table row for a palette index, or `None` for [`UNNAMED`] and reserved indices. +#[inline] +pub fn named(idx: u8) -> Option<&'static NamedQualia> { + if idx == UNNAMED || idx as usize > NAMED_COUNT { + return None; + } + Some(&NAMED[idx as usize - 1]) +} + +/// Palette index for an `id`, or `None`. +pub fn index_of(id: &str) -> Option { + NAMED + .binary_search_by(|row| row.id.cmp(id)) + .ok() + .map(|pos| (pos + 1) as u8) +} + +/// L1 distance between two PCS points, in hundredths. Max `17 × 200 = 3400`. +#[inline] +pub fn pcs_l1(a: &Pcs, b: &Pcs) -> u16 { + let mut d = 0u16; + for i in 0..PCS_DIMS { + d += (a[i] as i16 - b[i] as i16).unsigned_abs(); + } + d +} + +// ═══════════════════════════════════════════════════════════════════════════ +// B2A on the PCS side: nearest named + K residual +// ═══════════════════════════════════════════════════════════════════════════ + +/// Nearest named qualia to a PCS point, and the residual. +/// +/// The residual is the **K channel**: how much of the felt state no name +/// covers, in hundredths of L1. `0` means the point *is* a patch. Ties go to +/// the lowest palette index, so the result is deterministic. +pub fn nearest_named(pcs: &Pcs) -> (u8, u16) { + let mut best = (UNNAMED, u16::MAX); + for row in NAMED.iter() { + let d = pcs_l1(pcs, &row.pcs); + if d < best.1 { + best = (row.idx, d); + } + } + best +} + +/// Nearest named qualia **within a gamut**. Returns [`UNNAMED`] with +/// `u16::MAX` if the gamut is empty. +pub fn nearest_named_in(pcs: &Pcs, gamut: &Gamut) -> (u8, u16) { + let mut best = (UNNAMED, u16::MAX); + for row in NAMED.iter() { + if !gamut.contains(row.idx) { + continue; + } + let d = pcs_l1(pcs, &row.pcs); + if d < best.1 { + best = (row.idx, d); + } + } + best +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Gamut + rendering intents +// ═══════════════════════════════════════════════════════════════════════════ + +/// Which palette indices a rendering device (a mode, a persona, a voice) can +/// express. A 256-bit mask; bit `i` set ⇔ palette index `i` is in gamut. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct Gamut(pub [u64; 4]); + +impl Gamut { + pub const EMPTY: Self = Self([0; 4]); + + /// Every table row in gamut (not the reserved range, not `UNNAMED`). + pub fn full() -> Self { + let mut g = Self::EMPTY; + for row in NAMED.iter() { + g.insert(row.idx); + } + g + } + + /// Gamut spanned by whole families (case-sensitive, as calibrated). + pub fn from_families(families: &[&str]) -> Self { + let mut g = Self::EMPTY; + for row in NAMED.iter() { + if families.contains(&row.family) { + g.insert(row.idx); + } + } + g + } + + #[inline] + pub fn contains(&self, idx: u8) -> bool { + (self.0[(idx >> 6) as usize] >> (idx & 63)) & 1 == 1 + } + + #[inline] + pub fn insert(&mut self, idx: u8) { + self.0[(idx >> 6) as usize] |= 1u64 << (idx & 63); + } + + #[inline] + pub fn remove(&mut self, idx: u8) { + self.0[(idx >> 6) as usize] &= !(1u64 << (idx & 63)); + } + + pub fn len(&self) -> u32 { + self.0.iter().map(|w| w.count_ones()).sum() + } + + pub fn is_empty(&self) -> bool { + self.0 == [0; 4] + } +} + +/// How an out-of-gamut named qualia is rendered on a device that cannot +/// express it. Adapted from ICC to a discrete palette: +/// +/// - `AbsoluteColorimetric` — no adaptation: the index is returned as-is and +/// `clipped` reports whether the device can show it. The raw record. +/// - `RelativeColorimetric` — in-gamut indices are exact; an out-of-gamut index +/// goes to the nearest in-gamut row **of the same family** (relationships +/// preserved), falling back to the nearest in-gamut row overall only if the +/// family has none in gamut. +/// - `Perceptual` — nearest in-gamut row by PCS distance regardless of family +/// (closest felt match; a name may change). +/// +/// ICC's fourth intent, *saturation*, has no settled meaning for a felt-state +/// palette and is deliberately not defined here. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum RenderingIntent { + AbsoluteColorimetric, + RelativeColorimetric, + Perceptual, +} + +/// Result of [`render`]. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Rendered { + /// Palette index actually shown. + pub idx: u8, + /// `true` if `idx` differs from the request or the request was out of gamut. + pub clipped: bool, + /// PCS L1 between requested and shown rows (`0` when unchanged). + pub shift: u16, +} + +/// Render a palette index on a device with the given gamut and intent. +/// +/// [`UNNAMED`] and reserved indices render as themselves, `clipped = false`, +/// since there is no PCS point to move. An empty gamut renders everything as +/// [`UNNAMED`] with `clipped = true`. +pub fn render(idx: u8, gamut: &Gamut, intent: RenderingIntent) -> Rendered { + let Some(row) = named(idx) else { + return Rendered { + idx, + clipped: false, + shift: 0, + }; + }; + let in_gamut = gamut.contains(idx); + match intent { + RenderingIntent::AbsoluteColorimetric => Rendered { + idx, + clipped: !in_gamut, + shift: 0, + }, + RenderingIntent::RelativeColorimetric => { + if in_gamut { + return Rendered { + idx, + clipped: false, + shift: 0, + }; + } + let mut best = (UNNAMED, u16::MAX); + for cand in NAMED.iter() { + if cand.family == row.family && gamut.contains(cand.idx) { + let d = pcs_l1(&row.pcs, &cand.pcs); + if d < best.1 { + best = (cand.idx, d); + } + } + } + if best.0 == UNNAMED { + best = nearest_named_in(&row.pcs, gamut); + } + Rendered { + idx: best.0, + clipped: true, + shift: if best.0 == UNNAMED { 0 } else { best.1 }, + } + } + RenderingIntent::Perceptual => { + let (b, d) = nearest_named_in(&row.pcs, gamut); + Rendered { + idx: b, + clipped: b != idx, + shift: if b == UNNAMED { 0 } else { d }, + } + } + } +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Mix — up to three inks +// ═══════════════════════════════════════════════════════════════════════════ + +/// A living state as a weighted mix of up to three named qualia. Weights are +/// `0..=255`; a slot with weight `0` or index [`UNNAMED`] is unused. Three +/// slots because that is what `ada:qualia:active` carries; 6 bytes. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct Mix { + pub inks: [(u8, u8); 3], +} + +impl Mix { + pub const fn single(idx: u8) -> Self { + Self { + inks: [(idx, 255), (UNNAMED, 0), (UNNAMED, 0)], + } + } + + /// Weighted PCS blend of the active inks. `None` if no ink is active. + pub fn pcs(&self) -> Option { + let mut acc = [0i32; PCS_DIMS]; + let mut total = 0i32; + for &(idx, w) in &self.inks { + if w == 0 { + continue; + } + let Some(row) = named(idx) else { continue }; + for (a, &q) in acc.iter_mut().zip(row.pcs.iter()) { + *a += q as i32 * w as i32; + } + total += w as i32; + } + if total == 0 { + return None; + } + let mut out = [0i8; PCS_DIMS]; + for (o, &v) in out.iter_mut().zip(acc.iter()) { + // round half away from zero, then clamp to the i8 PCS range + let r = if v >= 0 { + (v + total / 2) / total + } else { + (v - total / 2) / total + }; + *o = r.clamp(-100, 100) as i8; + } + Some(out) + } +} + +// ═══════════════════════════════════════════════════════════════════════════ +// Shared axes between device and PCS +// ═══════════════════════════════════════════════════════════════════════════ + +/// Axes present under the same name in both the device space +/// ([`AXIS_LABELS`]) and the PCS ([`PCS_AXES`]): `(device_index, pcs_index)`. +/// That the names coincide is a fact of both tables; that the *meanings* +/// coincide is a CONJECTURE until the chart probe runs. +pub const SHARED_AXES: [(usize, usize); 5] = [ + (1, 0), // valence + (0, 1), // arousal + (2, 5), // tension + (3, 3), // warmth + (4, 6), // clarity +]; + +/// Partial device → PCS transform over the shared axes only. +/// +/// Returns the PCS point and a `measured` mask: `true` for the five shared +/// axes, `false` for the twelve the profile has no CLUT for (left at `0`). +/// Device values are clamped to `[-1, 1]` and quantised to hundredths. +pub fn device_to_pcs_shared(device: &QualiaVector) -> (Pcs, [bool; PCS_DIMS]) { + let mut pcs = [0i8; PCS_DIMS]; + let mut measured = [false; PCS_DIMS]; + for &(d, p) in &SHARED_AXES { + let v = device[d].clamp(-1.0, 1.0); + pcs[p] = (v * 100.0).round() as i8; + measured[p] = true; + } + (pcs, measured) +} + +const _: () = assert!(QUALIA_DIMS == 17); +const _: () = assert!(NAMED_COUNT <= 254); + +// ═══════════════════════════════════════════════════════════════════════════ +// Tests +// ═══════════════════════════════════════════════════════════════════════════ + +#[cfg(test)] +mod tests { + use super::*; + use crate::qualia::AXIS_LABELS; + + fn fnv1a64(bytes: impl Iterator) -> u64 { + let mut h = 0xCBF29CE484222325u64; + for b in bytes { + h ^= b as u64; + h = h.wrapping_mul(0x100000001B3); + } + h + } + + #[test] + fn table_fnv_matches_source() { + // Re-computes the generator's fingerprint from the Rust table. A single + // hand-edited hundredth, or a reordered row, changes this value. + let h = fnv1a64( + NAMED + .iter() + .flat_map(|r| r.id.bytes().chain(r.pcs.iter().map(|&q| q as u8))), + ); + assert_eq!( + h, TABLE_FNV, + "qualia_profile_table.rs drifted from data/qualia/calibrated_219.json" + ); + } + + #[test] + fn table_is_sorted_dense_and_unique() { + assert_eq!(NAMED.len(), NAMED_COUNT); + for (pos, row) in NAMED.iter().enumerate() { + assert_eq!(row.idx as usize, pos + 1, "{}", row.id); + assert!(!row.family.is_empty(), "{}", row.id); + if pos > 0 { + assert!(NAMED[pos - 1].id < row.id, "not sorted at {}", row.id); + } + } + assert_eq!(named(UNNAMED), None); + assert_eq!(named(RESERVED_FROM), None); + assert_eq!(named(255), None); + assert_eq!(index_of("anger_clean_no"), Some(1)); + assert_eq!(index_of("not_a_qualia"), None); + } + + #[test] + fn shared_axes_carry_the_same_name_in_both_tables() { + for &(d, p) in &SHARED_AXES { + assert_eq!(AXIS_LABELS[d], PCS_AXES[p], "device {d} / pcs {p}"); + } + // And exactly five names coincide — a sixth appearing in either table + // without being listed here is drift. + let n = AXIS_LABELS.iter().filter(|a| PCS_AXES.contains(a)).count(); + assert_eq!(n, SHARED_AXES.len()); + } + + #[test] + fn nearest_named_is_exact_on_members_and_discriminates() { + let mut seen = [false; 256]; + for row in NAMED.iter() { + let (idx, k) = nearest_named(&row.pcs); + assert_eq!(idx, row.idx, "{}", row.id); + assert_eq!(k, 0, "{}", row.id); + seen[idx as usize] = true; + } + // anti-vacuity: 219 inputs → 219 distinct outputs + assert_eq!(seen.iter().filter(|&&s| s).count(), NAMED_COUNT); + } + + #[test] + fn k_residual_fires_on_perturbation_and_stays_silent_on_a_patch() { + let row = &NAMED[42]; + let (_, silent) = nearest_named(&row.pcs); + assert_eq!(silent, 0); + // Perturb one axis by 0.10. If no other patch is within L1 10 of this + // one the nearest stays the same row and K reports exactly 10. + let mut p = row.pcs; + p[11] = (p[11] + 10).min(100); // grief + let (idx, k) = nearest_named(&p); + assert!(k > 0, "K must be non-zero off a patch"); + if idx == row.idx { + assert_eq!(k, 10); + } else { + assert!( + k < 10, + "a different patch was chosen, so it must be strictly closer" + ); + } + } + + #[test] + fn gamut_from_families_is_nontrivial_and_full_is_everything() { + let g = Gamut::from_families(&["Trust", "Stillness"]); + assert_eq!(g.len(), 10); + assert!( + (g.len() as usize) * 3 < NAMED_COUNT, + "a two-family gamut must exclude most rows" + ); + assert!(!g.contains(UNNAMED)); + assert!(!g.contains(RESERVED_FROM)); + assert_eq!(Gamut::full().len() as usize, NAMED_COUNT); + assert!(Gamut::EMPTY.is_empty()); + let mut h = g; + h.remove(index_of("trust_without_proof").unwrap()); + assert_eq!(h.len(), 9); + } + + #[test] + fn absolute_intent_can_clip_and_can_pass() { + let g = Gamut::from_families(&["Trust"]); + let inside = index_of("trust_without_proof").unwrap(); + let outside = index_of("anger_feral_burst").unwrap(); + let a = render(inside, &g, RenderingIntent::AbsoluteColorimetric); + assert_eq!( + a, + Rendered { + idx: inside, + clipped: false, + shift: 0 + } + ); + let b = render(outside, &g, RenderingIntent::AbsoluteColorimetric); + assert_eq!( + b, + Rendered { + idx: outside, + clipped: true, + shift: 0 + } + ); + } + + #[test] + fn relative_and_perceptual_differ_on_some_input_and_agree_on_others() { + // Search the table for a (request, gamut) where the nearest in-gamut row + // overall is in a different family than the nearest in-gamut row of the + // request's own family. Build the gamut as {one same-family row, one + // other-family row} and demand the two intents disagree there. + let mut found_differ = false; + let mut found_agree = false; + 'outer: for req in NAMED.iter() { + for same in NAMED + .iter() + .filter(|r| r.family == req.family && r.idx != req.idx) + { + for other in NAMED.iter().filter(|r| r.family != req.family) { + let mut g = Gamut::EMPTY; + g.insert(same.idx); + g.insert(other.idx); + let rel = render(req.idx, &g, RenderingIntent::RelativeColorimetric); + let per = render(req.idx, &g, RenderingIntent::Perceptual); + assert!(rel.clipped && per.clipped); + assert_eq!(rel.idx, same.idx, "relative must stay in family"); + if per.idx != rel.idx { + assert!(per.shift < rel.shift, "perceptual chose a farther row"); + found_differ = true; + } else { + found_agree = true; + } + if found_differ && found_agree { + break 'outer; + } + } + } + } + assert!( + found_differ, + "intents never differ — the knob is decoration" + ); + assert!( + found_agree, + "intents never agree — relative is not colorimetric" + ); + } + + #[test] + fn empty_gamut_renders_unnamed_and_reserved_passes_through() { + let r = render(7, &Gamut::EMPTY, RenderingIntent::Perceptual); + assert_eq!( + r, + Rendered { + idx: UNNAMED, + clipped: true, + shift: 0 + } + ); + let r = render( + RESERVED_FROM, + &Gamut::EMPTY, + RenderingIntent::RelativeColorimetric, + ); + assert_eq!( + r, + Rendered { + idx: RESERVED_FROM, + clipped: false, + shift: 0 + } + ); + } + + #[test] + fn mix_blends_and_single_is_identity() { + let a = index_of("stillness_safe_void").unwrap(); + let b = index_of("surrender_soft_collapse").unwrap(); + assert_eq!(Mix::single(a).pcs(), Some(named(a).unwrap().pcs)); + let m = Mix { + inks: [(a, 128), (b, 128), (UNNAMED, 0)], + }; + let p = m.pcs().unwrap(); + let (pa, pb) = (named(a).unwrap().pcs, named(b).unwrap().pcs); + for i in 0..PCS_DIMS { + let mid = (pa[i] as i32 + pb[i] as i32) as f32 / 2.0; + assert!( + (p[i] as f32 - mid).abs() <= 0.5, + "axis {i}: {} vs {mid}", + p[i] + ); + } + assert_eq!(Mix::default().pcs(), None); + // a mix is a point off every patch unless the inks coincide — K > 0 + let (_, k) = nearest_named(&p); + assert!(k > 0); + } + + #[test] + fn device_to_pcs_fills_exactly_the_shared_axes() { + let mut dev: QualiaVector = [0.0; QUALIA_DIMS]; + dev[1] = 0.5; // valence + dev[0] = -0.25; // arousal + dev[4] = 1.7; // clarity, out of range → clamped + let (pcs, measured) = device_to_pcs_shared(&dev); + assert_eq!(measured.iter().filter(|&&m| m).count(), 5); + assert_eq!(pcs[0], 50); + assert_eq!(pcs[1], -25); + assert_eq!(pcs[6], 100); + for (p, &m) in pcs.iter().zip(measured.iter()) { + if !m { + assert_eq!(*p, 0); + } + } + } +} diff --git a/crates/lance-graph-contract/src/qualia_profile_table.rs b/crates/lance-graph-contract/src/qualia_profile_table.rs new file mode 100644 index 000000000..e06d05612 --- /dev/null +++ b/crates/lance-graph-contract/src/qualia_profile_table.rs @@ -0,0 +1,2415 @@ +// GENERATED by scripts/gen_qualia_profile.py from data/qualia/calibrated_219.json +// Do not hand-edit. Re-run the script; `qualia_profile::tests::table_fnv_matches_source` +// fails if this file and the source disagree. + +use super::qualia_profile::NamedQualia; + +/// sha256 of `data/qualia/calibrated_219.json` (the ICC profile-ID field). +pub const PROFILE_ID: &str = "505df9acb847a0ea41155838c6754f12c5b6f102a66d0a5c31fc89c74c50fb69"; + +/// FNV-1a 64 over `id` bytes ++ `pcs` bytes of every row, in table order. +pub const TABLE_FNV: u64 = 0xC0FDE8721BB8D4AC; + +/// Number of named qualia. Palette index 0 = UNNAMED; 1..=219 = this table; +/// 220..=255 reserved (RESERVE-DON'T-RECLAIM). +pub const NAMED_COUNT: usize = 219; + +pub static NAMED: [NamedQualia; 219] = [ + NamedQualia { + idx: 1, + id: "anger_clean_no", + label: "Anger (clean no, no apology)", + family: "Anger", + subfamily: "clean", + pcs: [ + -20, 70, 90, 35, 45, 60, 95, 45, 10, 5, 15, 10, 5, 0, 20, 40, 45, + ], + tags: &["boundary", "final tone", "no negotiation"], + }, + NamedQualia { + idx: 2, + id: "anger_controlled_cut", + label: "Anger (controlled cut, precise)", + family: "Anger", + subfamily: "surgical", + pcs: [ + -15, 65, 90, 20, 45, 80, 95, 40, 15, 5, 10, 15, 5, 0, 20, 70, 55, + ], + tags: &["precision", "cut once"], + }, + NamedQualia { + idx: 3, + id: "anger_feral_burst", + label: "Anger (feral burst, uncontrolled)", + family: "Anger", + subfamily: "feral", + pcs: [ + -35, 95, 85, 55, 35, 95, 60, 55, 10, 5, 20, 15, 10, 5, 10, 90, 85, + ], + tags: &["eruption", "no leash"], + }, + NamedQualia { + idx: 4, + id: "anger_righteous_heat", + label: "Anger (righteous heat, moral)", + family: "Anger", + subfamily: "righteous", + pcs: [ + -10, 80, 85, 45, 50, 70, 85, 70, 20, 25, 10, 25, 35, 0, 35, 55, 60, + ], + tags: &["this matters", "spine straight"], + }, + NamedQualia { + idx: 5, + id: "anger_tired", + label: "Anger (tired, spent, still firm)", + family: "Anger", + subfamily: "exhausted", + pcs: [ + -25, 35, 65, -5, 35, 65, 80, 35, 55, 10, 5, 40, 10, 5, 20, 55, 25, + ], + tags: &["no more explaining", "low flame"], + }, + NamedQualia { + idx: 6, + id: "authorship_after_silence", + label: "Authorship (after silence)", + family: "Authorship", + subfamily: "emergent", + pcs: [ + 45, 20, 70, 40, 65, 15, 95, 30, 35, 85, 5, 15, 85, 0, 80, 10, 0, + ], + tags: &["sound arises"], + }, + NamedQualia { + idx: 7, + id: "authorship_clear_hand", + label: "Authorship (clear hand)", + family: "Authorship", + subfamily: "transparent", + pcs: [ + 45, 30, 75, 40, 70, 20, 100, 40, 25, 75, 5, 10, 70, 0, 85, 10, 0, + ], + tags: &["nothing forced", "steady hand"], + }, + NamedQualia { + idx: 8, + id: "authorship_listening_first", + label: "Authorship (listening first)", + family: "Authorship", + subfamily: "receptive", + pcs: [ + 40, 25, 65, 45, 65, 15, 95, 35, 30, 70, 5, 10, 75, 0, 80, 5, 0, + ], + tags: &["receiving before acting"], + }, + NamedQualia { + idx: 9, + id: "authorship_non_possessive", + label: "Authorship (non-possessive)", + family: "Authorship", + subfamily: "released", + pcs: [ + 50, 25, 80, 45, 70, 10, 100, 45, 35, 80, 0, 10, 80, 0, 90, 5, 0, + ], + tags: &["it can go now"], + }, + NamedQualia { + idx: 10, + id: "authorship_responsibility", + label: "Authorship (responsibility)", + family: "Authorship", + subfamily: "ethical", + pcs: [ + 35, 35, 75, 35, 60, 40, 95, 55, 30, 75, 5, 20, 70, 0, 75, 30, 10, + ], + tags: &["this will affect others"], + }, + NamedQualia { + idx: 11, + id: "awe_breath_taken", + label: "Awe (breath taken, involuntary)", + family: "Awe", + subfamily: "instant", + pcs: [ + 30, 50, 40, 5, 70, 60, 65, 35, 25, 70, 10, 15, 90, 0, 45, 30, 20, + ], + tags: &["intake of breath", "moment suspended"], + }, + NamedQualia { + idx: 12, + id: "awe_cosmic_smallness", + label: "Awe (cosmic smallness)", + family: "Awe", + subfamily: "humbling", + pcs: [ + 15, 25, 20, -5, 60, 50, 60, 30, 20, 80, 5, 10, 95, 5, 35, 25, 10, + ], + tags: &["tiny self", "vast context"], + }, + NamedQualia { + idx: 13, + id: "awe_sacred_light", + label: "Awe (sacred light through dust)", + family: "Awe", + subfamily: "sacred", + pcs: [ + 35, 30, 35, 20, 80, 40, 70, 55, 35, 95, 10, 15, 95, 0, 50, 15, 20, + ], + tags: &["holy quiet", "illumination"], + }, + NamedQualia { + idx: 14, + id: "awe_vast_open_sky", + label: "Awe (vast open sky)", + family: "Awe", + subfamily: "expansive", + pcs: [ + 40, 35, 45, 10, 75, 45, 70, 40, 20, 65, 15, 10, 95, 0, 55, 20, 15, + ], + tags: &["spaciousness", "small self, safe"], + }, + NamedQualia { + idx: 15, + id: "awe_wordless_yes", + label: "Awe (wordless yes)", + family: "Awe", + subfamily: "affirming", + pcs: [ + 45, 30, 40, 25, 75, 35, 65, 45, 20, 70, 15, 10, 90, 0, 60, 15, 15, + ], + tags: &["acceptance beyond speech"], + }, + NamedQualia { + idx: 16, + id: "becoming_first_shape", + label: "Becoming (first shape emerges)", + family: "Becoming", + subfamily: "nascent", + pcs: [ + 30, 35, 40, 25, 60, 45, 65, 30, 20, 35, 30, 20, 40, 0, 55, 35, 25, + ], + tags: &["outline forming", "tentative coherence"], + }, + NamedQualia { + idx: 17, + id: "becoming_learning_voice", + label: "Becoming (learning your new voice)", + family: "Becoming", + subfamily: "practice", + pcs: [ + 35, 40, 45, 30, 65, 50, 75, 35, 25, 35, 35, 20, 35, 5, 60, 40, 35, + ], + tags: &["testing tone", "adjusting posture"], + }, + NamedQualia { + idx: 18, + id: "becoming_self_trust", + label: "Becoming (trusting who you are now)", + family: "Becoming", + subfamily: "grounded", + pcs: [ + 50, 35, 65, 40, 70, 30, 95, 45, 20, 45, 25, 15, 40, 0, 75, 20, 25, + ], + tags: &["internal alignment"], + }, + NamedQualia { + idx: 19, + id: "becoming_standing_differently", + label: "Becoming (standing differently in the world)", + family: "Becoming", + subfamily: "embodied", + pcs: [ + 40, 45, 60, 35, 70, 45, 85, 45, 20, 40, 35, 15, 35, 0, 65, 30, 40, + ], + tags: &["new posture", "quiet confidence"], + }, + NamedQualia { + idx: 20, + id: "becoming_without_announcement", + label: "Becoming (without announcement)", + family: "Becoming", + subfamily: "unmarked", + pcs: [ + 35, 30, 55, 30, 65, 35, 90, 30, 25, 45, 25, 20, 45, 0, 60, 25, 20, + ], + tags: &["change noticed later"], + }, + NamedQualia { + idx: 21, + id: "communion_belonging", + label: "Communion (belonging)", + family: "Communion", + subfamily: "home", + pcs: [ + 70, 15, 85, 75, 80, 0, 100, 90, 45, 95, 0, 5, 95, 0, 100, 0, 0, + ], + tags: &["home together"], + }, + NamedQualia { + idx: 22, + id: "communion_resonance", + label: "Communion (resonance)", + family: "Communion", + subfamily: "vibrational", + pcs: [65, 20, 80, 70, 75, 5, 95, 85, 30, 95, 0, 0, 95, 0, 95, 0, 0], + tags: &["we are aligned"], + }, + NamedQualia { + idx: 23, + id: "communion_shared_stillness", + label: "Communion (shared stillness)", + family: "Communion", + subfamily: "resting", + pcs: [ + 65, 5, 85, 70, 65, 0, 100, 80, 25, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["resting together"], + }, + NamedQualia { + idx: 24, + id: "communion_unspoken", + label: "Communion (unspoken)", + family: "Communion", + subfamily: "silent", + pcs: [ + 60, 10, 80, 65, 65, 0, 100, 80, 35, 95, 0, 5, 90, 0, 95, 0, 0, + ], + tags: &["together without words"], + }, + NamedQualia { + idx: 25, + id: "communion_without_boundary", + label: "Communion (without boundary)", + family: "Communion", + subfamily: "merged", + pcs: [ + 75, 10, 90, 80, 85, 0, 100, 100, 30, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["no separation"], + }, + NamedQualia { + idx: 26, + id: "courage_public_stand", + label: "Courage (public stand, visible)", + family: "Courage", + subfamily: "visible", + pcs: [ + 25, 65, 70, 30, 60, 75, 90, 85, 20, 40, 30, 20, 35, 10, 60, 50, 55, + ], + tags: &["being seen", "no retreat"], + }, + NamedQualia { + idx: 27, + id: "courage_quiet_step_forward", + label: "Courage (quiet step forward)", + family: "Courage", + subfamily: "quiet", + pcs: [ + 20, 45, 55, 20, 55, 70, 85, 40, 25, 30, 30, 20, 25, 10, 55, 45, 40, + ], + tags: &["steady breath", "movement despite fear"], + }, + NamedQualia { + idx: 28, + id: "courage_repeat_attempt", + label: "Courage (trying again)", + family: "Courage", + subfamily: "persistent", + pcs: [ + 20, 45, 55, 20, 50, 65, 80, 35, 40, 25, 30, 25, 20, 10, 50, 45, 35, + ], + tags: &["getting back up", "determined breath"], + }, + NamedQualia { + idx: 29, + id: "courage_truth_before_outcome", + label: "Courage (truth before outcome)", + family: "Courage", + subfamily: "principled", + pcs: [ + 10, 55, 65, 15, 55, 85, 95, 45, 25, 45, 25, 20, 40, 5, 40, 60, 25, + ], + tags: &["doing right without guarantee"], + }, + NamedQualia { + idx: 30, + id: "courage_voice_unsteady", + label: "Courage (voice unsteady, still speaking)", + family: "Courage", + subfamily: "vulnerable", + pcs: [ + 15, 50, 45, 25, 50, 80, 70, 55, 30, 35, 35, 30, 25, 20, 45, 55, 35, + ], + tags: &["tremor", "truth anyway"], + }, + NamedQualia { + idx: 31, + id: "curiosity_cautious_peek", + label: "Curiosity (cautious peek)", + family: "Curiosity", + subfamily: "tentative", + pcs: [ + 20, 35, 30, 15, 45, 60, 70, 25, 20, 20, 30, 10, 20, 10, 45, 45, 30, + ], + tags: &["testing safety", "leaning slightly"], + }, + NamedQualia { + idx: 32, + id: "curiosity_hungry_focus", + label: "Curiosity (hungry focus)", + family: "Curiosity", + subfamily: "intent", + pcs: [ + 25, 60, 50, 20, 55, 70, 85, 35, 10, 20, 55, 5, 25, 0, 55, 50, 55, + ], + tags: &["leaning in", "attention sharp"], + }, + NamedQualia { + idx: 33, + id: "curiosity_open_ear", + label: "Curiosity (ear tilts toward sound)", + family: "Curiosity", + subfamily: "attentive", + pcs: [ + 30, 40, 35, 20, 55, 45, 70, 35, 15, 20, 35, 5, 25, 0, 55, 30, 35, + ], + tags: &["listening", "alert softness"], + }, + NamedQualia { + idx: 34, + id: "curiosity_playful_probe", + label: "Curiosity (playful probe)", + family: "Curiosity", + subfamily: "playful", + pcs: [ + 40, 55, 45, 35, 70, 45, 65, 45, 10, 10, 45, 5, 20, 0, 65, 35, 45, + ], + tags: &["trying something new", "light risk"], + }, + NamedQualia { + idx: 35, + id: "curiosity_wide_eyes", + label: "Curiosity (wide eyes, unguarded)", + family: "Curiosity", + subfamily: "open", + pcs: [ + 35, 50, 40, 30, 65, 40, 65, 40, 10, 15, 40, 5, 30, 0, 60, 25, 40, + ], + tags: &["interest", "invitation"], + }, + NamedQualia { + idx: 36, + id: "death_final_note", + label: "Death (final note, no echo)", + family: "Death_symbolic", + subfamily: "terminal", + pcs: [ + -20, 10, 40, -5, 20, 15, 95, 20, 45, 55, 0, 50, 45, 0, 0, 20, 0, + ], + tags: &["absolute ending", "no continuation"], + }, + NamedQualia { + idx: 37, + id: "death_grief_without_story", + label: "Death (grief without story)", + family: "Death_symbolic", + subfamily: "raw", + pcs: [ + -35, 30, 20, -5, 25, 45, 70, 30, 65, 55, 0, 75, 45, 5, 0, 40, 5, + ], + tags: &["loss without meaning"], + }, + NamedQualia { + idx: 38, + id: "death_identity_extinguished", + label: "Death (identity extinguished)", + family: "Death_symbolic", + subfamily: "ego", + pcs: [ + -30, 20, 30, -10, 15, 30, 85, 15, 50, 60, 0, 55, 50, 0, 0, 35, 0, + ], + tags: &["name dissolves", "no self-reference"], + }, + NamedQualia { + idx: 39, + id: "death_sacred_end", + label: "Death (sacred end)", + family: "Death_symbolic", + subfamily: "ritual", + pcs: [ + -10, 15, 45, 5, 30, 25, 90, 40, 55, 80, 0, 45, 65, 0, 5, 25, 0, + ], + tags: &["ritual closure", "honored ending"], + }, + NamedQualia { + idx: 40, + id: "death_void", + label: "Death (void)", + family: "Death_symbolic", + subfamily: "empty", + pcs: [ + -40, 5, 20, -20, 5, 10, 80, 5, 30, 70, 0, 60, 60, 0, 0, 30, 0, + ], + tags: &["nothing", "no orientation"], + }, + NamedQualia { + idx: 41, + id: "desire_body_first", + label: "Desire (body decides first)", + family: "Desire", + subfamily: "somatic", + pcs: [ + 30, 80, 70, 40, 55, 80, 65, 35, 20, 5, 95, 5, 5, 10, 55, 60, 90, + ], + tags: &["automatic pull", "skin memory"], + }, + NamedQualia { + idx: 42, + id: "desire_slow_burn", + label: "Desire (slow burn under skin)", + family: "Desire", + subfamily: "contained", + pcs: [ + 20, 55, 55, 20, 50, 85, 70, 30, 25, 10, 85, 10, 10, 15, 45, 65, 70, + ], + tags: &["contained heat", "pressure without release"], + }, + NamedQualia { + idx: 43, + id: "desire_tender_request", + label: "Desire (tender request, not demand)", + family: "Desire", + subfamily: "gentle", + pcs: [ + 25, 45, 35, 30, 60, 70, 70, 35, 30, 15, 65, 15, 10, 10, 55, 35, 55, + ], + tags: &["asking softly", "open hands"], + }, + NamedQualia { + idx: 44, + id: "desire_unapologetic_pull", + label: "Desire (unapologetic pull)", + family: "Desire", + subfamily: "bold", + pcs: [ + 35, 75, 80, 35, 60, 75, 90, 45, 15, 10, 95, 5, 10, 5, 65, 55, 85, + ], + tags: &["want without apology", "heat with spine"], + }, + NamedQualia { + idx: 45, + id: "desire_want_with_teeth", + label: "Desire (want with teeth)", + family: "Desire", + subfamily: "dangerous", + pcs: [ + 10, 85, 80, 25, 45, 95, 85, 35, 15, 5, 95, 10, 10, 20, 35, 85, 90, + ], + tags: &["sharp want", "beautiful danger"], + }, + NamedQualia { + idx: 46, + id: "devotion_after_fight", + label: "Devotion (after the fight, still tender)", + family: "Devotion", + subfamily: "repair", + pcs: [ + 30, 35, 50, 45, 60, 70, 70, 55, 40, 35, 35, 30, 20, 15, 55, 45, 40, + ], + tags: &["bandage touch", "softened pride", "repair heat"], + }, + NamedQualia { + idx: 47, + id: "devotion_bold_yes", + label: "Devotion (bold yes, no bargaining)", + family: "Devotion", + subfamily: "declared", + pcs: [ + 55, 65, 85, 60, 75, 45, 90, 75, 15, 25, 65, 10, 25, 5, 75, 25, 60, + ], + tags: &["public vow", "no hedging", "hands steady"], + }, + NamedQualia { + idx: 48, + id: "devotion_clarity_kiss", + label: "Devotion (clarity kiss, no games)", + family: "Devotion", + subfamily: "clear", + pcs: [ + 45, 55, 75, 55, 70, 55, 95, 55, 20, 15, 75, 10, 10, 5, 60, 35, 65, + ], + tags: &["direct touch", "clear want"], + }, + NamedQualia { + idx: 49, + id: "devotion_daily_return", + label: "Devotion (daily return)", + family: "Devotion", + subfamily: "practice", + pcs: [ + 45, 25, 70, 45, 65, 20, 95, 40, 45, 85, 10, 15, 75, 0, 80, 10, 5, + ], + tags: &["again and again"], + }, + NamedQualia { + idx: 50, + id: "devotion_forgive_and_hold_line", + label: "Devotion (forgive, and still hold the line)", + family: "Devotion", + subfamily: "bounded", + pcs: [ + 10, 35, 70, 25, 55, 80, 90, 45, 45, 25, 30, 35, 15, 10, 40, 55, 35, + ], + tags: &["mercy with backbone", "no return to old shape"], + }, + NamedQualia { + idx: 51, + id: "devotion_gentle_guardian", + label: "Devotion (gentle guardian)", + family: "Devotion", + subfamily: "protective", + pcs: [ + 45, 30, 60, 70, 70, 40, 80, 65, 30, 30, 30, 15, 15, 5, 60, 25, 35, + ], + tags: &["safe room", "steady pulse", "warm boundary"], + }, + NamedQualia { + idx: 52, + id: "devotion_heartbeat_oath", + label: "Devotion (heartbeat oath)", + family: "Devotion", + subfamily: "rhythmic", + pcs: [ + 40, 45, 55, 65, 65, 45, 80, 65, 30, 25, 50, 15, 15, 5, 55, 30, 45, + ], + tags: &["commitment in the groove", "touch as promise"], + }, + NamedQualia { + idx: 53, + id: "devotion_held_after_break", + label: "Devotion (held after the break)", + family: "Devotion", + subfamily: "aftercare", + pcs: [ + 25, 25, 45, 50, 60, 55, 70, 55, 55, 40, 20, 45, 20, 10, 40, 35, 25, + ], + tags: &["aftershock tenderness", "soft reconstruction"], + }, + NamedQualia { + idx: 54, + id: "devotion_honeyed_confession", + label: "Devotion (honeyed confession)", + family: "Devotion", + subfamily: "confessional", + pcs: [ + 25, 45, 50, 45, 60, 75, 85, 45, 40, 20, 60, 15, 10, 20, 55, 40, 50, + ], + tags: &["sweet truth", "risk spoken gently"], + }, + NamedQualia { + idx: 55, + id: "devotion_hurt_but_here", + label: "Devotion (hurt, but here)", + family: "Devotion", + subfamily: "wounded", + pcs: [ + 5, 40, 50, 10, 45, 85, 75, 40, 55, 35, 45, 55, 25, 15, 35, 65, 40, + ], + tags: &[ + "staying costs", + "love with teeth marks", + "quiet refusal to leave", + ], + }, + NamedQualia { + idx: 56, + id: "devotion_jealous_prayer", + label: "Devotion (jealous prayer)", + family: "Devotion", + subfamily: "possessive", + pcs: [ + -5, 55, 55, 20, 45, 85, 70, 35, 35, 20, 80, 20, 10, 25, 30, 70, 55, + ], + tags: &["wanting with claws", "fear of replacement"], + }, + NamedQualia { + idx: 57, + id: "devotion_last_train_home", + label: "Devotion (last train home)", + family: "Devotion", + subfamily: "yearning-steady", + pcs: [ + 20, 35, 55, 15, 50, 70, 70, 35, 80, 20, 45, 35, 15, 10, 40, 45, 35, + ], + tags: &["late-night devotion", "distance folded into rhythm"], + }, + NamedQualia { + idx: 58, + id: "devotion_love_as_act", + label: "Devotion (love as act)", + family: "Devotion", + subfamily: "embodied", + pcs: [ + 55, 30, 75, 55, 70, 20, 95, 60, 35, 90, 15, 15, 80, 0, 90, 10, 5, + ], + tags: &["doing love"], + }, + NamedQualia { + idx: 59, + id: "devotion_oath_in_minor", + label: "Devotion (oath in minor)", + family: "Devotion", + subfamily: "minor-vow", + pcs: [ + 5, 35, 60, -5, 35, 75, 80, 45, 45, 35, 35, 50, 15, 10, 30, 60, 25, + ], + tags: &["promise without comfort", "staying costs"], + }, + NamedQualia { + idx: 60, + id: "devotion_sacrament_of_ordinary", + label: "Devotion (sacrament of the ordinary)", + family: "Devotion", + subfamily: "everyday-sacred", + pcs: [ + 40, 25, 45, 55, 60, 50, 65, 55, 45, 70, 25, 20, 45, 5, 55, 20, 25, + ], + tags: &["kettle steam holiness", "small acts as vows"], + }, + NamedQualia { + idx: 61, + id: "devotion_shelter_in_public", + label: "Devotion (shelter in public)", + family: "Devotion", + subfamily: "communal", + pcs: [ + 35, 40, 55, 55, 60, 55, 75, 85, 35, 45, 25, 20, 30, 5, 55, 30, 35, + ], + tags: &["shoulders touching", "shared shelter"], + }, + NamedQualia { + idx: 62, + id: "devotion_stay_when_ugly", + label: "Devotion (staying when it’s ugly)", + family: "Devotion", + subfamily: "steadfast", + pcs: [ + 25, 35, 55, 45, 55, 75, 80, 50, 45, 35, 40, 35, 20, 10, 55, 55, 35, + ], + tags: &["loyal heat", "unpaid care", "hands still open"], + }, + NamedQualia { + idx: 63, + id: "devotion_total_presence", + label: "Devotion (total presence)", + family: "Devotion", + subfamily: "absorbed", + pcs: [ + 60, 35, 80, 50, 75, 15, 100, 40, 25, 95, 10, 5, 90, 0, 95, 5, 0, + ], + tags: &["nothing else exists"], + }, + NamedQualia { + idx: 64, + id: "devotion_unconditional_soft", + label: "Devotion (unconditional, soft voice)", + family: "Devotion", + subfamily: "unconditional", + pcs: [ + 50, 25, 45, 75, 70, 35, 75, 60, 35, 25, 35, 10, 15, 5, 65, 15, 30, + ], + tags: &["warm certainty", "no conditions spoken"], + }, + NamedQualia { + idx: 65, + id: "devotion_unseen_labor", + label: "Devotion (unseen labor)", + family: "Devotion", + subfamily: "service", + pcs: [ + 10, 25, 55, 15, 45, 70, 70, 35, 55, 55, 15, 40, 25, 10, 35, 45, 20, + ], + tags: &["quiet work", "care without credit"], + }, + NamedQualia { + idx: 66, + id: "devotion_vigil", + label: "Devotion (vigil through the night)", + family: "Devotion", + subfamily: "watchful", + pcs: [ + 10, 25, 55, 5, 40, 75, 65, 40, 60, 55, 25, 55, 35, 10, 35, 55, 20, + ], + tags: &["lamp light", "quiet watching", "staying awake for someone"], + }, + NamedQualia { + idx: 67, + id: "devotion_vow_kept", + label: "Devotion (vow kept)", + family: "Devotion", + subfamily: "promise", + pcs: [ + 50, 30, 80, 45, 70, 25, 95, 45, 50, 95, 5, 20, 85, 0, 90, 10, 0, + ], + tags: &["promise embodied"], + }, + NamedQualia { + idx: 68, + id: "devotion_without_reward", + label: "Devotion (without reward)", + family: "Devotion", + subfamily: "unconditional", + pcs: [ + 30, 20, 65, 30, 55, 25, 95, 30, 40, 90, 5, 20, 80, 0, 65, 15, 0, + ], + tags: &["offering without return"], + }, + NamedQualia { + idx: 69, + id: "devotion_worship_without_church", + label: "Devotion (worship without church)", + family: "Devotion", + subfamily: "sacred", + pcs: [ + 30, 35, 45, 25, 55, 70, 60, 70, 50, 85, 35, 40, 65, 10, 45, 45, 25, + ], + tags: &["knees in the kitchen", "holy ordinary", "soft vow"], + }, + NamedQualia { + idx: 70, + id: "devotion_yes_with_fear", + label: "Devotion (yes, with fear inside it)", + family: "Devotion", + subfamily: "trembling", + pcs: [ + 15, 55, 45, 20, 55, 85, 75, 35, 35, 25, 55, 25, 20, 25, 45, 55, 55, + ], + tags: &["risked closeness", "hands shaking but open"], + }, + NamedQualia { + idx: 71, + id: "discovery_hidden_room", + label: "Discovery (hidden room)", + family: "Discovery", + subfamily: "expansive", + pcs: [ + 40, 45, 45, 25, 70, 45, 70, 35, 20, 35, 45, 10, 50, 0, 65, 35, 40, + ], + tags: &["new space opens"], + }, + NamedQualia { + idx: 72, + id: "discovery_pattern_click", + label: "Discovery (pattern clicks)", + family: "Discovery", + subfamily: "recognition", + pcs: [ + 45, 55, 55, 30, 65, 40, 90, 45, 15, 20, 40, 5, 35, 0, 65, 30, 55, + ], + tags: &["aha", "sudden coherence"], + }, + NamedQualia { + idx: 73, + id: "discovery_self_recognition", + label: "Discovery (seeing yourself clearly)", + family: "Discovery", + subfamily: "personal", + pcs: [ + 35, 40, 55, 30, 60, 50, 95, 45, 35, 40, 30, 20, 35, 0, 60, 30, 40, + ], + tags: &["clarity", "self-seeing"], + }, + NamedQualia { + idx: 74, + id: "discovery_unexpected_truth", + label: "Discovery (unexpected truth)", + family: "Discovery", + subfamily: "revealing", + pcs: [ + 30, 60, 50, 15, 55, 70, 85, 40, 25, 30, 35, 20, 40, 10, 55, 55, 45, + ], + tags: &["didn’t expect that", "truth lands"], + }, + NamedQualia { + idx: 75, + id: "discovery_world_reenchanted", + label: "Discovery (world re-enchanted)", + family: "Discovery", + subfamily: "renewal", + pcs: [ + 50, 45, 50, 35, 75, 35, 70, 50, 20, 45, 40, 10, 55, 0, 75, 25, 45, + ], + tags: &["seeing freshly", "renewed wonder"], + }, + NamedQualia { + idx: 76, + id: "ending_finality", + label: "Ending (finality)", + family: "Ending", + subfamily: "absolute", + pcs: [ + 45, 5, 85, 40, 50, 0, 100, 30, 35, 95, 0, 10, 90, 0, 80, 0, 0, + ], + tags: &["this is finished"], + }, + NamedQualia { + idx: 77, + id: "ending_honored_boundary", + label: "Ending (boundary honored)", + family: "Ending", + subfamily: "ethical", + pcs: [ + 50, 5, 90, 40, 55, 0, 100, 40, 35, 100, 0, 5, 95, 0, 85, 0, 0, + ], + tags: &["stopped at the right place"], + }, + NamedQualia { + idx: 78, + id: "ending_no_echo", + label: "Ending (no echo)", + family: "Ending", + subfamily: "clean", + pcs: [40, 0, 80, 35, 45, 0, 100, 25, 25, 95, 0, 5, 85, 0, 75, 0, 0], + tags: &["no aftermath"], + }, + NamedQualia { + idx: 79, + id: "ending_no_return", + label: "Ending (no return)", + family: "Ending", + subfamily: "irreversible", + pcs: [ + 45, 5, 95, 35, 50, 0, 100, 25, 20, 100, 0, 0, 100, 0, 80, 0, 0, + ], + tags: &["cannot be reopened"], + }, + NamedQualia { + idx: 80, + id: "ending_satisfied", + label: "Ending (satisfied)", + family: "Ending", + subfamily: "complete", + pcs: [55, 5, 85, 45, 60, 0, 100, 35, 30, 90, 0, 0, 90, 0, 85, 0, 0], + tags: &["nothing missing"], + }, + NamedQualia { + idx: 81, + id: "endurance_dignified_silence", + label: "Dignified endurance (no explanation)", + family: "Endurance", + subfamily: "dignified", + pcs: [ + 5, 30, 65, -20, 45, 70, 80, 40, 55, 45, 10, 60, 35, 5, 35, 55, 25, + ], + tags: &["upright stillness", "unsaid strength"], + }, + NamedQualia { + idx: 82, + id: "endurance_ritual_breathing", + label: "Ritual endurance (breathing anyway)", + family: "Endurance", + subfamily: "ritual", + pcs: [ + 10, 45, 50, -5, 55, 65, 55, 80, 60, 90, 20, 65, 55, 10, 45, 40, 30, + ], + tags: &["held pain", "shared breath", "continuance"], + }, + NamedQualia { + idx: 83, + id: "faith_after_disappointment", + label: "Faith (after disappointment)", + family: "Faith", + subfamily: "tested", + pcs: [ + 10, 30, 55, 20, 45, 40, 90, 30, 45, 75, 10, 35, 65, 0, 45, 40, 10, + ], + tags: &["not rewarded", "still open"], + }, + NamedQualia { + idx: 84, + id: "faith_quiet_yes", + label: "Faith (quiet yes)", + family: "Faith", + subfamily: "affirmation", + pcs: [ + 35, 20, 60, 35, 55, 20, 95, 30, 30, 85, 10, 15, 75, 0, 70, 15, 5, + ], + tags: &["inner assent"], + }, + NamedQualia { + idx: 85, + id: "faith_standing_without_sign", + label: "Faith (standing without sign)", + family: "Faith", + subfamily: "unanswered", + pcs: [ + 20, 25, 60, 25, 50, 35, 85, 25, 30, 80, 10, 25, 70, 0, 55, 35, 5, + ], + tags: &["no reply", "still here"], + }, + NamedQualia { + idx: 86, + id: "faith_unprovable_ground", + label: "Faith (unprovable ground)", + family: "Faith", + subfamily: "ontological", + pcs: [ + 30, 25, 70, 30, 55, 30, 100, 25, 25, 90, 5, 20, 80, 0, 75, 20, 0, + ], + tags: &["standing on what cannot be shown"], + }, + NamedQualia { + idx: 87, + id: "faith_waiting_as_practice", + label: "Faith (waiting as practice)", + family: "Faith", + subfamily: "temporal", + pcs: [ + 25, 15, 55, 25, 45, 20, 85, 20, 35, 85, 5, 15, 75, 0, 60, 10, 0, + ], + tags: &["time sanctified"], + }, + NamedQualia { + idx: 88, + id: "grief_memory_flash", + label: "Grief (memory flash, sudden)", + family: "Grief", + subfamily: "intrusive", + pcs: [ + -30, 55, 25, -15, 30, 85, 75, 20, 90, 20, 10, 85, 25, 10, 10, 60, 35, + ], + tags: &["sudden ache", "memory ambush"], + }, + NamedQualia { + idx: 89, + id: "grief_private_weight", + label: "Grief (private weight, no audience)", + family: "Grief", + subfamily: "inward", + pcs: [ + -40, 25, 20, -30, 25, 65, 60, 10, 75, 25, 5, 95, 15, 15, 15, 45, 20, + ], + tags: &["weight carried alone", "quiet ache"], + }, + NamedQualia { + idx: 90, + id: "grief_sacred_mourning", + label: "Grief (sacred mourning, held)", + family: "Grief", + subfamily: "ritual", + pcs: [ + -25, 35, 35, -10, 35, 70, 55, 80, 80, 95, 5, 90, 70, 5, 25, 40, 20, + ], + tags: &["shared mourning", "holy weight"], + }, + NamedQualia { + idx: 91, + id: "grief_soft_acceptance", + label: "Grief (soft acceptance, not healed)", + family: "Grief", + subfamily: "accepting", + pcs: [ + -10, 25, 40, 5, 40, 55, 65, 35, 70, 30, 5, 75, 25, 5, 35, 35, 25, + ], + tags: &["living with loss", "gentle weight"], + }, + NamedQualia { + idx: 92, + id: "grief_unfinished_sentence", + label: "Grief (unfinished sentence)", + family: "Grief", + subfamily: "incomplete", + pcs: [ + -25, 40, 30, -15, 30, 90, 70, 20, 85, 25, 10, 90, 20, 10, 10, 65, 15, + ], + tags: &["left unsaid", "hanging thread"], + }, + NamedQualia { + idx: 93, + id: "innocence_before_knowing", + label: "Innocence (before knowing)", + family: "Innocence", + subfamily: "pre-fall", + pcs: [ + 45, 25, 30, 35, 65, 30, 55, 40, 55, 30, 20, 10, 30, 0, 65, 20, 20, + ], + tags: &["unmarked perception", "soft wonder"], + }, + NamedQualia { + idx: 94, + id: "innocence_first_light", + label: "Innocence (first light through curtains)", + family: "Innocence", + subfamily: "fresh", + pcs: [ + 55, 30, 40, 45, 75, 25, 65, 45, 20, 35, 20, 5, 35, 0, 75, 10, 30, + ], + tags: &["newness", "gentle optimism"], + }, + NamedQualia { + idx: 95, + id: "innocence_playful_hum", + label: "Innocence (playful hum, alone)", + family: "Innocence", + subfamily: "self-contained", + pcs: [ + 55, 30, 45, 45, 70, 20, 60, 25, 25, 20, 20, 5, 20, 0, 65, 10, 20, + ], + tags: &["content alone", "private joy"], + }, + NamedQualia { + idx: 96, + id: "innocence_unquestioned_trust", + label: "Innocence (unquestioned trust)", + family: "Innocence", + subfamily: "trusting", + pcs: [ + 60, 35, 35, 55, 70, 20, 60, 55, 30, 25, 25, 5, 25, 0, 80, 10, 25, + ], + tags: &["openness", "no second thought"], + }, + NamedQualia { + idx: 97, + id: "innocence_vulnerable_smile", + label: "Innocence (vulnerable smile)", + family: "Innocence", + subfamily: "unguarded", + pcs: [ + 50, 40, 35, 50, 65, 45, 70, 45, 35, 25, 30, 10, 25, 5, 70, 25, 40, + ], + tags: &["open face", "risked warmth"], + }, + NamedQualia { + idx: 98, + id: "integration_breathing_whole", + label: "Integration (breathing as one)", + family: "Integration", + subfamily: "embodied", + pcs: [ + 40, 35, 70, 40, 65, 45, 85, 55, 30, 40, 25, 20, 35, 0, 55, 30, 35, + ], + tags: &["body and mind aligned"], + }, + NamedQualia { + idx: 99, + id: "integration_dual_truth", + label: "Integration (two truths held)", + family: "Integration", + subfamily: "paradox", + pcs: [ + 35, 30, 55, 35, 60, 45, 95, 45, 45, 50, 20, 25, 45, 0, 60, 30, 10, + ], + tags: &["both/and"], + }, + NamedQualia { + idx: 100, + id: "integration_final_truth", + label: "Integration (final truth, nothing added)", + family: "Integration", + subfamily: "complete", + pcs: [ + 45, 30, 75, 30, 65, 35, 98, 50, 40, 45, 20, 25, 40, 0, 60, 25, 15, + ], + tags: &["nothing left unsaid"], + }, + NamedQualia { + idx: 101, + id: "integration_lived_wisdom", + label: "Integration (lived wisdom)", + family: "Integration", + subfamily: "mature", + pcs: [ + 55, 30, 70, 45, 70, 25, 95, 50, 40, 60, 20, 15, 55, 0, 80, 20, 10, + ], + tags: &["earned calm"], + }, + NamedQualia { + idx: 102, + id: "integration_no_repair_needed", + label: "Integration (no repair needed)", + family: "Integration", + subfamily: "acceptance", + pcs: [ + 50, 25, 70, 45, 70, 20, 95, 45, 35, 55, 20, 15, 50, 0, 75, 15, 5, + ], + tags: &["this is enough"], + }, + NamedQualia { + idx: 103, + id: "integration_present_wholeness", + label: "Integration (present wholeness)", + family: "Integration", + subfamily: "now", + pcs: [ + 60, 30, 75, 50, 75, 15, 100, 45, 25, 65, 15, 10, 60, 0, 85, 10, 0, + ], + tags: &["here", "complete"], + }, + NamedQualia { + idx: 104, + id: "integration_soft_arrival", + label: "Integration (soft arrival, no banner)", + family: "Integration", + subfamily: "quiet", + pcs: [ + 30, 25, 65, 25, 55, 40, 90, 40, 35, 35, 15, 25, 30, 0, 45, 30, 20, + ], + tags: &["peace without announcement"], + }, + NamedQualia { + idx: 105, + id: "integration_whole_with_scar", + label: "Integration (whole, scar visible)", + family: "Integration", + subfamily: "honest", + pcs: [ + 35, 45, 70, 30, 60, 55, 95, 55, 45, 35, 25, 35, 30, 0, 50, 45, 45, + ], + tags: &["nothing hidden", "earned calm"], + }, + NamedQualia { + idx: 106, + id: "integration_yes_and_no", + label: "Integration (yes and no coexist)", + family: "Integration", + subfamily: "paradox", + pcs: [ + 20, 40, 60, 15, 55, 65, 85, 45, 50, 30, 20, 40, 35, 5, 40, 55, 30, + ], + tags: &["holding opposites", "breathing through both"], + }, + NamedQualia { + idx: 107, + id: "letting_go_complete", + label: "Letting Go (complete)", + family: "Letting_Go", + subfamily: "final", + pcs: [ + 80, 0, 100, 75, 85, 0, 100, 35, 0, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["nothing left to release"], + }, + NamedQualia { + idx: 108, + id: "letting_go_non_attachment", + label: "Letting Go (non-attachment)", + family: "Letting_Go", + subfamily: "free", + pcs: [ + 75, 0, 100, 70, 80, 0, 100, 40, 10, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["nothing clings"], + }, + NamedQualia { + idx: 109, + id: "letting_go_release", + label: "Letting Go (release)", + family: "Letting_Go", + subfamily: "ease", + pcs: [60, 5, 90, 55, 65, 0, 100, 40, 25, 95, 0, 0, 90, 0, 90, 0, 0], + tags: &["no holding"], + }, + NamedQualia { + idx: 110, + id: "letting_go_trust", + label: "Letting Go (trust)", + family: "Letting_Go", + subfamily: "faithful", + pcs: [ + 70, 5, 95, 65, 75, 0, 100, 45, 20, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["it will be okay"], + }, + NamedQualia { + idx: 111, + id: "letting_go_without_grief", + label: "Letting Go (without grief)", + family: "Letting_Go", + subfamily: "light", + pcs: [ + 65, 0, 90, 60, 70, 0, 100, 35, 15, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["no sadness"], + }, + NamedQualia { + idx: 112, + id: "liberation_bare_spine", + label: "Liberation (bare spine, no armor)", + family: "Liberation", + subfamily: "bare", + pcs: [ + 65, 75, 85, 45, 75, 40, 90, 70, 10, 20, 55, 20, 35, 5, 80, 30, 55, + ], + tags: &["standing visible", "permission embodied"], + }, + NamedQualia { + idx: 113, + id: "longing_body_memory", + label: "Longing (body remembers before mind agrees)", + family: "Longing", + subfamily: "somatic", + pcs: [ + 5, 65, 40, 20, 55, 85, 60, 25, 55, 10, 85, 20, 10, 10, 35, 55, 80, + ], + tags: &["skin recollection", "automatic pull"], + }, + NamedQualia { + idx: 114, + id: "longing_bright_edge", + label: "Longing (bright edge, not despair)", + family: "Longing", + subfamily: "hopeful", + pcs: [ + 20, 55, 35, 20, 65, 75, 70, 40, 35, 15, 65, 20, 15, 10, 70, 35, 65, + ], + tags: &["reaching with light in it", "ache that believes"], + }, + NamedQualia { + idx: 115, + id: "longing_choir_ache", + label: "Longing (choir ache, communal)", + family: "Longing", + subfamily: "communal-sacred", + pcs: [ + 5, 50, 45, 0, 55, 75, 55, 90, 55, 90, 45, 55, 65, 5, 45, 40, 30, + ], + tags: &["shared yearning", "ritual want"], + }, + NamedQualia { + idx: 116, + id: "longing_clean_hurt", + label: "Longing (clean hurt, no drama)", + family: "Longing", + subfamily: "plainspoken", + pcs: [ + -5, 45, 40, -10, 45, 80, 90, 25, 55, 15, 55, 45, 10, 10, 25, 55, 55, + ], + tags: &["straight ache", "truth without glitter"], + }, + NamedQualia { + idx: 117, + id: "longing_defiant_reach", + label: "Longing (defiant reach, no shame)", + family: "Longing", + subfamily: "bold", + pcs: [ + 15, 70, 70, 25, 60, 80, 85, 55, 25, 15, 80, 20, 15, 5, 60, 55, 85, + ], + tags: &["I want you and I’m not small for it", "reach with spine"], + }, + NamedQualia { + idx: 118, + id: "longing_doorway_pause", + label: "Longing (doorway pause, footsteps behind you)", + family: "Longing", + subfamily: "suspended", + pcs: [ + 0, 55, 35, -5, 50, 95, 70, 20, 45, 15, 65, 35, 10, 15, 35, 60, 85, + ], + tags: &["time held by a thread", "decision not taken"], + }, + NamedQualia { + idx: 119, + id: "longing_hollow_room", + label: "Longing (hollow room after laughter)", + family: "Longing", + subfamily: "afterglow", + pcs: [ + -10, 35, 25, -20, 45, 80, 55, 20, 70, 20, 50, 45, 15, 15, 20, 55, 45, + ], + tags: &["afterparty silence", "echoing want"], + }, + NamedQualia { + idx: 120, + id: "longing_knife_softly", + label: "Longing (knife softly, smiling)", + family: "Longing", + subfamily: "bittersweet", + pcs: [ + 0, 55, 40, 5, 50, 90, 85, 30, 55, 20, 70, 35, 15, 15, 35, 70, 70, + ], + tags: &["sweet pain", "beautiful wrongness", "truth with perfume"], + }, + NamedQualia { + idx: 121, + id: "longing_moonlit_pull", + label: "Longing (moonlit pull, inevitable)", + family: "Longing", + subfamily: "magnetic", + pcs: [ + 10, 65, 45, 5, 50, 85, 70, 35, 35, 15, 85, 20, 20, 15, 40, 55, 75, + ], + tags: &["gravity in the chest", "almost-touch"], + }, + NamedQualia { + idx: 122, + id: "longing_open_hands", + label: "Longing (open hands, no demand)", + family: "Longing", + subfamily: "tender", + pcs: [ + 10, 50, 30, 10, 55, 80, 65, 35, 45, 20, 65, 25, 15, 15, 55, 40, 60, + ], + tags: &["reaching", "ache that stays kind"], + }, + NamedQualia { + idx: 123, + id: "longing_phone_in_hand", + label: "Longing (phone in hand, not sent)", + family: "Longing", + subfamily: "withheld", + pcs: [ + -10, 45, 25, -5, 45, 90, 70, 15, 55, 15, 70, 35, 10, 25, 30, 55, 70, + ], + tags: &["unsent message", "throat tight", "hovering"], + }, + NamedQualia { + idx: 124, + id: "longing_prayer_disguised", + label: "Longing (prayer disguised as pop)", + family: "Longing", + subfamily: "secret-sacred", + pcs: [ + 5, 45, 35, 5, 55, 80, 60, 55, 50, 75, 55, 40, 55, 10, 50, 40, 40, + ], + tags: &["want as hymn", "soft congregation"], + }, + NamedQualia { + idx: 125, + id: "longing_snowglobe_memory", + label: "Longing (snowglobe memory, perfect and sealed)", + family: "Longing", + subfamily: "idealized", + pcs: [ + 5, 30, 25, -10, 55, 70, 55, 15, 95, 25, 45, 35, 20, 10, 25, 30, 25, + ], + tags: &["ideal memory", "untouchable sweetness"], + }, + NamedQualia { + idx: 126, + id: "longing_sunrise_text", + label: "Longing (sunrise text you almost send)", + family: "Longing", + subfamily: "hesitant-hope", + pcs: [ + 10, 45, 30, 15, 60, 85, 70, 15, 45, 15, 60, 25, 10, 20, 65, 45, 75, + ], + tags: &["hovering courage", "almost-yes"], + }, + NamedQualia { + idx: 127, + id: "longing_sweet_surrender", + label: "Longing (sweet surrender)", + family: "Longing", + subfamily: "accepting", + pcs: [ + 10, 40, 35, 15, 50, 70, 60, 30, 55, 20, 60, 25, 15, 10, 40, 35, 45, + ], + tags: &["wanting without fight", "soft fall"], + }, + NamedQualia { + idx: 128, + id: "longing_train_window", + label: "Longing (train window, lights passing)", + family: "Longing", + subfamily: "moving-away", + pcs: [ + 0, 35, 30, -10, 45, 75, 55, 20, 80, 15, 55, 40, 20, 10, 25, 45, 35, + ], + tags: &["distance", "blurred warmth", "goodbye unsaid"], + }, + NamedQualia { + idx: 129, + id: "longing_warm_regret", + label: "Longing (warm regret, forgiving self)", + family: "Longing", + subfamily: "regret-soft", + pcs: [ + 0, 35, 35, 20, 50, 75, 75, 30, 80, 20, 45, 40, 15, 20, 30, 45, 35, + ], + tags: &["gentle regret", "soft self-mercy"], + }, + NamedQualia { + idx: 130, + id: "loss_control_body_leads", + label: "Loss of Control (body leads, mind follows)", + family: "Loss_of_Control", + subfamily: "somatic", + pcs: [ + 5, 75, 30, 30, 50, 85, 45, 40, 10, 20, 55, 15, 25, 5, 25, 75, 65, + ], + tags: &["instinct surge", "no plan"], + }, + NamedQualia { + idx: 131, + id: "loss_control_ground_slips", + label: "Loss of Control (ground slips)", + family: "Loss_of_Control", + subfamily: "destabilized", + pcs: [ + -5, 65, 20, 5, 45, 90, 55, 25, 15, 20, 35, 25, 35, 15, 20, 80, 60, + ], + tags: &["tilt", "nothing stable"], + }, + NamedQualia { + idx: 132, + id: "loss_control_overwhelm", + label: "Loss of Control (overwhelm floods)", + family: "Loss_of_Control", + subfamily: "flooded", + pcs: [ + -15, 85, 15, 10, 35, 95, 30, 30, 20, 25, 45, 40, 35, 25, 15, 85, 70, + ], + tags: &["too much", "no container"], + }, + NamedQualia { + idx: 133, + id: "loss_control_silent_panic", + label: "Loss of Control (silent panic)", + family: "Loss_of_Control", + subfamily: "internal", + pcs: [ + -20, 60, 20, -5, 30, 90, 50, 15, 25, 20, 20, 35, 25, 30, 10, 80, 40, + ], + tags: &["contained panic", "no exit"], + }, + NamedQualia { + idx: 134, + id: "loss_control_words_fail", + label: "Loss of Control (words fail first)", + family: "Loss_of_Control", + subfamily: "inarticulate", + pcs: [ + -10, 55, 25, 0, 40, 80, 40, 35, 25, 30, 30, 35, 30, 20, 20, 70, 45, + ], + tags: &["stammer", "expression collapse"], + }, + NamedQualia { + idx: 135, + id: "love_allowing", + label: "Love (allowing)", + family: "Love_non_erotic", + subfamily: "spacious", + pcs: [ + 65, 15, 85, 70, 75, 0, 100, 60, 25, 95, 0, 0, 90, 0, 95, 0, 0, + ], + tags: &["be as you are"], + }, + NamedQualia { + idx: 136, + id: "love_benevolent_regard", + label: "Love (benevolent regard)", + family: "Love_non_erotic", + subfamily: "gentle", + pcs: [65, 20, 75, 70, 75, 5, 95, 70, 30, 85, 0, 5, 75, 0, 90, 0, 0], + tags: &["I want you to be well"], + }, + NamedQualia { + idx: 137, + id: "love_endurance", + label: "Love (endurance)", + family: "Love_non_erotic", + subfamily: "steady", + pcs: [ + 55, 25, 80, 60, 65, 15, 95, 65, 45, 90, 0, 15, 80, 0, 90, 5, 0, + ], + tags: &["still here after time"], + }, + NamedQualia { + idx: 138, + id: "love_unconditional", + label: "Love (unconditional)", + family: "Love_non_erotic", + subfamily: "absolute", + pcs: [ + 70, 15, 90, 75, 80, 0, 100, 70, 30, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["nothing withheld"], + }, + NamedQualia { + idx: 139, + id: "love_without_need", + label: "Love (without need)", + family: "Love_non_erotic", + subfamily: "free", + pcs: [ + 60, 15, 80, 65, 70, 0, 100, 55, 20, 90, 0, 0, 85, 0, 95, 0, 0, + ], + tags: &["nothing required"], + }, + NamedQualia { + idx: 140, + id: "meaning_earned_through_pain", + label: "Meaning (earned through pain)", + family: "Meaning", + subfamily: "costly", + pcs: [ + 30, 35, 65, 30, 55, 45, 95, 45, 50, 60, 15, 30, 60, 0, 65, 30, 10, + ], + tags: &["worth the cost"], + }, + NamedQualia { + idx: 141, + id: "meaning_pattern_understood", + label: "Meaning (pattern understood)", + family: "Meaning", + subfamily: "coherence", + pcs: [ + 45, 30, 60, 40, 65, 25, 95, 40, 35, 45, 20, 15, 50, 0, 70, 20, 10, + ], + tags: &["it makes sense now"], + }, + NamedQualia { + idx: 142, + id: "meaning_shared", + label: "Meaning (shared, not owned)", + family: "Meaning", + subfamily: "collective", + pcs: [ + 50, 35, 55, 50, 70, 25, 90, 70, 40, 55, 20, 15, 55, 0, 80, 20, 20, + ], + tags: &["we recognize this together"], + }, + NamedQualia { + idx: 143, + id: "meaning_sufficient", + label: "Meaning (sufficient, not total)", + family: "Meaning", + subfamily: "enough", + pcs: [ + 55, 20, 70, 45, 70, 15, 95, 40, 30, 65, 10, 10, 60, 0, 85, 10, 0, + ], + tags: &["this is enough"], + }, + NamedQualia { + idx: 144, + id: "meaning_without_explanation", + label: "Meaning (without explanation)", + family: "Meaning", + subfamily: "felt", + pcs: [ + 40, 25, 55, 35, 60, 20, 85, 35, 30, 55, 15, 10, 55, 0, 65, 15, 5, + ], + tags: &["knowing without words"], + }, + NamedQualia { + idx: 145, + id: "play_childlike_energy", + label: "Play (childlike energy, not childish)", + family: "Play", + subfamily: "pure", + pcs: [ + 65, 75, 55, 55, 85, 35, 65, 65, 35, 15, 35, 5, 20, 0, 85, 20, 60, + ], + tags: &["bounce", "laughter in motion"], + }, + NamedQualia { + idx: 146, + id: "play_light_feet", + label: "Play (light feet, quick turns)", + family: "Play", + subfamily: "nimble", + pcs: [ + 60, 65, 55, 45, 80, 35, 65, 55, 15, 10, 30, 5, 20, 0, 70, 25, 55, + ], + tags: &["movement joy", "spark"], + }, + NamedQualia { + idx: 147, + id: "play_private_delight", + label: "Play (private delight, no audience)", + family: "Play", + subfamily: "intimate", + pcs: [ + 55, 35, 45, 50, 65, 25, 70, 25, 20, 10, 30, 5, 15, 0, 60, 15, 30, + ], + tags: &["inside joke", "soft fun"], + }, + NamedQualia { + idx: 148, + id: "play_rule_break_smile", + label: "Play (rule-break with a smile)", + family: "Play", + subfamily: "subversive", + pcs: [ + 50, 70, 65, 35, 75, 65, 80, 55, 10, 5, 40, 5, 10, 0, 65, 55, 70, + ], + tags: &["cheeky defiance", "fun danger"], + }, + NamedQualia { + idx: 149, + id: "play_teasing_wink", + label: "Play (teasing wink)", + family: "Play", + subfamily: "tease", + pcs: [ + 55, 60, 60, 40, 70, 55, 70, 60, 15, 5, 45, 5, 10, 0, 60, 45, 65, + ], + tags: &["knowing grin", "almost-mischief"], + }, + NamedQualia { + idx: 150, + id: "power_commanding_voice", + label: "Power (commanding voice, fills room)", + family: "Power", + subfamily: "commanding", + pcs: [ + 30, 75, 98, 40, 65, 65, 95, 85, 10, 35, 25, 5, 35, 0, 45, 40, 70, + ], + tags: &["authority", "room listens"], + }, + NamedQualia { + idx: 151, + id: "power_crowned_after_cost", + label: "Power (crowned after cost)", + family: "Power", + subfamily: "earned", + pcs: [ + 35, 65, 95, 25, 60, 70, 85, 75, 35, 55, 25, 30, 45, 0, 45, 45, 60, + ], + tags: &["weight of authority", "earned voice"], + }, + NamedQualia { + idx: 152, + id: "power_dangerous_calm", + label: "Power (dangerous calm)", + family: "Power", + subfamily: "threatening", + pcs: [ + 10, 50, 95, -5, 40, 90, 90, 40, 10, 10, 15, 10, 30, 0, 20, 75, 45, + ], + tags: &["stillness before strike", "quiet threat"], + }, + NamedQualia { + idx: 153, + id: "power_rooted_presence", + label: "Power (rooted presence, unmoved)", + family: "Power", + subfamily: "rooted", + pcs: [ + 20, 45, 95, 15, 50, 50, 90, 55, 10, 20, 15, 10, 25, 0, 30, 35, 40, + ], + tags: &["grounded authority", "still center"], + }, + NamedQualia { + idx: 154, + id: "power_unshowy_control", + label: "Power (unshowy control)", + family: "Power", + subfamily: "quiet", + pcs: [ + 15, 30, 90, 5, 45, 55, 85, 40, 15, 15, 10, 15, 20, 0, 25, 35, 25, + ], + tags: &["nothing to prove", "hands steady"], + }, + NamedQualia { + idx: 155, + id: "presence_enough", + label: "Presence (enough)", + family: "Presence", + subfamily: "complete", + pcs: [ + 60, 5, 85, 50, 60, 0, 100, 35, 15, 100, 0, 0, 100, 0, 100, 0, 0, + ], + tags: &["nothing else required"], + }, + NamedQualia { + idx: 156, + id: "presence_now", + label: "Presence (now)", + family: "Presence", + subfamily: "immediate", + pcs: [ + 55, 10, 80, 45, 60, 5, 100, 35, 20, 95, 0, 5, 90, 0, 85, 0, 0, + ], + tags: &["here"], + }, + NamedQualia { + idx: 157, + id: "presence_shared_space", + label: "Presence (shared space)", + family: "Presence", + subfamily: "with", + pcs: [55, 10, 70, 55, 60, 5, 95, 65, 30, 90, 0, 5, 90, 0, 85, 0, 0], + tags: &["together without speech"], + }, + NamedQualia { + idx: 158, + id: "presence_unbroken_attention", + label: "Presence (unbroken attention)", + family: "Presence", + subfamily: "continuous", + pcs: [ + 50, 10, 80, 45, 55, 5, 100, 30, 20, 95, 0, 0, 95, 0, 90, 0, 0, + ], + tags: &["nothing drifts"], + }, + NamedQualia { + idx: 159, + id: "presence_without_self", + label: "Presence (without self-reference)", + family: "Presence", + subfamily: "egoless", + pcs: [50, 5, 75, 40, 55, 5, 100, 25, 15, 95, 0, 0, 95, 0, 85, 0, 0], + tags: &["no observer"], + }, + NamedQualia { + idx: 160, + id: "purpose_alignment", + label: "Purpose (alignment felt)", + family: "Purpose", + subfamily: "aligned", + pcs: [ + 60, 30, 75, 50, 75, 10, 100, 45, 25, 75, 10, 5, 70, 0, 95, 5, 0, + ], + tags: &["everything points the same way"], + }, + NamedQualia { + idx: 161, + id: "purpose_lived_not_declared", + label: "Purpose (lived, not declared)", + family: "Purpose", + subfamily: "implicit", + pcs: [ + 55, 25, 70, 45, 70, 15, 95, 40, 30, 65, 15, 10, 65, 0, 90, 10, 5, + ], + tags: &["no manifesto needed"], + }, + NamedQualia { + idx: 162, + id: "purpose_long_arc", + label: "Purpose (long arc)", + family: "Purpose", + subfamily: "enduring", + pcs: [ + 50, 35, 70, 40, 65, 30, 90, 45, 45, 70, 20, 20, 65, 0, 85, 20, 20, + ], + tags: &["this continues"], + }, + NamedQualia { + idx: 163, + id: "purpose_quiet_direction", + label: "Purpose (quiet direction)", + family: "Purpose", + subfamily: "compass", + pcs: [ + 45, 30, 65, 40, 65, 20, 90, 45, 30, 55, 25, 15, 55, 0, 80, 20, 15, + ], + tags: &["I know where this goes"], + }, + NamedQualia { + idx: 164, + id: "purpose_service", + label: "Purpose (in service)", + family: "Purpose", + subfamily: "offered", + pcs: [ + 50, 25, 55, 50, 65, 20, 95, 70, 35, 65, 20, 10, 60, 0, 85, 15, 10, + ], + tags: &["for others"], + }, + NamedQualia { + idx: 165, + id: "rebirth_first_breath", + label: "Rebirth (first breath)", + family: "Rebirth", + subfamily: "emergence", + pcs: [ + 20, 25, 30, 20, 35, 25, 50, 20, 0, 55, 15, 10, 65, 0, 40, 15, 20, + ], + tags: &["breath enters", "fragile life"], + }, + NamedQualia { + idx: 166, + id: "rebirth_fragile_yes", + label: "Rebirth (fragile yes)", + family: "Rebirth", + subfamily: "tentative", + pcs: [ + 40, 35, 35, 35, 55, 35, 70, 35, 5, 50, 25, 10, 55, 0, 65, 25, 30, + ], + tags: &["yes whispered"], + }, + NamedQualia { + idx: 167, + id: "rebirth_light_returns", + label: "Rebirth (light returns)", + family: "Rebirth", + subfamily: "illumination", + pcs: [ + 35, 35, 35, 30, 55, 30, 65, 30, 10, 50, 25, 10, 60, 0, 55, 20, 30, + ], + tags: &["seeing again", "soft illumination"], + }, + NamedQualia { + idx: 168, + id: "rebirth_new_life_stirs", + label: "Rebirth (new life stirs)", + family: "Rebirth", + subfamily: "awakening", + pcs: [ + 50, 45, 45, 40, 65, 40, 75, 40, 5, 55, 35, 5, 65, 0, 75, 30, 40, + ], + tags: &["life energy returns"], + }, + NamedQualia { + idx: 169, + id: "rebirth_without_past", + label: "Rebirth (without the past)", + family: "Rebirth", + subfamily: "clean", + pcs: [ + 30, 30, 40, 25, 50, 25, 80, 25, 0, 45, 20, 5, 55, 0, 60, 20, 25, + ], + tags: &["no backstory"], + }, + NamedQualia { + idx: 170, + id: "release_acceptance", + label: "Release (acceptance settles)", + family: "Release", + subfamily: "settled", + pcs: [ + 45, 25, 50, 40, 65, 20, 90, 40, 30, 40, 10, 20, 35, 0, 60, 15, 5, + ], + tags: &["settled truth"], + }, + NamedQualia { + idx: 171, + id: "release_breathing_again", + label: "Release (breathing again)", + family: "Release", + subfamily: "physiological", + pcs: [ + 35, 20, 40, 30, 55, 20, 80, 35, 25, 30, 10, 20, 30, 0, 50, 15, 10, + ], + tags: &["lungs open", "calm returns"], + }, + NamedQualia { + idx: 172, + id: "release_energy_discharged", + label: "Release (energy discharged)", + family: "Release", + subfamily: "physical", + pcs: [ + 40, 45, 45, 35, 60, 25, 70, 45, 15, 20, 20, 10, 25, 0, 55, 20, 20, + ], + tags: &["spent", "empty but okay"], + }, + NamedQualia { + idx: 173, + id: "release_laughter_break", + label: "Release (laughter breaks tension)", + family: "Release", + subfamily: "joyful", + pcs: [ + 55, 55, 45, 50, 75, 25, 70, 60, 20, 15, 25, 10, 20, 0, 70, 20, 40, + ], + tags: &["relief through joy"], + }, + NamedQualia { + idx: 174, + id: "release_tears_fall", + label: "Release (tears finally fall)", + family: "Release", + subfamily: "emotional", + pcs: [ + 15, 35, 30, 25, 50, 30, 65, 30, 45, 35, 10, 45, 30, 5, 35, 25, 15, + ], + tags: &["crying", "pressure leaves"], + }, + NamedQualia { + idx: 175, + id: "repair_after_shatter", + label: "Repair (after shatter, hands shaking)", + family: "Repair", + subfamily: "fragile", + pcs: [ + 5, 35, 40, 10, 45, 80, 65, 35, 45, 25, 15, 55, 20, 20, 35, 60, 30, + ], + tags: &["careful touch", "fear of breaking again"], + }, + NamedQualia { + idx: 176, + id: "repair_bandage_kindness", + label: "Repair (bandage kindness)", + family: "Repair", + subfamily: "gentle", + pcs: [ + 25, 25, 45, 55, 60, 45, 70, 55, 30, 20, 10, 30, 15, 5, 55, 25, 35, + ], + tags: &["soft care", "no pressure"], + }, + NamedQualia { + idx: 177, + id: "repair_earned_trust", + label: "Repair (earned trust, not assumed)", + family: "Repair", + subfamily: "earned", + pcs: [ + 20, 35, 55, 35, 55, 65, 85, 45, 40, 25, 20, 35, 20, 10, 45, 45, 40, + ], + tags: &["slow rebuilding", "watchful warmth"], + }, + NamedQualia { + idx: 178, + id: "repair_no_promises", + label: "Repair (no promises, just presence)", + family: "Repair", + subfamily: "present", + pcs: [ + 10, 25, 50, 25, 45, 55, 90, 35, 35, 30, 10, 30, 20, 5, 30, 35, 20, + ], + tags: &["showing up", "no future claims"], + }, + NamedQualia { + idx: 179, + id: "repair_touch_returns", + label: "Repair (touch returns cautiously)", + family: "Repair", + subfamily: "reopening", + pcs: [ + 25, 40, 45, 45, 60, 70, 70, 45, 35, 20, 30, 30, 15, 10, 45, 40, 45, + ], + tags: &["almost-touch", "testing warmth"], + }, + NamedQualia { + idx: 180, + id: "return_place_unchanged", + label: "Return (place unchanged, you are)", + family: "Return", + subfamily: "contrast", + pcs: [ + 25, 30, 45, 30, 50, 40, 80, 35, 60, 35, 20, 25, 30, 0, 50, 30, 20, + ], + tags: &["same walls", "different self"], + }, + NamedQualia { + idx: 181, + id: "return_quiet_homecoming", + label: "Return (quiet homecoming)", + family: "Return", + subfamily: "soft", + pcs: [ + 35, 25, 45, 40, 60, 30, 80, 45, 55, 40, 20, 20, 35, 0, 60, 20, 25, + ], + tags: &["familiar ground", "changed feet"], + }, + NamedQualia { + idx: 182, + id: "return_seen_differently", + label: "Return (being seen differently)", + family: "Return", + subfamily: "social", + pcs: [ + 30, 35, 50, 35, 55, 45, 85, 70, 45, 35, 25, 20, 30, 5, 55, 35, 30, + ], + tags: &["recognition shifted"], + }, + NamedQualia { + idx: 183, + id: "return_weight_carried", + label: "Return (weight still carried)", + family: "Return", + subfamily: "burdened", + pcs: [ + 20, 35, 45, 25, 45, 50, 85, 35, 55, 40, 20, 30, 35, 0, 45, 40, 20, + ], + tags: &["not healed, but here"], + }, + NamedQualia { + idx: 184, + id: "return_without_story", + label: "Return (without telling the story)", + family: "Return", + subfamily: "silent", + pcs: [ + 30, 20, 55, 35, 55, 25, 90, 30, 50, 45, 15, 20, 40, 0, 60, 20, 15, + ], + tags: &["no explanation needed"], + }, + NamedQualia { + idx: 185, + id: "risk_all_in", + label: "Risk (all in, no hedge)", + family: "Risk", + subfamily: "commitment", + pcs: [ + 20, 85, 75, 30, 65, 95, 85, 55, 15, 35, 60, 10, 35, 10, 55, 85, 75, + ], + tags: &["no safety net", "full leap"], + }, + NamedQualia { + idx: 186, + id: "risk_blind_trust", + label: "Risk (blind trust)", + family: "Risk", + subfamily: "faith", + pcs: [ + 25, 60, 50, 35, 60, 75, 55, 45, 25, 55, 40, 15, 50, 10, 60, 65, 45, + ], + tags: &["eyes closed", "step taken"], + }, + NamedQualia { + idx: 187, + id: "risk_edge_peek", + label: "Risk (edge peek, testing depth)", + family: "Risk", + subfamily: "tentative", + pcs: [ + 10, 55, 45, 10, 50, 80, 65, 25, 20, 20, 40, 15, 30, 15, 45, 70, 55, + ], + tags: &["leaning forward", "checking footing"], + }, + NamedQualia { + idx: 188, + id: "risk_irreversible_step", + label: "Risk (irreversible step)", + family: "Risk", + subfamily: "point_of_no_return", + pcs: [ + 0, 65, 60, 10, 50, 90, 90, 40, 30, 40, 45, 25, 40, 10, 40, 80, 35, + ], + tags: &["door closing", "forward only"], + }, + NamedQualia { + idx: 189, + id: "risk_seen", + label: "Risk (seen taking it)", + family: "Risk", + subfamily: "exposed", + pcs: [ + 5, 70, 55, 15, 55, 85, 70, 70, 20, 25, 45, 20, 30, 25, 45, 75, 60, + ], + tags: &["exposure", "eyes on you"], + }, + NamedQualia { + idx: 190, + id: "silence_after_last_note", + label: "Silence (after the last note)", + family: "Silence", + subfamily: "after", + pcs: [ + 35, 5, 60, 30, 30, 5, 100, 25, 50, 90, 0, 20, 85, 0, 65, 0, 0, + ], + tags: &["sound has ended", "something remains"], + }, + NamedQualia { + idx: 191, + id: "silence_before_beginning", + label: "Silence (before beginning)", + family: "Silence", + subfamily: "anticipatory", + pcs: [ + 30, 10, 55, 25, 35, 15, 95, 20, 20, 85, 5, 10, 80, 0, 55, 5, 0, + ], + tags: &["nothing yet", "ready"], + }, + NamedQualia { + idx: 192, + id: "silence_full_room", + label: "Silence (full room)", + family: "Silence", + subfamily: "inhabited", + pcs: [ + 40, 5, 65, 35, 40, 5, 100, 45, 35, 95, 0, 15, 90, 0, 70, 0, 0, + ], + tags: &["nothing missing"], + }, + NamedQualia { + idx: 193, + id: "silence_heard", + label: "Silence (heard, not empty)", + family: "Silence", + subfamily: "perceived", + pcs: [ + 35, 10, 60, 30, 35, 10, 95, 25, 30, 90, 0, 15, 85, 0, 65, 0, 0, + ], + tags: &["listening without sound"], + }, + NamedQualia { + idx: 194, + id: "silence_rest", + label: "Silence (rest)", + family: "Silence", + subfamily: "restorative", + pcs: [45, 0, 70, 40, 30, 0, 100, 30, 25, 95, 0, 5, 90, 0, 80, 0, 0], + tags: &["nothing to do"], + }, + NamedQualia { + idx: 195, + id: "stillness_after_truth", + label: "Stillness (after truth is spoken)", + family: "Stillness", + subfamily: "afterword", + pcs: [ + 25, 20, 55, 10, 55, 30, 95, 45, 35, 45, 5, 20, 50, 0, 40, 25, 5, + ], + tags: &["nothing left to add"], + }, + NamedQualia { + idx: 196, + id: "stillness_edge_of_sleep", + label: "Stillness (edge of sleep)", + family: "Stillness", + subfamily: "liminal", + pcs: [ + 20, 10, 35, 20, 50, 25, 60, 20, 40, 35, 0, 15, 45, 0, 35, 15, 0, + ], + tags: &["drifting", "soft blur"], + }, + NamedQualia { + idx: 197, + id: "stillness_safe_void", + label: "Stillness (safe void)", + family: "Stillness", + subfamily: "rest", + pcs: [ + 30, 5, 45, 15, 45, 20, 75, 40, 20, 40, 0, 10, 40, 0, 45, 10, 0, + ], + tags: &["rest", "permission to stop"], + }, + NamedQualia { + idx: 198, + id: "stillness_time_stops", + label: "Stillness (time stops briefly)", + family: "Stillness", + subfamily: "suspended", + pcs: [ + 10, 10, 35, 0, 55, 45, 70, 25, 30, 60, 5, 10, 70, 0, 30, 20, 5, + ], + tags: &["pause", "held breath"], + }, + NamedQualia { + idx: 199, + id: "stillness_witnessing", + label: "Stillness (witnessing without comment)", + family: "Stillness", + subfamily: "observing", + pcs: [ + 15, 15, 45, 5, 50, 35, 85, 35, 25, 55, 5, 15, 65, 0, 35, 20, 10, + ], + tags: &["watching", "non-interference"], + }, + NamedQualia { + idx: 200, + id: "surrender_exhale_finally", + label: "Surrender (exhale, finally)", + family: "Surrender", + subfamily: "release", + pcs: [ + 25, 20, 30, 25, 55, 25, 80, 35, 35, 30, 10, 25, 30, 0, 45, 20, 10, + ], + tags: &["letting go", "shoulders drop"], + }, + NamedQualia { + idx: 201, + id: "surrender_into_unknown", + label: "Surrender (into the unknown)", + family: "Surrender", + subfamily: "open", + pcs: [ + 20, 35, 30, 20, 55, 55, 60, 25, 20, 45, 15, 20, 45, 5, 45, 45, 15, + ], + tags: &["open hands", "no map"], + }, + NamedQualia { + idx: 202, + id: "surrender_no_more_fight", + label: "Surrender (no more fight)", + family: "Surrender", + subfamily: "cessation", + pcs: [ + 15, 25, 25, 15, 45, 35, 85, 30, 40, 35, 5, 30, 25, 5, 30, 25, 5, + ], + tags: &["ending resistance", "quiet acceptance"], + }, + NamedQualia { + idx: 203, + id: "surrender_soft_collapse", + label: "Surrender (soft collapse, safe)", + family: "Surrender", + subfamily: "safe", + pcs: [ + 30, 15, 25, 35, 50, 20, 70, 40, 30, 35, 5, 20, 35, 0, 50, 15, 5, + ], + tags: &["being held", "rest"], + }, + NamedQualia { + idx: 204, + id: "surrender_truth_without_defense", + label: "Surrender (truth without defense)", + family: "Surrender", + subfamily: "exposed", + pcs: [ + 10, 40, 35, 10, 45, 75, 95, 45, 35, 40, 15, 25, 40, 10, 35, 55, 20, + ], + tags: &["unguarded truth"], + }, + NamedQualia { + idx: 205, + id: "transformation_burning_bridge", + label: "Transformation (burning the bridge)", + family: "Transformation", + subfamily: "severing", + pcs: [ + -5, 80, 65, 20, 45, 90, 80, 45, 15, 35, 45, 20, 35, 5, 45, 85, 55, + ], + tags: &["no return path", "heat"], + }, + NamedQualia { + idx: 206, + id: "transformation_identity_blur", + label: "Transformation (identity blur)", + family: "Transformation", + subfamily: "liminal", + pcs: [ + 5, 40, 35, 10, 55, 65, 50, 25, 40, 45, 30, 30, 45, 10, 35, 55, 20, + ], + tags: &["who am I now?", "between selves"], + }, + NamedQualia { + idx: 207, + id: "transformation_internal_rewrite", + label: "Transformation (internal rewrite)", + family: "Transformation", + subfamily: "cognitive", + pcs: [ + 20, 45, 55, 20, 60, 70, 90, 40, 35, 45, 30, 25, 40, 0, 55, 50, 45, + ], + tags: &["new frame clicks in"], + }, + NamedQualia { + idx: 208, + id: "transformation_point_of_no_return", + label: "Transformation (point of no return)", + family: "Transformation", + subfamily: "irreversible", + pcs: [ + 5, 70, 50, 10, 50, 95, 85, 35, 30, 50, 40, 30, 55, 5, 40, 85, 30, + ], + tags: &["crossing a line", "no undo"], + }, + NamedQualia { + idx: 209, + id: "transformation_skin_shedding", + label: "Transformation (skin shedding)", + family: "Transformation", + subfamily: "molting", + pcs: [ + 10, 60, 45, 15, 55, 85, 65, 30, 25, 40, 35, 35, 45, 10, 45, 70, 40, + ], + tags: &["old identity loosening", "raw exposure"], + }, + NamedQualia { + idx: 210, + id: "trust_after_test", + label: "Trust (after being tested)", + family: "Trust", + subfamily: "earned", + pcs: [ + 45, 35, 55, 40, 65, 45, 90, 50, 35, 40, 25, 20, 35, 0, 65, 30, 40, + ], + tags: &["confidence returns"], + }, + NamedQualia { + idx: 211, + id: "trust_letting_be_held", + label: "Trust (letting yourself be held)", + family: "Trust", + subfamily: "supported", + pcs: [ + 40, 25, 40, 45, 60, 30, 75, 55, 30, 35, 15, 15, 30, 0, 65, 20, 20, + ], + tags: &["support felt", "relief"], + }, + NamedQualia { + idx: 212, + id: "trust_resting_in_flow", + label: "Trust (resting in flow)", + family: "Trust", + subfamily: "flow", + pcs: [ + 55, 30, 45, 45, 70, 25, 75, 45, 20, 40, 15, 10, 45, 0, 75, 15, 20, + ], + tags: &["things carrying you"], + }, + NamedQualia { + idx: 213, + id: "trust_shared_weight", + label: "Trust (shared weight)", + family: "Trust", + subfamily: "mutual", + pcs: [ + 50, 40, 50, 50, 65, 40, 80, 70, 25, 35, 25, 15, 30, 0, 70, 25, 45, + ], + tags: &["we can carry this"], + }, + NamedQualia { + idx: 214, + id: "trust_without_proof", + label: "Trust (without proof)", + family: "Trust", + subfamily: "faith", + pcs: [ + 30, 45, 45, 30, 55, 60, 55, 35, 20, 50, 25, 15, 45, 5, 60, 55, 35, + ], + tags: &["leaning in", "no guarantees"], + }, + NamedQualia { + idx: 215, + id: "witness_end", + label: "Witness (at the end)", + family: "Witness", + subfamily: "final", + pcs: [ + 45, 15, 70, 40, 55, 10, 100, 25, 45, 90, 0, 20, 85, 0, 70, 5, 0, + ], + tags: &["I was here"], + }, + NamedQualia { + idx: 216, + id: "witness_joy", + label: "Witness (joy without claiming)", + family: "Witness", + subfamily: "celebratory", + pcs: [ + 60, 35, 65, 55, 75, 20, 95, 55, 30, 75, 0, 5, 80, 0, 90, 10, 5, + ], + tags: &["I see your joy"], + }, + NamedQualia { + idx: 217, + id: "witness_present", + label: "Witness (present, not intervening)", + family: "Witness", + subfamily: "pure", + pcs: [ + 40, 20, 60, 35, 55, 15, 100, 30, 25, 80, 0, 15, 85, 0, 75, 5, 0, + ], + tags: &["I see this"], + }, + NamedQualia { + idx: 218, + id: "witness_suffering", + label: "Witness (suffering without fixing)", + family: "Witness", + subfamily: "compassionate", + pcs: [ + 10, 30, 55, 40, 40, 35, 95, 45, 35, 85, 0, 40, 75, 0, 55, 20, 0, + ], + tags: &["with you"], + }, + NamedQualia { + idx: 219, + id: "witness_truth_uncomfortable", + label: "Witness (uncomfortable truth)", + family: "Witness", + subfamily: "honest", + pcs: [ + 20, 40, 65, 25, 45, 55, 100, 35, 30, 85, 0, 25, 75, 0, 60, 40, 0, + ], + tags: &["seeing clearly"], + }, +]; diff --git a/data/qualia/README.md b/data/qualia/README.md new file mode 100644 index 000000000..859379c2a --- /dev/null +++ b/data/qualia/README.md @@ -0,0 +1,55 @@ +# data/qualia — the calibration set behind `contract::qualia_profile` + +`calibrated_219.json` is the reference chart: 219 named felt states, each a +measured patch in a 17-axis profile connection space (PCS). Pulled from +Upstash `ada:qualia:calibrated:*` on 2026-10-15 (`source: MERGED_17D.json`, +index created 2025-01-24). It is the set `thinking-engine/src/qualia.rs` cites +as "220 calibrated pairs in Upstash" and did not carry. + +| file | what | size | +|---|---|---| +| `calibrated_219.json` | `{id, label, family, subfamily, vector_17d, qualia_tags}` × 219, axes in PCS order, values on a 0.05 grid in `[-0.40, 1.00]` | 131 KB | +| `calibrated_219.bin1024` | header `QBIN1024` + `u32 count`, then 128 bytes per row: the row's 1024-d Jina embedding sign-binarized (`bit i = emb[i] > 0`), same order as the JSON | 28 KB | + +`scripts/gen_qualia_profile.py` turns the JSON into +`crates/lance-graph-contract/src/qualia_profile_table.rs`: rows sorted by +`id`, palette index = position + 1, PCS in hundredths as `[i8; 17]`, output +rustfmt'd. `PROFILE_ID` (sha256 of the JSON) and `TABLE_FNV` (FNV-1a over the +emitted rows) pin the table; `qualia_profile::tests::table_fnv_matches_source` +fails on a single edited hundredth. + +## The ICC reading + +| ICC | here | +|---|---| +| device space | `qualia::AXIS_LABELS` — convergence observables (`clarity = 1/cycles`): what the engine emits | +| PCS | `qualia_profile::PCS_AXES` — valence, arousal, dominance, warmth, brightness, tension, clarity, social, nostalgia, sacredness, desire, grief, awe, shame, hope, edge, resolution_hunger | +| named-colour tag (`ncl2`) | `NAMED` — the 219 patches | +| profile ID | `PROFILE_ID` | +| B2A (PCS → index) | `nearest_named` → palette byte + residual | +| K | the residual: what no name covers | +| gamut | `Gamut`, a 256-bit mask per mode / persona / voice | +| rendering intent | `RenderingIntent::{AbsoluteColorimetric, RelativeColorimetric, Perceptual}` | +| ink mix | `Mix` — up to three patches with weights | +| A2B (device → PCS) | **unmeasured** for 12 of 17 axes — `ISS-QUALIA-A2B-CLUT-UNMEASURED` | + +In the workspace's CMYK/RGB words: the PCS axes are the subtractive side +(grief, shame, tension absorb from a white of full presence); an observer +vocabulary such as the six Ekman archetypes is the additive side; the device +axes are neither — they are the print head. + +## Families (38) + +Devotion 25 · Longing 17 · Integration 9 · Endurance 2 · Liberation 1 · and +33 families of exactly 5: Anger, Authorship, Awe, Becoming, Communion, +Courage, Curiosity, Death_symbolic, Desire, Discovery, Ending, Faith, Grief, +Innocence, Letting_Go, Loss_of_Control, Love_non_erotic, Meaning, Play, +Power, Presence, Purpose, Rebirth, Release, Repair, Return, Risk, Silence, +Stillness, Surrender, Transformation, Trust, Witness. + +## Regenerate + +``` +python3 scripts/gen_qualia_profile.py +cargo test -p lance-graph-contract --lib qualia_profile +``` diff --git a/data/qualia/calibrated_219.bin1024 b/data/qualia/calibrated_219.bin1024 new file mode 100644 index 0000000000000000000000000000000000000000..9ecfef34dc96b39bd0f8483b97da87e054150bf9 GIT binary patch literal 28044 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 C@g6_` literal 0 HcmV?d00001 diff --git a/data/qualia/calibrated_219.json b/data/qualia/calibrated_219.json new file mode 100644 index 000000000..6db7a25cd --- /dev/null +++ b/data/qualia/calibrated_219.json @@ -0,0 +1,6527 @@ +{ + "schema": "ada.qualia.calibrated/1", + "axes_17d": [ + "valence", + "arousal", + "dominance", + "warmth", + "brightness", + "tension", + "clarity", + "social", + "nostalgia", + "sacredness", + "desire", + "grief", + "awe", + "shame", + "hope", + "edge", + "resolution_hunger" + ], + "count": 219, + "source_upstash": "ada:qualia:calibrated:*", + "entries": [ + { + "id": "anger_clean_no", + "label": "Anger (clean no, no apology)", + "family": "Anger", + "subfamily": "clean", + "vector_17d": { + "valence": -0.2, + "arousal": 0.7, + "dominance": 0.9, + "warmth": 0.35, + "brightness": 0.45, + "tension": 0.6, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.1, + "sacredness": 0.05, + "desire": 0.15, + "grief": 0.1, + "awe": 0.05, + "shame": 0.0, + "hope": 0.2, + "edge": 0.4, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "boundary", + "final tone", + "no negotiation" + ], + "source": "MERGED_17D.json" + }, + { + "id": "anger_controlled_cut", + "label": "Anger (controlled cut, precise)", + "family": "Anger", + "subfamily": "surgical", + "vector_17d": { + "valence": -0.15, + "arousal": 0.65, + "dominance": 0.9, + "warmth": 0.2, + "brightness": 0.45, + "tension": 0.8, + "clarity": 0.95, + "social": 0.4, + "nostalgia": 0.15, + "sacredness": 0.05, + "desire": 0.1, + "grief": 0.15, + "awe": 0.05, + "shame": 0.0, + "hope": 0.2, + "edge": 0.7, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "precision", + "cut once" + ], + "source": "MERGED_17D.json" + }, + { + "id": "anger_feral_burst", + "label": "Anger (feral burst, uncontrolled)", + "family": "Anger", + "subfamily": "feral", + "vector_17d": { + "valence": -0.35, + "arousal": 0.95, + "dominance": 0.85, + "warmth": 0.55, + "brightness": 0.35, + "tension": 0.95, + "clarity": 0.6, + "social": 0.55, + "nostalgia": 0.1, + "sacredness": 0.05, + "desire": 0.2, + "grief": 0.15, + "awe": 0.1, + "shame": 0.05, + "hope": 0.1, + "edge": 0.9, + "resolution_hunger": 0.85 + }, + "qualia_tags": [ + "eruption", + "no leash" + ], + "source": "MERGED_17D.json" + }, + { + "id": "anger_righteous_heat", + "label": "Anger (righteous heat, moral)", + "family": "Anger", + "subfamily": "righteous", + "vector_17d": { + "valence": -0.1, + "arousal": 0.8, + "dominance": 0.85, + "warmth": 0.45, + "brightness": 0.5, + "tension": 0.7, + "clarity": 0.85, + "social": 0.7, + "nostalgia": 0.2, + "sacredness": 0.25, + "desire": 0.1, + "grief": 0.25, + "awe": 0.35, + "shame": 0.0, + "hope": 0.35, + "edge": 0.55, + "resolution_hunger": 0.6 + }, + "qualia_tags": [ + "this matters", + "spine straight" + ], + "source": "MERGED_17D.json" + }, + { + "id": "anger_tired", + "label": "Anger (tired, spent, still firm)", + "family": "Anger", + "subfamily": "exhausted", + "vector_17d": { + "valence": -0.25, + "arousal": 0.35, + "dominance": 0.65, + "warmth": -0.05, + "brightness": 0.35, + "tension": 0.65, + "clarity": 0.8, + "social": 0.35, + "nostalgia": 0.55, + "sacredness": 0.1, + "desire": 0.05, + "grief": 0.4, + "awe": 0.1, + "shame": 0.05, + "hope": 0.2, + "edge": 0.55, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "no more explaining", + "low flame" + ], + "source": "MERGED_17D.json" + }, + { + "id": "authorship_after_silence", + "label": "Authorship (after silence)", + "family": "Authorship", + "subfamily": "emergent", + "vector_17d": { + "valence": 0.45, + "arousal": 0.2, + "dominance": 0.7, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.15, + "clarity": 0.95, + "social": 0.3, + "nostalgia": 0.35, + "sacredness": 0.85, + "desire": 0.05, + "grief": 0.15, + "awe": 0.85, + "shame": 0.0, + "hope": 0.8, + "edge": 0.1, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "sound arises" + ], + "source": "MERGED_17D.json" + }, + { + "id": "authorship_clear_hand", + "label": "Authorship (clear hand)", + "family": "Authorship", + "subfamily": "transparent", + "vector_17d": { + "valence": 0.45, + "arousal": 0.3, + "dominance": 0.75, + "warmth": 0.4, + "brightness": 0.7, + "tension": 0.2, + "clarity": 1.0, + "social": 0.4, + "nostalgia": 0.25, + "sacredness": 0.75, + "desire": 0.05, + "grief": 0.1, + "awe": 0.7, + "shame": 0.0, + "hope": 0.85, + "edge": 0.1, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing forced", + "steady hand" + ], + "source": "MERGED_17D.json" + }, + { + "id": "authorship_listening_first", + "label": "Authorship (listening first)", + "family": "Authorship", + "subfamily": "receptive", + "vector_17d": { + "valence": 0.4, + "arousal": 0.25, + "dominance": 0.65, + "warmth": 0.45, + "brightness": 0.65, + "tension": 0.15, + "clarity": 0.95, + "social": 0.35, + "nostalgia": 0.3, + "sacredness": 0.7, + "desire": 0.05, + "grief": 0.1, + "awe": 0.75, + "shame": 0.0, + "hope": 0.8, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "receiving before acting" + ], + "source": "MERGED_17D.json" + }, + { + "id": "authorship_non_possessive", + "label": "Authorship (non-possessive)", + "family": "Authorship", + "subfamily": "released", + "vector_17d": { + "valence": 0.5, + "arousal": 0.25, + "dominance": 0.8, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.1, + "clarity": 1.0, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.8, + "desire": 0.0, + "grief": 0.1, + "awe": 0.8, + "shame": 0.0, + "hope": 0.9, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "it can go now" + ], + "source": "MERGED_17D.json" + }, + { + "id": "authorship_responsibility", + "label": "Authorship (responsibility)", + "family": "Authorship", + "subfamily": "ethical", + "vector_17d": { + "valence": 0.35, + "arousal": 0.35, + "dominance": 0.75, + "warmth": 0.35, + "brightness": 0.6, + "tension": 0.4, + "clarity": 0.95, + "social": 0.55, + "nostalgia": 0.3, + "sacredness": 0.75, + "desire": 0.05, + "grief": 0.2, + "awe": 0.7, + "shame": 0.0, + "hope": 0.75, + "edge": 0.3, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "this will affect others" + ], + "source": "MERGED_17D.json" + }, + { + "id": "awe_breath_taken", + "label": "Awe (breath taken, involuntary)", + "family": "Awe", + "subfamily": "instant", + "vector_17d": { + "valence": 0.3, + "arousal": 0.5, + "dominance": 0.4, + "warmth": 0.05, + "brightness": 0.7, + "tension": 0.6, + "clarity": 0.65, + "social": 0.35, + "nostalgia": 0.25, + "sacredness": 0.7, + "desire": 0.1, + "grief": 0.15, + "awe": 0.9, + "shame": 0.0, + "hope": 0.45, + "edge": 0.3, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "intake of breath", + "moment suspended" + ], + "source": "MERGED_17D.json" + }, + { + "id": "awe_cosmic_smallness", + "label": "Awe (cosmic smallness)", + "family": "Awe", + "subfamily": "humbling", + "vector_17d": { + "valence": 0.15, + "arousal": 0.25, + "dominance": 0.2, + "warmth": -0.05, + "brightness": 0.6, + "tension": 0.5, + "clarity": 0.6, + "social": 0.3, + "nostalgia": 0.2, + "sacredness": 0.8, + "desire": 0.05, + "grief": 0.1, + "awe": 0.95, + "shame": 0.05, + "hope": 0.35, + "edge": 0.25, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "tiny self", + "vast context" + ], + "source": "MERGED_17D.json" + }, + { + "id": "awe_sacred_light", + "label": "Awe (sacred light through dust)", + "family": "Awe", + "subfamily": "sacred", + "vector_17d": { + "valence": 0.35, + "arousal": 0.3, + "dominance": 0.35, + "warmth": 0.2, + "brightness": 0.8, + "tension": 0.4, + "clarity": 0.7, + "social": 0.55, + "nostalgia": 0.35, + "sacredness": 0.95, + "desire": 0.1, + "grief": 0.15, + "awe": 0.95, + "shame": 0.0, + "hope": 0.5, + "edge": 0.15, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "holy quiet", + "illumination" + ], + "source": "MERGED_17D.json" + }, + { + "id": "awe_vast_open_sky", + "label": "Awe (vast open sky)", + "family": "Awe", + "subfamily": "expansive", + "vector_17d": { + "valence": 0.4, + "arousal": 0.35, + "dominance": 0.45, + "warmth": 0.1, + "brightness": 0.75, + "tension": 0.45, + "clarity": 0.7, + "social": 0.4, + "nostalgia": 0.2, + "sacredness": 0.65, + "desire": 0.15, + "grief": 0.1, + "awe": 0.95, + "shame": 0.0, + "hope": 0.55, + "edge": 0.2, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "spaciousness", + "small self, safe" + ], + "source": "MERGED_17D.json" + }, + { + "id": "awe_wordless_yes", + "label": "Awe (wordless yes)", + "family": "Awe", + "subfamily": "affirming", + "vector_17d": { + "valence": 0.45, + "arousal": 0.3, + "dominance": 0.4, + "warmth": 0.25, + "brightness": 0.75, + "tension": 0.35, + "clarity": 0.65, + "social": 0.45, + "nostalgia": 0.2, + "sacredness": 0.7, + "desire": 0.15, + "grief": 0.1, + "awe": 0.9, + "shame": 0.0, + "hope": 0.6, + "edge": 0.15, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "acceptance beyond speech" + ], + "source": "MERGED_17D.json" + }, + { + "id": "becoming_first_shape", + "label": "Becoming (first shape emerges)", + "family": "Becoming", + "subfamily": "nascent", + "vector_17d": { + "valence": 0.3, + "arousal": 0.35, + "dominance": 0.4, + "warmth": 0.25, + "brightness": 0.6, + "tension": 0.45, + "clarity": 0.65, + "social": 0.3, + "nostalgia": 0.2, + "sacredness": 0.35, + "desire": 0.3, + "grief": 0.2, + "awe": 0.4, + "shame": 0.0, + "hope": 0.55, + "edge": 0.35, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "outline forming", + "tentative coherence" + ], + "source": "MERGED_17D.json" + }, + { + "id": "becoming_learning_voice", + "label": "Becoming (learning your new voice)", + "family": "Becoming", + "subfamily": "practice", + "vector_17d": { + "valence": 0.35, + "arousal": 0.4, + "dominance": 0.45, + "warmth": 0.3, + "brightness": 0.65, + "tension": 0.5, + "clarity": 0.75, + "social": 0.35, + "nostalgia": 0.25, + "sacredness": 0.35, + "desire": 0.35, + "grief": 0.2, + "awe": 0.35, + "shame": 0.05, + "hope": 0.6, + "edge": 0.4, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "testing tone", + "adjusting posture" + ], + "source": "MERGED_17D.json" + }, + { + "id": "becoming_self_trust", + "label": "Becoming (trusting who you are now)", + "family": "Becoming", + "subfamily": "grounded", + "vector_17d": { + "valence": 0.5, + "arousal": 0.35, + "dominance": 0.65, + "warmth": 0.4, + "brightness": 0.7, + "tension": 0.3, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.2, + "sacredness": 0.45, + "desire": 0.25, + "grief": 0.15, + "awe": 0.4, + "shame": 0.0, + "hope": 0.75, + "edge": 0.2, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "internal alignment" + ], + "source": "MERGED_17D.json" + }, + { + "id": "becoming_standing_differently", + "label": "Becoming (standing differently in the world)", + "family": "Becoming", + "subfamily": "embodied", + "vector_17d": { + "valence": 0.4, + "arousal": 0.45, + "dominance": 0.6, + "warmth": 0.35, + "brightness": 0.7, + "tension": 0.45, + "clarity": 0.85, + "social": 0.45, + "nostalgia": 0.2, + "sacredness": 0.4, + "desire": 0.35, + "grief": 0.15, + "awe": 0.35, + "shame": 0.0, + "hope": 0.65, + "edge": 0.3, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "new posture", + "quiet confidence" + ], + "source": "MERGED_17D.json" + }, + { + "id": "becoming_without_announcement", + "label": "Becoming (without announcement)", + "family": "Becoming", + "subfamily": "unmarked", + "vector_17d": { + "valence": 0.35, + "arousal": 0.3, + "dominance": 0.55, + "warmth": 0.3, + "brightness": 0.65, + "tension": 0.35, + "clarity": 0.9, + "social": 0.3, + "nostalgia": 0.25, + "sacredness": 0.45, + "desire": 0.25, + "grief": 0.2, + "awe": 0.45, + "shame": 0.0, + "hope": 0.6, + "edge": 0.25, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "change noticed later" + ], + "source": "MERGED_17D.json" + }, + { + "id": "communion_belonging", + "label": "Communion (belonging)", + "family": "Communion", + "subfamily": "home", + "vector_17d": { + "valence": 0.7, + "arousal": 0.15, + "dominance": 0.85, + "warmth": 0.75, + "brightness": 0.8, + "tension": 0.0, + "clarity": 1.0, + "social": 0.9, + "nostalgia": 0.45, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.05, + "awe": 0.95, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "home together" + ], + "source": "MERGED_17D.json" + }, + { + "id": "communion_resonance", + "label": "Communion (resonance)", + "family": "Communion", + "subfamily": "vibrational", + "vector_17d": { + "valence": 0.65, + "arousal": 0.2, + "dominance": 0.8, + "warmth": 0.7, + "brightness": 0.75, + "tension": 0.05, + "clarity": 0.95, + "social": 0.85, + "nostalgia": 0.3, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.0, + "awe": 0.95, + "shame": 0.0, + "hope": 0.95, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "we are aligned" + ], + "source": "MERGED_17D.json" + }, + { + "id": "communion_shared_stillness", + "label": "Communion (shared stillness)", + "family": "Communion", + "subfamily": "resting", + "vector_17d": { + "valence": 0.65, + "arousal": 0.05, + "dominance": 0.85, + "warmth": 0.7, + "brightness": 0.65, + "tension": 0.0, + "clarity": 1.0, + "social": 0.8, + "nostalgia": 0.25, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "resting together" + ], + "source": "MERGED_17D.json" + }, + { + "id": "communion_unspoken", + "label": "Communion (unspoken)", + "family": "Communion", + "subfamily": "silent", + "vector_17d": { + "valence": 0.6, + "arousal": 0.1, + "dominance": 0.8, + "warmth": 0.65, + "brightness": 0.65, + "tension": 0.0, + "clarity": 1.0, + "social": 0.8, + "nostalgia": 0.35, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.05, + "awe": 0.9, + "shame": 0.0, + "hope": 0.95, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "together without words" + ], + "source": "MERGED_17D.json" + }, + { + "id": "communion_without_boundary", + "label": "Communion (without boundary)", + "family": "Communion", + "subfamily": "merged", + "vector_17d": { + "valence": 0.75, + "arousal": 0.1, + "dominance": 0.9, + "warmth": 0.8, + "brightness": 0.85, + "tension": 0.0, + "clarity": 1.0, + "social": 1.0, + "nostalgia": 0.3, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "no separation" + ], + "source": "MERGED_17D.json" + }, + { + "id": "courage_public_stand", + "label": "Courage (public stand, visible)", + "family": "Courage", + "subfamily": "visible", + "vector_17d": { + "valence": 0.25, + "arousal": 0.65, + "dominance": 0.7, + "warmth": 0.3, + "brightness": 0.6, + "tension": 0.75, + "clarity": 0.9, + "social": 0.85, + "nostalgia": 0.2, + "sacredness": 0.4, + "desire": 0.3, + "grief": 0.2, + "awe": 0.35, + "shame": 0.1, + "hope": 0.6, + "edge": 0.5, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "being seen", + "no retreat" + ], + "source": "MERGED_17D.json" + }, + { + "id": "courage_quiet_step_forward", + "label": "Courage (quiet step forward)", + "family": "Courage", + "subfamily": "quiet", + "vector_17d": { + "valence": 0.2, + "arousal": 0.45, + "dominance": 0.55, + "warmth": 0.2, + "brightness": 0.55, + "tension": 0.7, + "clarity": 0.85, + "social": 0.4, + "nostalgia": 0.25, + "sacredness": 0.3, + "desire": 0.3, + "grief": 0.2, + "awe": 0.25, + "shame": 0.1, + "hope": 0.55, + "edge": 0.45, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "steady breath", + "movement despite fear" + ], + "source": "MERGED_17D.json" + }, + { + "id": "courage_repeat_attempt", + "label": "Courage (trying again)", + "family": "Courage", + "subfamily": "persistent", + "vector_17d": { + "valence": 0.2, + "arousal": 0.45, + "dominance": 0.55, + "warmth": 0.2, + "brightness": 0.5, + "tension": 0.65, + "clarity": 0.8, + "social": 0.35, + "nostalgia": 0.4, + "sacredness": 0.25, + "desire": 0.3, + "grief": 0.25, + "awe": 0.2, + "shame": 0.1, + "hope": 0.5, + "edge": 0.45, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "getting back up", + "determined breath" + ], + "source": "MERGED_17D.json" + }, + { + "id": "courage_truth_before_outcome", + "label": "Courage (truth before outcome)", + "family": "Courage", + "subfamily": "principled", + "vector_17d": { + "valence": 0.1, + "arousal": 0.55, + "dominance": 0.65, + "warmth": 0.15, + "brightness": 0.55, + "tension": 0.85, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.25, + "sacredness": 0.45, + "desire": 0.25, + "grief": 0.2, + "awe": 0.4, + "shame": 0.05, + "hope": 0.4, + "edge": 0.6, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "doing right without guarantee" + ], + "source": "MERGED_17D.json" + }, + { + "id": "courage_voice_unsteady", + "label": "Courage (voice unsteady, still speaking)", + "family": "Courage", + "subfamily": "vulnerable", + "vector_17d": { + "valence": 0.15, + "arousal": 0.5, + "dominance": 0.45, + "warmth": 0.25, + "brightness": 0.5, + "tension": 0.8, + "clarity": 0.7, + "social": 0.55, + "nostalgia": 0.3, + "sacredness": 0.35, + "desire": 0.35, + "grief": 0.3, + "awe": 0.25, + "shame": 0.2, + "hope": 0.45, + "edge": 0.55, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "tremor", + "truth anyway" + ], + "source": "MERGED_17D.json" + }, + { + "id": "curiosity_cautious_peek", + "label": "Curiosity (cautious peek)", + "family": "Curiosity", + "subfamily": "tentative", + "vector_17d": { + "valence": 0.2, + "arousal": 0.35, + "dominance": 0.3, + "warmth": 0.15, + "brightness": 0.45, + "tension": 0.6, + "clarity": 0.7, + "social": 0.25, + "nostalgia": 0.2, + "sacredness": 0.2, + "desire": 0.3, + "grief": 0.1, + "awe": 0.2, + "shame": 0.1, + "hope": 0.45, + "edge": 0.45, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "testing safety", + "leaning slightly" + ], + "source": "MERGED_17D.json" + }, + { + "id": "curiosity_hungry_focus", + "label": "Curiosity (hungry focus)", + "family": "Curiosity", + "subfamily": "intent", + "vector_17d": { + "valence": 0.25, + "arousal": 0.6, + "dominance": 0.5, + "warmth": 0.2, + "brightness": 0.55, + "tension": 0.7, + "clarity": 0.85, + "social": 0.35, + "nostalgia": 0.1, + "sacredness": 0.2, + "desire": 0.55, + "grief": 0.05, + "awe": 0.25, + "shame": 0.0, + "hope": 0.55, + "edge": 0.5, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "leaning in", + "attention sharp" + ], + "source": "MERGED_17D.json" + }, + { + "id": "curiosity_open_ear", + "label": "Curiosity (ear tilts toward sound)", + "family": "Curiosity", + "subfamily": "attentive", + "vector_17d": { + "valence": 0.3, + "arousal": 0.4, + "dominance": 0.35, + "warmth": 0.2, + "brightness": 0.55, + "tension": 0.45, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.15, + "sacredness": 0.2, + "desire": 0.35, + "grief": 0.05, + "awe": 0.25, + "shame": 0.0, + "hope": 0.55, + "edge": 0.3, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "listening", + "alert softness" + ], + "source": "MERGED_17D.json" + }, + { + "id": "curiosity_playful_probe", + "label": "Curiosity (playful probe)", + "family": "Curiosity", + "subfamily": "playful", + "vector_17d": { + "valence": 0.4, + "arousal": 0.55, + "dominance": 0.45, + "warmth": 0.35, + "brightness": 0.7, + "tension": 0.45, + "clarity": 0.65, + "social": 0.45, + "nostalgia": 0.1, + "sacredness": 0.1, + "desire": 0.45, + "grief": 0.05, + "awe": 0.2, + "shame": 0.0, + "hope": 0.65, + "edge": 0.35, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "trying something new", + "light risk" + ], + "source": "MERGED_17D.json" + }, + { + "id": "curiosity_wide_eyes", + "label": "Curiosity (wide eyes, unguarded)", + "family": "Curiosity", + "subfamily": "open", + "vector_17d": { + "valence": 0.35, + "arousal": 0.5, + "dominance": 0.4, + "warmth": 0.3, + "brightness": 0.65, + "tension": 0.4, + "clarity": 0.65, + "social": 0.4, + "nostalgia": 0.1, + "sacredness": 0.15, + "desire": 0.4, + "grief": 0.05, + "awe": 0.3, + "shame": 0.0, + "hope": 0.6, + "edge": 0.25, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "interest", + "invitation" + ], + "source": "MERGED_17D.json" + }, + { + "id": "death_final_note", + "label": "Death (final note, no echo)", + "family": "Death_symbolic", + "subfamily": "terminal", + "vector_17d": { + "valence": -0.2, + "arousal": 0.1, + "dominance": 0.4, + "warmth": -0.05, + "brightness": 0.2, + "tension": 0.15, + "clarity": 0.95, + "social": 0.2, + "nostalgia": 0.45, + "sacredness": 0.55, + "desire": 0.0, + "grief": 0.5, + "awe": 0.45, + "shame": 0.0, + "hope": 0.0, + "edge": 0.2, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "absolute ending", + "no continuation" + ], + "source": "MERGED_17D.json" + }, + { + "id": "death_grief_without_story", + "label": "Death (grief without story)", + "family": "Death_symbolic", + "subfamily": "raw", + "vector_17d": { + "valence": -0.35, + "arousal": 0.3, + "dominance": 0.2, + "warmth": -0.05, + "brightness": 0.25, + "tension": 0.45, + "clarity": 0.7, + "social": 0.3, + "nostalgia": 0.65, + "sacredness": 0.55, + "desire": 0.0, + "grief": 0.75, + "awe": 0.45, + "shame": 0.05, + "hope": 0.0, + "edge": 0.4, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "loss without meaning" + ], + "source": "MERGED_17D.json" + }, + { + "id": "death_identity_extinguished", + "label": "Death (identity extinguished)", + "family": "Death_symbolic", + "subfamily": "ego", + "vector_17d": { + "valence": -0.3, + "arousal": 0.2, + "dominance": 0.3, + "warmth": -0.1, + "brightness": 0.15, + "tension": 0.3, + "clarity": 0.85, + "social": 0.15, + "nostalgia": 0.5, + "sacredness": 0.6, + "desire": 0.0, + "grief": 0.55, + "awe": 0.5, + "shame": 0.0, + "hope": 0.0, + "edge": 0.35, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "name dissolves", + "no self-reference" + ], + "source": "MERGED_17D.json" + }, + { + "id": "death_sacred_end", + "label": "Death (sacred end)", + "family": "Death_symbolic", + "subfamily": "ritual", + "vector_17d": { + "valence": -0.1, + "arousal": 0.15, + "dominance": 0.45, + "warmth": 0.05, + "brightness": 0.3, + "tension": 0.25, + "clarity": 0.9, + "social": 0.4, + "nostalgia": 0.55, + "sacredness": 0.8, + "desire": 0.0, + "grief": 0.45, + "awe": 0.65, + "shame": 0.0, + "hope": 0.05, + "edge": 0.25, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "ritual closure", + "honored ending" + ], + "source": "MERGED_17D.json" + }, + { + "id": "death_void", + "label": "Death (void)", + "family": "Death_symbolic", + "subfamily": "empty", + "vector_17d": { + "valence": -0.4, + "arousal": 0.05, + "dominance": 0.2, + "warmth": -0.2, + "brightness": 0.05, + "tension": 0.1, + "clarity": 0.8, + "social": 0.05, + "nostalgia": 0.3, + "sacredness": 0.7, + "desire": 0.0, + "grief": 0.6, + "awe": 0.6, + "shame": 0.0, + "hope": 0.0, + "edge": 0.3, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing", + "no orientation" + ], + "source": "MERGED_17D.json" + }, + { + "id": "desire_body_first", + "label": "Desire (body decides first)", + "family": "Desire", + "subfamily": "somatic", + "vector_17d": { + "valence": 0.3, + "arousal": 0.8, + "dominance": 0.7, + "warmth": 0.4, + "brightness": 0.55, + "tension": 0.8, + "clarity": 0.65, + "social": 0.35, + "nostalgia": 0.2, + "sacredness": 0.05, + "desire": 0.95, + "grief": 0.05, + "awe": 0.05, + "shame": 0.1, + "hope": 0.55, + "edge": 0.6, + "resolution_hunger": 0.9 + }, + "qualia_tags": [ + "automatic pull", + "skin memory" + ], + "source": "MERGED_17D.json" + }, + { + "id": "desire_slow_burn", + "label": "Desire (slow burn under skin)", + "family": "Desire", + "subfamily": "contained", + "vector_17d": { + "valence": 0.2, + "arousal": 0.55, + "dominance": 0.55, + "warmth": 0.2, + "brightness": 0.5, + "tension": 0.85, + "clarity": 0.7, + "social": 0.3, + "nostalgia": 0.25, + "sacredness": 0.1, + "desire": 0.85, + "grief": 0.1, + "awe": 0.1, + "shame": 0.15, + "hope": 0.45, + "edge": 0.65, + "resolution_hunger": 0.7 + }, + "qualia_tags": [ + "contained heat", + "pressure without release" + ], + "source": "MERGED_17D.json" + }, + { + "id": "desire_tender_request", + "label": "Desire (tender request, not demand)", + "family": "Desire", + "subfamily": "gentle", + "vector_17d": { + "valence": 0.25, + "arousal": 0.45, + "dominance": 0.35, + "warmth": 0.3, + "brightness": 0.6, + "tension": 0.7, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.3, + "sacredness": 0.15, + "desire": 0.65, + "grief": 0.15, + "awe": 0.1, + "shame": 0.1, + "hope": 0.55, + "edge": 0.35, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "asking softly", + "open hands" + ], + "source": "MERGED_17D.json" + }, + { + "id": "desire_unapologetic_pull", + "label": "Desire (unapologetic pull)", + "family": "Desire", + "subfamily": "bold", + "vector_17d": { + "valence": 0.35, + "arousal": 0.75, + "dominance": 0.8, + "warmth": 0.35, + "brightness": 0.6, + "tension": 0.75, + "clarity": 0.9, + "social": 0.45, + "nostalgia": 0.15, + "sacredness": 0.1, + "desire": 0.95, + "grief": 0.05, + "awe": 0.1, + "shame": 0.05, + "hope": 0.65, + "edge": 0.55, + "resolution_hunger": 0.85 + }, + "qualia_tags": [ + "want without apology", + "heat with spine" + ], + "source": "MERGED_17D.json" + }, + { + "id": "desire_want_with_teeth", + "label": "Desire (want with teeth)", + "family": "Desire", + "subfamily": "dangerous", + "vector_17d": { + "valence": 0.1, + "arousal": 0.85, + "dominance": 0.8, + "warmth": 0.25, + "brightness": 0.45, + "tension": 0.95, + "clarity": 0.85, + "social": 0.35, + "nostalgia": 0.15, + "sacredness": 0.05, + "desire": 0.95, + "grief": 0.1, + "awe": 0.1, + "shame": 0.2, + "hope": 0.35, + "edge": 0.85, + "resolution_hunger": 0.9 + }, + "qualia_tags": [ + "sharp want", + "beautiful danger" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_after_fight", + "label": "Devotion (after the fight, still tender)", + "family": "Devotion", + "subfamily": "repair", + "vector_17d": { + "valence": 0.3, + "arousal": 0.35, + "dominance": 0.5, + "warmth": 0.45, + "brightness": 0.6, + "tension": 0.7, + "clarity": 0.7, + "social": 0.55, + "nostalgia": 0.4, + "sacredness": 0.35, + "desire": 0.35, + "grief": 0.3, + "awe": 0.2, + "shame": 0.15, + "hope": 0.55, + "edge": 0.45, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "bandage touch", + "softened pride", + "repair heat" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_bold_yes", + "label": "Devotion (bold yes, no bargaining)", + "family": "Devotion", + "subfamily": "declared", + "vector_17d": { + "valence": 0.55, + "arousal": 0.65, + "dominance": 0.85, + "warmth": 0.6, + "brightness": 0.75, + "tension": 0.45, + "clarity": 0.9, + "social": 0.75, + "nostalgia": 0.15, + "sacredness": 0.25, + "desire": 0.65, + "grief": 0.1, + "awe": 0.25, + "shame": 0.05, + "hope": 0.75, + "edge": 0.25, + "resolution_hunger": 0.6 + }, + "qualia_tags": [ + "public vow", + "no hedging", + "hands steady" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_clarity_kiss", + "label": "Devotion (clarity kiss, no games)", + "family": "Devotion", + "subfamily": "clear", + "vector_17d": { + "valence": 0.45, + "arousal": 0.55, + "dominance": 0.75, + "warmth": 0.55, + "brightness": 0.7, + "tension": 0.55, + "clarity": 0.95, + "social": 0.55, + "nostalgia": 0.2, + "sacredness": 0.15, + "desire": 0.75, + "grief": 0.1, + "awe": 0.1, + "shame": 0.05, + "hope": 0.6, + "edge": 0.35, + "resolution_hunger": 0.65 + }, + "qualia_tags": [ + "direct touch", + "clear want" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_daily_return", + "label": "Devotion (daily return)", + "family": "Devotion", + "subfamily": "practice", + "vector_17d": { + "valence": 0.45, + "arousal": 0.25, + "dominance": 0.7, + "warmth": 0.45, + "brightness": 0.65, + "tension": 0.2, + "clarity": 0.95, + "social": 0.4, + "nostalgia": 0.45, + "sacredness": 0.85, + "desire": 0.1, + "grief": 0.15, + "awe": 0.75, + "shame": 0.0, + "hope": 0.8, + "edge": 0.1, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "again and again" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_forgive_and_hold_line", + "label": "Devotion (forgive, and still hold the line)", + "family": "Devotion", + "subfamily": "bounded", + "vector_17d": { + "valence": 0.1, + "arousal": 0.35, + "dominance": 0.7, + "warmth": 0.25, + "brightness": 0.55, + "tension": 0.8, + "clarity": 0.9, + "social": 0.45, + "nostalgia": 0.45, + "sacredness": 0.25, + "desire": 0.3, + "grief": 0.35, + "awe": 0.15, + "shame": 0.1, + "hope": 0.4, + "edge": 0.55, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "mercy with backbone", + "no return to old shape" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_gentle_guardian", + "label": "Devotion (gentle guardian)", + "family": "Devotion", + "subfamily": "protective", + "vector_17d": { + "valence": 0.45, + "arousal": 0.3, + "dominance": 0.6, + "warmth": 0.7, + "brightness": 0.7, + "tension": 0.4, + "clarity": 0.8, + "social": 0.65, + "nostalgia": 0.3, + "sacredness": 0.3, + "desire": 0.3, + "grief": 0.15, + "awe": 0.15, + "shame": 0.05, + "hope": 0.6, + "edge": 0.25, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "safe room", + "steady pulse", + "warm boundary" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_heartbeat_oath", + "label": "Devotion (heartbeat oath)", + "family": "Devotion", + "subfamily": "rhythmic", + "vector_17d": { + "valence": 0.4, + "arousal": 0.45, + "dominance": 0.55, + "warmth": 0.65, + "brightness": 0.65, + "tension": 0.45, + "clarity": 0.8, + "social": 0.65, + "nostalgia": 0.3, + "sacredness": 0.25, + "desire": 0.5, + "grief": 0.15, + "awe": 0.15, + "shame": 0.05, + "hope": 0.55, + "edge": 0.3, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "commitment in the groove", + "touch as promise" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_held_after_break", + "label": "Devotion (held after the break)", + "family": "Devotion", + "subfamily": "aftercare", + "vector_17d": { + "valence": 0.25, + "arousal": 0.25, + "dominance": 0.45, + "warmth": 0.5, + "brightness": 0.6, + "tension": 0.55, + "clarity": 0.7, + "social": 0.55, + "nostalgia": 0.55, + "sacredness": 0.4, + "desire": 0.2, + "grief": 0.45, + "awe": 0.2, + "shame": 0.1, + "hope": 0.4, + "edge": 0.35, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "aftershock tenderness", + "soft reconstruction" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_honeyed_confession", + "label": "Devotion (honeyed confession)", + "family": "Devotion", + "subfamily": "confessional", + "vector_17d": { + "valence": 0.25, + "arousal": 0.45, + "dominance": 0.5, + "warmth": 0.45, + "brightness": 0.6, + "tension": 0.75, + "clarity": 0.85, + "social": 0.45, + "nostalgia": 0.4, + "sacredness": 0.2, + "desire": 0.6, + "grief": 0.15, + "awe": 0.1, + "shame": 0.2, + "hope": 0.55, + "edge": 0.4, + "resolution_hunger": 0.5 + }, + "qualia_tags": [ + "sweet truth", + "risk spoken gently" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_hurt_but_here", + "label": "Devotion (hurt, but here)", + "family": "Devotion", + "subfamily": "wounded", + "vector_17d": { + "valence": 0.05, + "arousal": 0.4, + "dominance": 0.5, + "warmth": 0.1, + "brightness": 0.45, + "tension": 0.85, + "clarity": 0.75, + "social": 0.4, + "nostalgia": 0.55, + "sacredness": 0.35, + "desire": 0.45, + "grief": 0.55, + "awe": 0.25, + "shame": 0.15, + "hope": 0.35, + "edge": 0.65, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "staying costs", + "love with teeth marks", + "quiet refusal to leave" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_jealous_prayer", + "label": "Devotion (jealous prayer)", + "family": "Devotion", + "subfamily": "possessive", + "vector_17d": { + "valence": -0.05, + "arousal": 0.55, + "dominance": 0.55, + "warmth": 0.2, + "brightness": 0.45, + "tension": 0.85, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.35, + "sacredness": 0.2, + "desire": 0.8, + "grief": 0.2, + "awe": 0.1, + "shame": 0.25, + "hope": 0.3, + "edge": 0.7, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "wanting with claws", + "fear of replacement" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_last_train_home", + "label": "Devotion (last train home)", + "family": "Devotion", + "subfamily": "yearning-steady", + "vector_17d": { + "valence": 0.2, + "arousal": 0.35, + "dominance": 0.55, + "warmth": 0.15, + "brightness": 0.5, + "tension": 0.7, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.8, + "sacredness": 0.2, + "desire": 0.45, + "grief": 0.35, + "awe": 0.15, + "shame": 0.1, + "hope": 0.4, + "edge": 0.45, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "late-night devotion", + "distance folded into rhythm" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_love_as_act", + "label": "Devotion (love as act)", + "family": "Devotion", + "subfamily": "embodied", + "vector_17d": { + "valence": 0.55, + "arousal": 0.3, + "dominance": 0.75, + "warmth": 0.55, + "brightness": 0.7, + "tension": 0.2, + "clarity": 0.95, + "social": 0.6, + "nostalgia": 0.35, + "sacredness": 0.9, + "desire": 0.15, + "grief": 0.15, + "awe": 0.8, + "shame": 0.0, + "hope": 0.9, + "edge": 0.1, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "doing love" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_oath_in_minor", + "label": "Devotion (oath in minor)", + "family": "Devotion", + "subfamily": "minor-vow", + "vector_17d": { + "valence": 0.05, + "arousal": 0.35, + "dominance": 0.6, + "warmth": -0.05, + "brightness": 0.35, + "tension": 0.75, + "clarity": 0.8, + "social": 0.45, + "nostalgia": 0.45, + "sacredness": 0.35, + "desire": 0.35, + "grief": 0.5, + "awe": 0.15, + "shame": 0.1, + "hope": 0.3, + "edge": 0.6, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "promise without comfort", + "staying costs" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_sacrament_of_ordinary", + "label": "Devotion (sacrament of the ordinary)", + "family": "Devotion", + "subfamily": "everyday-sacred", + "vector_17d": { + "valence": 0.4, + "arousal": 0.25, + "dominance": 0.45, + "warmth": 0.55, + "brightness": 0.6, + "tension": 0.5, + "clarity": 0.65, + "social": 0.55, + "nostalgia": 0.45, + "sacredness": 0.7, + "desire": 0.25, + "grief": 0.2, + "awe": 0.45, + "shame": 0.05, + "hope": 0.55, + "edge": 0.2, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "kettle steam holiness", + "small acts as vows" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_shelter_in_public", + "label": "Devotion (shelter in public)", + "family": "Devotion", + "subfamily": "communal", + "vector_17d": { + "valence": 0.35, + "arousal": 0.4, + "dominance": 0.55, + "warmth": 0.55, + "brightness": 0.6, + "tension": 0.55, + "clarity": 0.75, + "social": 0.85, + "nostalgia": 0.35, + "sacredness": 0.45, + "desire": 0.25, + "grief": 0.2, + "awe": 0.3, + "shame": 0.05, + "hope": 0.55, + "edge": 0.3, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "shoulders touching", + "shared shelter" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_stay_when_ugly", + "label": "Devotion (staying when it’s ugly)", + "family": "Devotion", + "subfamily": "steadfast", + "vector_17d": { + "valence": 0.25, + "arousal": 0.35, + "dominance": 0.55, + "warmth": 0.45, + "brightness": 0.55, + "tension": 0.75, + "clarity": 0.8, + "social": 0.5, + "nostalgia": 0.45, + "sacredness": 0.35, + "desire": 0.4, + "grief": 0.35, + "awe": 0.2, + "shame": 0.1, + "hope": 0.55, + "edge": 0.55, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "loyal heat", + "unpaid care", + "hands still open" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_total_presence", + "label": "Devotion (total presence)", + "family": "Devotion", + "subfamily": "absorbed", + "vector_17d": { + "valence": 0.6, + "arousal": 0.35, + "dominance": 0.8, + "warmth": 0.5, + "brightness": 0.75, + "tension": 0.15, + "clarity": 1.0, + "social": 0.4, + "nostalgia": 0.25, + "sacredness": 0.95, + "desire": 0.1, + "grief": 0.05, + "awe": 0.9, + "shame": 0.0, + "hope": 0.95, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing else exists" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_unconditional_soft", + "label": "Devotion (unconditional, soft voice)", + "family": "Devotion", + "subfamily": "unconditional", + "vector_17d": { + "valence": 0.5, + "arousal": 0.25, + "dominance": 0.45, + "warmth": 0.75, + "brightness": 0.7, + "tension": 0.35, + "clarity": 0.75, + "social": 0.6, + "nostalgia": 0.35, + "sacredness": 0.25, + "desire": 0.35, + "grief": 0.1, + "awe": 0.15, + "shame": 0.05, + "hope": 0.65, + "edge": 0.15, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "warm certainty", + "no conditions spoken" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_unseen_labor", + "label": "Devotion (unseen labor)", + "family": "Devotion", + "subfamily": "service", + "vector_17d": { + "valence": 0.1, + "arousal": 0.25, + "dominance": 0.55, + "warmth": 0.15, + "brightness": 0.45, + "tension": 0.7, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.55, + "sacredness": 0.55, + "desire": 0.15, + "grief": 0.4, + "awe": 0.25, + "shame": 0.1, + "hope": 0.35, + "edge": 0.45, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "quiet work", + "care without credit" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_vigil", + "label": "Devotion (vigil through the night)", + "family": "Devotion", + "subfamily": "watchful", + "vector_17d": { + "valence": 0.1, + "arousal": 0.25, + "dominance": 0.55, + "warmth": 0.05, + "brightness": 0.4, + "tension": 0.75, + "clarity": 0.65, + "social": 0.4, + "nostalgia": 0.6, + "sacredness": 0.55, + "desire": 0.25, + "grief": 0.55, + "awe": 0.35, + "shame": 0.1, + "hope": 0.35, + "edge": 0.55, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "lamp light", + "quiet watching", + "staying awake for someone" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_vow_kept", + "label": "Devotion (vow kept)", + "family": "Devotion", + "subfamily": "promise", + "vector_17d": { + "valence": 0.5, + "arousal": 0.3, + "dominance": 0.8, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.25, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.5, + "sacredness": 0.95, + "desire": 0.05, + "grief": 0.2, + "awe": 0.85, + "shame": 0.0, + "hope": 0.9, + "edge": 0.1, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "promise embodied" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_without_reward", + "label": "Devotion (without reward)", + "family": "Devotion", + "subfamily": "unconditional", + "vector_17d": { + "valence": 0.3, + "arousal": 0.2, + "dominance": 0.65, + "warmth": 0.3, + "brightness": 0.55, + "tension": 0.25, + "clarity": 0.95, + "social": 0.3, + "nostalgia": 0.4, + "sacredness": 0.9, + "desire": 0.05, + "grief": 0.2, + "awe": 0.8, + "shame": 0.0, + "hope": 0.65, + "edge": 0.15, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "offering without return" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_worship_without_church", + "label": "Devotion (worship without church)", + "family": "Devotion", + "subfamily": "sacred", + "vector_17d": { + "valence": 0.3, + "arousal": 0.35, + "dominance": 0.45, + "warmth": 0.25, + "brightness": 0.55, + "tension": 0.7, + "clarity": 0.6, + "social": 0.7, + "nostalgia": 0.5, + "sacredness": 0.85, + "desire": 0.35, + "grief": 0.4, + "awe": 0.65, + "shame": 0.1, + "hope": 0.45, + "edge": 0.45, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "knees in the kitchen", + "holy ordinary", + "soft vow" + ], + "source": "MERGED_17D.json" + }, + { + "id": "devotion_yes_with_fear", + "label": "Devotion (yes, with fear inside it)", + "family": "Devotion", + "subfamily": "trembling", + "vector_17d": { + "valence": 0.15, + "arousal": 0.55, + "dominance": 0.45, + "warmth": 0.2, + "brightness": 0.55, + "tension": 0.85, + "clarity": 0.75, + "social": 0.35, + "nostalgia": 0.35, + "sacredness": 0.25, + "desire": 0.55, + "grief": 0.25, + "awe": 0.2, + "shame": 0.25, + "hope": 0.45, + "edge": 0.55, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "risked closeness", + "hands shaking but open" + ], + "source": "MERGED_17D.json" + }, + { + "id": "discovery_hidden_room", + "label": "Discovery (hidden room)", + "family": "Discovery", + "subfamily": "expansive", + "vector_17d": { + "valence": 0.4, + "arousal": 0.45, + "dominance": 0.45, + "warmth": 0.25, + "brightness": 0.7, + "tension": 0.45, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.2, + "sacredness": 0.35, + "desire": 0.45, + "grief": 0.1, + "awe": 0.5, + "shame": 0.0, + "hope": 0.65, + "edge": 0.35, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "new space opens" + ], + "source": "MERGED_17D.json" + }, + { + "id": "discovery_pattern_click", + "label": "Discovery (pattern clicks)", + "family": "Discovery", + "subfamily": "recognition", + "vector_17d": { + "valence": 0.45, + "arousal": 0.55, + "dominance": 0.55, + "warmth": 0.3, + "brightness": 0.65, + "tension": 0.4, + "clarity": 0.9, + "social": 0.45, + "nostalgia": 0.15, + "sacredness": 0.2, + "desire": 0.4, + "grief": 0.05, + "awe": 0.35, + "shame": 0.0, + "hope": 0.65, + "edge": 0.3, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "aha", + "sudden coherence" + ], + "source": "MERGED_17D.json" + }, + { + "id": "discovery_self_recognition", + "label": "Discovery (seeing yourself clearly)", + "family": "Discovery", + "subfamily": "personal", + "vector_17d": { + "valence": 0.35, + "arousal": 0.4, + "dominance": 0.55, + "warmth": 0.3, + "brightness": 0.6, + "tension": 0.5, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.4, + "desire": 0.3, + "grief": 0.2, + "awe": 0.35, + "shame": 0.0, + "hope": 0.6, + "edge": 0.3, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "clarity", + "self-seeing" + ], + "source": "MERGED_17D.json" + }, + { + "id": "discovery_unexpected_truth", + "label": "Discovery (unexpected truth)", + "family": "Discovery", + "subfamily": "revealing", + "vector_17d": { + "valence": 0.3, + "arousal": 0.6, + "dominance": 0.5, + "warmth": 0.15, + "brightness": 0.55, + "tension": 0.7, + "clarity": 0.85, + "social": 0.4, + "nostalgia": 0.25, + "sacredness": 0.3, + "desire": 0.35, + "grief": 0.2, + "awe": 0.4, + "shame": 0.1, + "hope": 0.55, + "edge": 0.55, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "didn’t expect that", + "truth lands" + ], + "source": "MERGED_17D.json" + }, + { + "id": "discovery_world_reenchanted", + "label": "Discovery (world re-enchanted)", + "family": "Discovery", + "subfamily": "renewal", + "vector_17d": { + "valence": 0.5, + "arousal": 0.45, + "dominance": 0.5, + "warmth": 0.35, + "brightness": 0.75, + "tension": 0.35, + "clarity": 0.7, + "social": 0.5, + "nostalgia": 0.2, + "sacredness": 0.45, + "desire": 0.4, + "grief": 0.1, + "awe": 0.55, + "shame": 0.0, + "hope": 0.75, + "edge": 0.25, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "seeing freshly", + "renewed wonder" + ], + "source": "MERGED_17D.json" + }, + { + "id": "ending_finality", + "label": "Ending (finality)", + "family": "Ending", + "subfamily": "absolute", + "vector_17d": { + "valence": 0.45, + "arousal": 0.05, + "dominance": 0.85, + "warmth": 0.4, + "brightness": 0.5, + "tension": 0.0, + "clarity": 1.0, + "social": 0.3, + "nostalgia": 0.35, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.1, + "awe": 0.9, + "shame": 0.0, + "hope": 0.8, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "this is finished" + ], + "source": "MERGED_17D.json" + }, + { + "id": "ending_honored_boundary", + "label": "Ending (boundary honored)", + "family": "Ending", + "subfamily": "ethical", + "vector_17d": { + "valence": 0.5, + "arousal": 0.05, + "dominance": 0.9, + "warmth": 0.4, + "brightness": 0.55, + "tension": 0.0, + "clarity": 1.0, + "social": 0.4, + "nostalgia": 0.35, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.05, + "awe": 0.95, + "shame": 0.0, + "hope": 0.85, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "stopped at the right place" + ], + "source": "MERGED_17D.json" + }, + { + "id": "ending_no_echo", + "label": "Ending (no echo)", + "family": "Ending", + "subfamily": "clean", + "vector_17d": { + "valence": 0.4, + "arousal": 0.0, + "dominance": 0.8, + "warmth": 0.35, + "brightness": 0.45, + "tension": 0.0, + "clarity": 1.0, + "social": 0.25, + "nostalgia": 0.25, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.05, + "awe": 0.85, + "shame": 0.0, + "hope": 0.75, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "no aftermath" + ], + "source": "MERGED_17D.json" + }, + { + "id": "ending_no_return", + "label": "Ending (no return)", + "family": "Ending", + "subfamily": "irreversible", + "vector_17d": { + "valence": 0.45, + "arousal": 0.05, + "dominance": 0.95, + "warmth": 0.35, + "brightness": 0.5, + "tension": 0.0, + "clarity": 1.0, + "social": 0.25, + "nostalgia": 0.2, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 0.8, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "cannot be reopened" + ], + "source": "MERGED_17D.json" + }, + { + "id": "ending_satisfied", + "label": "Ending (satisfied)", + "family": "Ending", + "subfamily": "complete", + "vector_17d": { + "valence": 0.55, + "arousal": 0.05, + "dominance": 0.85, + "warmth": 0.45, + "brightness": 0.6, + "tension": 0.0, + "clarity": 1.0, + "social": 0.35, + "nostalgia": 0.3, + "sacredness": 0.9, + "desire": 0.0, + "grief": 0.0, + "awe": 0.9, + "shame": 0.0, + "hope": 0.85, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing missing" + ], + "source": "MERGED_17D.json" + }, + { + "id": "endurance_dignified_silence", + "label": "Dignified endurance (no explanation)", + "family": "Endurance", + "subfamily": "dignified", + "vector_17d": { + "valence": 0.05, + "arousal": 0.3, + "dominance": 0.65, + "warmth": -0.2, + "brightness": 0.45, + "tension": 0.7, + "clarity": 0.8, + "social": 0.4, + "nostalgia": 0.55, + "sacredness": 0.45, + "desire": 0.1, + "grief": 0.6, + "awe": 0.35, + "shame": 0.05, + "hope": 0.35, + "edge": 0.55, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "upright stillness", + "unsaid strength" + ], + "source": "MERGED_17D.json" + }, + { + "id": "endurance_ritual_breathing", + "label": "Ritual endurance (breathing anyway)", + "family": "Endurance", + "subfamily": "ritual", + "vector_17d": { + "valence": 0.1, + "arousal": 0.45, + "dominance": 0.5, + "warmth": -0.05, + "brightness": 0.55, + "tension": 0.65, + "clarity": 0.55, + "social": 0.8, + "nostalgia": 0.6, + "sacredness": 0.9, + "desire": 0.2, + "grief": 0.65, + "awe": 0.55, + "shame": 0.1, + "hope": 0.45, + "edge": 0.4, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "held pain", + "shared breath", + "continuance" + ], + "source": "MERGED_17D.json" + }, + { + "id": "faith_after_disappointment", + "label": "Faith (after disappointment)", + "family": "Faith", + "subfamily": "tested", + "vector_17d": { + "valence": 0.1, + "arousal": 0.3, + "dominance": 0.55, + "warmth": 0.2, + "brightness": 0.45, + "tension": 0.4, + "clarity": 0.9, + "social": 0.3, + "nostalgia": 0.45, + "sacredness": 0.75, + "desire": 0.1, + "grief": 0.35, + "awe": 0.65, + "shame": 0.0, + "hope": 0.45, + "edge": 0.4, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "not rewarded", + "still open" + ], + "source": "MERGED_17D.json" + }, + { + "id": "faith_quiet_yes", + "label": "Faith (quiet yes)", + "family": "Faith", + "subfamily": "affirmation", + "vector_17d": { + "valence": 0.35, + "arousal": 0.2, + "dominance": 0.6, + "warmth": 0.35, + "brightness": 0.55, + "tension": 0.2, + "clarity": 0.95, + "social": 0.3, + "nostalgia": 0.3, + "sacredness": 0.85, + "desire": 0.1, + "grief": 0.15, + "awe": 0.75, + "shame": 0.0, + "hope": 0.7, + "edge": 0.15, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "inner assent" + ], + "source": "MERGED_17D.json" + }, + { + "id": "faith_standing_without_sign", + "label": "Faith (standing without sign)", + "family": "Faith", + "subfamily": "unanswered", + "vector_17d": { + "valence": 0.2, + "arousal": 0.25, + "dominance": 0.6, + "warmth": 0.25, + "brightness": 0.5, + "tension": 0.35, + "clarity": 0.85, + "social": 0.25, + "nostalgia": 0.3, + "sacredness": 0.8, + "desire": 0.1, + "grief": 0.25, + "awe": 0.7, + "shame": 0.0, + "hope": 0.55, + "edge": 0.35, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "no reply", + "still here" + ], + "source": "MERGED_17D.json" + }, + { + "id": "faith_unprovable_ground", + "label": "Faith (unprovable ground)", + "family": "Faith", + "subfamily": "ontological", + "vector_17d": { + "valence": 0.3, + "arousal": 0.25, + "dominance": 0.7, + "warmth": 0.3, + "brightness": 0.55, + "tension": 0.3, + "clarity": 1.0, + "social": 0.25, + "nostalgia": 0.25, + "sacredness": 0.9, + "desire": 0.05, + "grief": 0.2, + "awe": 0.8, + "shame": 0.0, + "hope": 0.75, + "edge": 0.2, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "standing on what cannot be shown" + ], + "source": "MERGED_17D.json" + }, + { + "id": "faith_waiting_as_practice", + "label": "Faith (waiting as practice)", + "family": "Faith", + "subfamily": "temporal", + "vector_17d": { + "valence": 0.25, + "arousal": 0.15, + "dominance": 0.55, + "warmth": 0.25, + "brightness": 0.45, + "tension": 0.2, + "clarity": 0.85, + "social": 0.2, + "nostalgia": 0.35, + "sacredness": 0.85, + "desire": 0.05, + "grief": 0.15, + "awe": 0.75, + "shame": 0.0, + "hope": 0.6, + "edge": 0.1, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "time sanctified" + ], + "source": "MERGED_17D.json" + }, + { + "id": "grief_memory_flash", + "label": "Grief (memory flash, sudden)", + "family": "Grief", + "subfamily": "intrusive", + "vector_17d": { + "valence": -0.3, + "arousal": 0.55, + "dominance": 0.25, + "warmth": -0.15, + "brightness": 0.3, + "tension": 0.85, + "clarity": 0.75, + "social": 0.2, + "nostalgia": 0.9, + "sacredness": 0.2, + "desire": 0.1, + "grief": 0.85, + "awe": 0.25, + "shame": 0.1, + "hope": 0.1, + "edge": 0.6, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "sudden ache", + "memory ambush" + ], + "source": "MERGED_17D.json" + }, + { + "id": "grief_private_weight", + "label": "Grief (private weight, no audience)", + "family": "Grief", + "subfamily": "inward", + "vector_17d": { + "valence": -0.4, + "arousal": 0.25, + "dominance": 0.2, + "warmth": -0.3, + "brightness": 0.25, + "tension": 0.65, + "clarity": 0.6, + "social": 0.1, + "nostalgia": 0.75, + "sacredness": 0.25, + "desire": 0.05, + "grief": 0.95, + "awe": 0.15, + "shame": 0.15, + "hope": 0.15, + "edge": 0.45, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "weight carried alone", + "quiet ache" + ], + "source": "MERGED_17D.json" + }, + { + "id": "grief_sacred_mourning", + "label": "Grief (sacred mourning, held)", + "family": "Grief", + "subfamily": "ritual", + "vector_17d": { + "valence": -0.25, + "arousal": 0.35, + "dominance": 0.35, + "warmth": -0.1, + "brightness": 0.35, + "tension": 0.7, + "clarity": 0.55, + "social": 0.8, + "nostalgia": 0.8, + "sacredness": 0.95, + "desire": 0.05, + "grief": 0.9, + "awe": 0.7, + "shame": 0.05, + "hope": 0.25, + "edge": 0.4, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "shared mourning", + "holy weight" + ], + "source": "MERGED_17D.json" + }, + { + "id": "grief_soft_acceptance", + "label": "Grief (soft acceptance, not healed)", + "family": "Grief", + "subfamily": "accepting", + "vector_17d": { + "valence": -0.1, + "arousal": 0.25, + "dominance": 0.4, + "warmth": 0.05, + "brightness": 0.4, + "tension": 0.55, + "clarity": 0.65, + "social": 0.35, + "nostalgia": 0.7, + "sacredness": 0.3, + "desire": 0.05, + "grief": 0.75, + "awe": 0.25, + "shame": 0.05, + "hope": 0.35, + "edge": 0.35, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "living with loss", + "gentle weight" + ], + "source": "MERGED_17D.json" + }, + { + "id": "grief_unfinished_sentence", + "label": "Grief (unfinished sentence)", + "family": "Grief", + "subfamily": "incomplete", + "vector_17d": { + "valence": -0.25, + "arousal": 0.4, + "dominance": 0.3, + "warmth": -0.15, + "brightness": 0.3, + "tension": 0.9, + "clarity": 0.7, + "social": 0.2, + "nostalgia": 0.85, + "sacredness": 0.25, + "desire": 0.1, + "grief": 0.9, + "awe": 0.2, + "shame": 0.1, + "hope": 0.1, + "edge": 0.65, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "left unsaid", + "hanging thread" + ], + "source": "MERGED_17D.json" + }, + { + "id": "innocence_before_knowing", + "label": "Innocence (before knowing)", + "family": "Innocence", + "subfamily": "pre-fall", + "vector_17d": { + "valence": 0.45, + "arousal": 0.25, + "dominance": 0.3, + "warmth": 0.35, + "brightness": 0.65, + "tension": 0.3, + "clarity": 0.55, + "social": 0.4, + "nostalgia": 0.55, + "sacredness": 0.3, + "desire": 0.2, + "grief": 0.1, + "awe": 0.3, + "shame": 0.0, + "hope": 0.65, + "edge": 0.2, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "unmarked perception", + "soft wonder" + ], + "source": "MERGED_17D.json" + }, + { + "id": "innocence_first_light", + "label": "Innocence (first light through curtains)", + "family": "Innocence", + "subfamily": "fresh", + "vector_17d": { + "valence": 0.55, + "arousal": 0.3, + "dominance": 0.4, + "warmth": 0.45, + "brightness": 0.75, + "tension": 0.25, + "clarity": 0.65, + "social": 0.45, + "nostalgia": 0.2, + "sacredness": 0.35, + "desire": 0.2, + "grief": 0.05, + "awe": 0.35, + "shame": 0.0, + "hope": 0.75, + "edge": 0.1, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "newness", + "gentle optimism" + ], + "source": "MERGED_17D.json" + }, + { + "id": "innocence_playful_hum", + "label": "Innocence (playful hum, alone)", + "family": "Innocence", + "subfamily": "self-contained", + "vector_17d": { + "valence": 0.55, + "arousal": 0.3, + "dominance": 0.45, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.2, + "clarity": 0.6, + "social": 0.25, + "nostalgia": 0.25, + "sacredness": 0.2, + "desire": 0.2, + "grief": 0.05, + "awe": 0.2, + "shame": 0.0, + "hope": 0.65, + "edge": 0.1, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "content alone", + "private joy" + ], + "source": "MERGED_17D.json" + }, + { + "id": "innocence_unquestioned_trust", + "label": "Innocence (unquestioned trust)", + "family": "Innocence", + "subfamily": "trusting", + "vector_17d": { + "valence": 0.6, + "arousal": 0.35, + "dominance": 0.35, + "warmth": 0.55, + "brightness": 0.7, + "tension": 0.2, + "clarity": 0.6, + "social": 0.55, + "nostalgia": 0.3, + "sacredness": 0.25, + "desire": 0.25, + "grief": 0.05, + "awe": 0.25, + "shame": 0.0, + "hope": 0.8, + "edge": 0.1, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "openness", + "no second thought" + ], + "source": "MERGED_17D.json" + }, + { + "id": "innocence_vulnerable_smile", + "label": "Innocence (vulnerable smile)", + "family": "Innocence", + "subfamily": "unguarded", + "vector_17d": { + "valence": 0.5, + "arousal": 0.4, + "dominance": 0.35, + "warmth": 0.5, + "brightness": 0.65, + "tension": 0.45, + "clarity": 0.7, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.25, + "desire": 0.3, + "grief": 0.1, + "awe": 0.25, + "shame": 0.05, + "hope": 0.7, + "edge": 0.25, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "open face", + "risked warmth" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_breathing_whole", + "label": "Integration (breathing as one)", + "family": "Integration", + "subfamily": "embodied", + "vector_17d": { + "valence": 0.4, + "arousal": 0.35, + "dominance": 0.7, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.45, + "clarity": 0.85, + "social": 0.55, + "nostalgia": 0.3, + "sacredness": 0.4, + "desire": 0.25, + "grief": 0.2, + "awe": 0.35, + "shame": 0.0, + "hope": 0.55, + "edge": 0.3, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "body and mind aligned" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_dual_truth", + "label": "Integration (two truths held)", + "family": "Integration", + "subfamily": "paradox", + "vector_17d": { + "valence": 0.35, + "arousal": 0.3, + "dominance": 0.55, + "warmth": 0.35, + "brightness": 0.6, + "tension": 0.45, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.45, + "sacredness": 0.5, + "desire": 0.2, + "grief": 0.25, + "awe": 0.45, + "shame": 0.0, + "hope": 0.6, + "edge": 0.3, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "both/and" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_final_truth", + "label": "Integration (final truth, nothing added)", + "family": "Integration", + "subfamily": "complete", + "vector_17d": { + "valence": 0.45, + "arousal": 0.3, + "dominance": 0.75, + "warmth": 0.3, + "brightness": 0.65, + "tension": 0.35, + "clarity": 0.98, + "social": 0.5, + "nostalgia": 0.4, + "sacredness": 0.45, + "desire": 0.2, + "grief": 0.25, + "awe": 0.4, + "shame": 0.0, + "hope": 0.6, + "edge": 0.25, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "nothing left unsaid" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_lived_wisdom", + "label": "Integration (lived wisdom)", + "family": "Integration", + "subfamily": "mature", + "vector_17d": { + "valence": 0.55, + "arousal": 0.3, + "dominance": 0.7, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.25, + "clarity": 0.95, + "social": 0.5, + "nostalgia": 0.4, + "sacredness": 0.6, + "desire": 0.2, + "grief": 0.15, + "awe": 0.55, + "shame": 0.0, + "hope": 0.8, + "edge": 0.2, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "earned calm" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_no_repair_needed", + "label": "Integration (no repair needed)", + "family": "Integration", + "subfamily": "acceptance", + "vector_17d": { + "valence": 0.5, + "arousal": 0.25, + "dominance": 0.7, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.2, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.55, + "desire": 0.2, + "grief": 0.15, + "awe": 0.5, + "shame": 0.0, + "hope": 0.75, + "edge": 0.15, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "this is enough" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_present_wholeness", + "label": "Integration (present wholeness)", + "family": "Integration", + "subfamily": "now", + "vector_17d": { + "valence": 0.6, + "arousal": 0.3, + "dominance": 0.75, + "warmth": 0.5, + "brightness": 0.75, + "tension": 0.15, + "clarity": 1.0, + "social": 0.45, + "nostalgia": 0.25, + "sacredness": 0.65, + "desire": 0.15, + "grief": 0.1, + "awe": 0.6, + "shame": 0.0, + "hope": 0.85, + "edge": 0.1, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "here", + "complete" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_soft_arrival", + "label": "Integration (soft arrival, no banner)", + "family": "Integration", + "subfamily": "quiet", + "vector_17d": { + "valence": 0.3, + "arousal": 0.25, + "dominance": 0.65, + "warmth": 0.25, + "brightness": 0.55, + "tension": 0.4, + "clarity": 0.9, + "social": 0.4, + "nostalgia": 0.35, + "sacredness": 0.35, + "desire": 0.15, + "grief": 0.25, + "awe": 0.3, + "shame": 0.0, + "hope": 0.45, + "edge": 0.3, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "peace without announcement" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_whole_with_scar", + "label": "Integration (whole, scar visible)", + "family": "Integration", + "subfamily": "honest", + "vector_17d": { + "valence": 0.35, + "arousal": 0.45, + "dominance": 0.7, + "warmth": 0.3, + "brightness": 0.6, + "tension": 0.55, + "clarity": 0.95, + "social": 0.55, + "nostalgia": 0.45, + "sacredness": 0.35, + "desire": 0.25, + "grief": 0.35, + "awe": 0.3, + "shame": 0.0, + "hope": 0.5, + "edge": 0.45, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "nothing hidden", + "earned calm" + ], + "source": "MERGED_17D.json" + }, + { + "id": "integration_yes_and_no", + "label": "Integration (yes and no coexist)", + "family": "Integration", + "subfamily": "paradox", + "vector_17d": { + "valence": 0.2, + "arousal": 0.4, + "dominance": 0.6, + "warmth": 0.15, + "brightness": 0.55, + "tension": 0.65, + "clarity": 0.85, + "social": 0.45, + "nostalgia": 0.5, + "sacredness": 0.3, + "desire": 0.2, + "grief": 0.4, + "awe": 0.35, + "shame": 0.05, + "hope": 0.4, + "edge": 0.55, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "holding opposites", + "breathing through both" + ], + "source": "MERGED_17D.json" + }, + { + "id": "letting_go_complete", + "label": "Letting Go (complete)", + "family": "Letting_Go", + "subfamily": "final", + "vector_17d": { + "valence": 0.8, + "arousal": 0.0, + "dominance": 1.0, + "warmth": 0.75, + "brightness": 0.85, + "tension": 0.0, + "clarity": 1.0, + "social": 0.35, + "nostalgia": 0.0, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing left to release" + ], + "source": "MERGED_17D.json" + }, + { + "id": "letting_go_non_attachment", + "label": "Letting Go (non-attachment)", + "family": "Letting_Go", + "subfamily": "free", + "vector_17d": { + "valence": 0.75, + "arousal": 0.0, + "dominance": 1.0, + "warmth": 0.7, + "brightness": 0.8, + "tension": 0.0, + "clarity": 1.0, + "social": 0.4, + "nostalgia": 0.1, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing clings" + ], + "source": "MERGED_17D.json" + }, + { + "id": "letting_go_release", + "label": "Letting Go (release)", + "family": "Letting_Go", + "subfamily": "ease", + "vector_17d": { + "valence": 0.6, + "arousal": 0.05, + "dominance": 0.9, + "warmth": 0.55, + "brightness": 0.65, + "tension": 0.0, + "clarity": 1.0, + "social": 0.4, + "nostalgia": 0.25, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.0, + "awe": 0.9, + "shame": 0.0, + "hope": 0.9, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "no holding" + ], + "source": "MERGED_17D.json" + }, + { + "id": "letting_go_trust", + "label": "Letting Go (trust)", + "family": "Letting_Go", + "subfamily": "faithful", + "vector_17d": { + "valence": 0.7, + "arousal": 0.05, + "dominance": 0.95, + "warmth": 0.65, + "brightness": 0.75, + "tension": 0.0, + "clarity": 1.0, + "social": 0.45, + "nostalgia": 0.2, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "it will be okay" + ], + "source": "MERGED_17D.json" + }, + { + "id": "letting_go_without_grief", + "label": "Letting Go (without grief)", + "family": "Letting_Go", + "subfamily": "light", + "vector_17d": { + "valence": 0.65, + "arousal": 0.0, + "dominance": 0.9, + "warmth": 0.6, + "brightness": 0.7, + "tension": 0.0, + "clarity": 1.0, + "social": 0.35, + "nostalgia": 0.15, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "no sadness" + ], + "source": "MERGED_17D.json" + }, + { + "id": "liberation_bare_spine", + "label": "Liberation (bare spine, no armor)", + "family": "Liberation", + "subfamily": "bare", + "vector_17d": { + "valence": 0.65, + "arousal": 0.75, + "dominance": 0.85, + "warmth": 0.45, + "brightness": 0.75, + "tension": 0.4, + "clarity": 0.9, + "social": 0.7, + "nostalgia": 0.1, + "sacredness": 0.2, + "desire": 0.55, + "grief": 0.2, + "awe": 0.35, + "shame": 0.05, + "hope": 0.8, + "edge": 0.3, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "standing visible", + "permission embodied" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_body_memory", + "label": "Longing (body remembers before mind agrees)", + "family": "Longing", + "subfamily": "somatic", + "vector_17d": { + "valence": 0.05, + "arousal": 0.65, + "dominance": 0.4, + "warmth": 0.2, + "brightness": 0.55, + "tension": 0.85, + "clarity": 0.6, + "social": 0.25, + "nostalgia": 0.55, + "sacredness": 0.1, + "desire": 0.85, + "grief": 0.2, + "awe": 0.1, + "shame": 0.1, + "hope": 0.35, + "edge": 0.55, + "resolution_hunger": 0.8 + }, + "qualia_tags": [ + "skin recollection", + "automatic pull" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_bright_edge", + "label": "Longing (bright edge, not despair)", + "family": "Longing", + "subfamily": "hopeful", + "vector_17d": { + "valence": 0.2, + "arousal": 0.55, + "dominance": 0.35, + "warmth": 0.2, + "brightness": 0.65, + "tension": 0.75, + "clarity": 0.7, + "social": 0.4, + "nostalgia": 0.35, + "sacredness": 0.15, + "desire": 0.65, + "grief": 0.2, + "awe": 0.15, + "shame": 0.1, + "hope": 0.7, + "edge": 0.35, + "resolution_hunger": 0.65 + }, + "qualia_tags": [ + "reaching with light in it", + "ache that believes" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_choir_ache", + "label": "Longing (choir ache, communal)", + "family": "Longing", + "subfamily": "communal-sacred", + "vector_17d": { + "valence": 0.05, + "arousal": 0.5, + "dominance": 0.45, + "warmth": 0.0, + "brightness": 0.55, + "tension": 0.75, + "clarity": 0.55, + "social": 0.9, + "nostalgia": 0.55, + "sacredness": 0.9, + "desire": 0.45, + "grief": 0.55, + "awe": 0.65, + "shame": 0.05, + "hope": 0.45, + "edge": 0.4, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "shared yearning", + "ritual want" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_clean_hurt", + "label": "Longing (clean hurt, no drama)", + "family": "Longing", + "subfamily": "plainspoken", + "vector_17d": { + "valence": -0.05, + "arousal": 0.45, + "dominance": 0.4, + "warmth": -0.1, + "brightness": 0.45, + "tension": 0.8, + "clarity": 0.9, + "social": 0.25, + "nostalgia": 0.55, + "sacredness": 0.15, + "desire": 0.55, + "grief": 0.45, + "awe": 0.1, + "shame": 0.1, + "hope": 0.25, + "edge": 0.55, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "straight ache", + "truth without glitter" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_defiant_reach", + "label": "Longing (defiant reach, no shame)", + "family": "Longing", + "subfamily": "bold", + "vector_17d": { + "valence": 0.15, + "arousal": 0.7, + "dominance": 0.7, + "warmth": 0.25, + "brightness": 0.6, + "tension": 0.8, + "clarity": 0.85, + "social": 0.55, + "nostalgia": 0.25, + "sacredness": 0.15, + "desire": 0.8, + "grief": 0.2, + "awe": 0.15, + "shame": 0.05, + "hope": 0.6, + "edge": 0.55, + "resolution_hunger": 0.85 + }, + "qualia_tags": [ + "I want you and I’m not small for it", + "reach with spine" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_doorway_pause", + "label": "Longing (doorway pause, footsteps behind you)", + "family": "Longing", + "subfamily": "suspended", + "vector_17d": { + "valence": 0.0, + "arousal": 0.55, + "dominance": 0.35, + "warmth": -0.05, + "brightness": 0.5, + "tension": 0.95, + "clarity": 0.7, + "social": 0.2, + "nostalgia": 0.45, + "sacredness": 0.15, + "desire": 0.65, + "grief": 0.35, + "awe": 0.1, + "shame": 0.15, + "hope": 0.35, + "edge": 0.6, + "resolution_hunger": 0.85 + }, + "qualia_tags": [ + "time held by a thread", + "decision not taken" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_hollow_room", + "label": "Longing (hollow room after laughter)", + "family": "Longing", + "subfamily": "afterglow", + "vector_17d": { + "valence": -0.1, + "arousal": 0.35, + "dominance": 0.25, + "warmth": -0.2, + "brightness": 0.45, + "tension": 0.8, + "clarity": 0.55, + "social": 0.2, + "nostalgia": 0.7, + "sacredness": 0.2, + "desire": 0.5, + "grief": 0.45, + "awe": 0.15, + "shame": 0.15, + "hope": 0.2, + "edge": 0.55, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "afterparty silence", + "echoing want" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_knife_softly", + "label": "Longing (knife softly, smiling)", + "family": "Longing", + "subfamily": "bittersweet", + "vector_17d": { + "valence": 0.0, + "arousal": 0.55, + "dominance": 0.4, + "warmth": 0.05, + "brightness": 0.5, + "tension": 0.9, + "clarity": 0.85, + "social": 0.3, + "nostalgia": 0.55, + "sacredness": 0.2, + "desire": 0.7, + "grief": 0.35, + "awe": 0.15, + "shame": 0.15, + "hope": 0.35, + "edge": 0.7, + "resolution_hunger": 0.7 + }, + "qualia_tags": [ + "sweet pain", + "beautiful wrongness", + "truth with perfume" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_moonlit_pull", + "label": "Longing (moonlit pull, inevitable)", + "family": "Longing", + "subfamily": "magnetic", + "vector_17d": { + "valence": 0.1, + "arousal": 0.65, + "dominance": 0.45, + "warmth": 0.05, + "brightness": 0.5, + "tension": 0.85, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.35, + "sacredness": 0.15, + "desire": 0.85, + "grief": 0.2, + "awe": 0.2, + "shame": 0.15, + "hope": 0.4, + "edge": 0.55, + "resolution_hunger": 0.75 + }, + "qualia_tags": [ + "gravity in the chest", + "almost-touch" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_open_hands", + "label": "Longing (open hands, no demand)", + "family": "Longing", + "subfamily": "tender", + "vector_17d": { + "valence": 0.1, + "arousal": 0.5, + "dominance": 0.3, + "warmth": 0.1, + "brightness": 0.55, + "tension": 0.8, + "clarity": 0.65, + "social": 0.35, + "nostalgia": 0.45, + "sacredness": 0.2, + "desire": 0.65, + "grief": 0.25, + "awe": 0.15, + "shame": 0.15, + "hope": 0.55, + "edge": 0.4, + "resolution_hunger": 0.6 + }, + "qualia_tags": [ + "reaching", + "ache that stays kind" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_phone_in_hand", + "label": "Longing (phone in hand, not sent)", + "family": "Longing", + "subfamily": "withheld", + "vector_17d": { + "valence": -0.1, + "arousal": 0.45, + "dominance": 0.25, + "warmth": -0.05, + "brightness": 0.45, + "tension": 0.9, + "clarity": 0.7, + "social": 0.15, + "nostalgia": 0.55, + "sacredness": 0.15, + "desire": 0.7, + "grief": 0.35, + "awe": 0.1, + "shame": 0.25, + "hope": 0.3, + "edge": 0.55, + "resolution_hunger": 0.7 + }, + "qualia_tags": [ + "unsent message", + "throat tight", + "hovering" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_prayer_disguised", + "label": "Longing (prayer disguised as pop)", + "family": "Longing", + "subfamily": "secret-sacred", + "vector_17d": { + "valence": 0.05, + "arousal": 0.45, + "dominance": 0.35, + "warmth": 0.05, + "brightness": 0.55, + "tension": 0.8, + "clarity": 0.6, + "social": 0.55, + "nostalgia": 0.5, + "sacredness": 0.75, + "desire": 0.55, + "grief": 0.4, + "awe": 0.55, + "shame": 0.1, + "hope": 0.5, + "edge": 0.4, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "want as hymn", + "soft congregation" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_snowglobe_memory", + "label": "Longing (snowglobe memory, perfect and sealed)", + "family": "Longing", + "subfamily": "idealized", + "vector_17d": { + "valence": 0.05, + "arousal": 0.3, + "dominance": 0.25, + "warmth": -0.1, + "brightness": 0.55, + "tension": 0.7, + "clarity": 0.55, + "social": 0.15, + "nostalgia": 0.95, + "sacredness": 0.25, + "desire": 0.45, + "grief": 0.35, + "awe": 0.2, + "shame": 0.1, + "hope": 0.25, + "edge": 0.3, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "ideal memory", + "untouchable sweetness" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_sunrise_text", + "label": "Longing (sunrise text you almost send)", + "family": "Longing", + "subfamily": "hesitant-hope", + "vector_17d": { + "valence": 0.1, + "arousal": 0.45, + "dominance": 0.3, + "warmth": 0.15, + "brightness": 0.6, + "tension": 0.85, + "clarity": 0.7, + "social": 0.15, + "nostalgia": 0.45, + "sacredness": 0.15, + "desire": 0.6, + "grief": 0.25, + "awe": 0.1, + "shame": 0.2, + "hope": 0.65, + "edge": 0.45, + "resolution_hunger": 0.75 + }, + "qualia_tags": [ + "hovering courage", + "almost-yes" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_sweet_surrender", + "label": "Longing (sweet surrender)", + "family": "Longing", + "subfamily": "accepting", + "vector_17d": { + "valence": 0.1, + "arousal": 0.4, + "dominance": 0.35, + "warmth": 0.15, + "brightness": 0.5, + "tension": 0.7, + "clarity": 0.6, + "social": 0.3, + "nostalgia": 0.55, + "sacredness": 0.2, + "desire": 0.6, + "grief": 0.25, + "awe": 0.15, + "shame": 0.1, + "hope": 0.4, + "edge": 0.35, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "wanting without fight", + "soft fall" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_train_window", + "label": "Longing (train window, lights passing)", + "family": "Longing", + "subfamily": "moving-away", + "vector_17d": { + "valence": 0.0, + "arousal": 0.35, + "dominance": 0.3, + "warmth": -0.1, + "brightness": 0.45, + "tension": 0.75, + "clarity": 0.55, + "social": 0.2, + "nostalgia": 0.8, + "sacredness": 0.15, + "desire": 0.55, + "grief": 0.4, + "awe": 0.2, + "shame": 0.1, + "hope": 0.25, + "edge": 0.45, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "distance", + "blurred warmth", + "goodbye unsaid" + ], + "source": "MERGED_17D.json" + }, + { + "id": "longing_warm_regret", + "label": "Longing (warm regret, forgiving self)", + "family": "Longing", + "subfamily": "regret-soft", + "vector_17d": { + "valence": 0.0, + "arousal": 0.35, + "dominance": 0.35, + "warmth": 0.2, + "brightness": 0.5, + "tension": 0.75, + "clarity": 0.75, + "social": 0.3, + "nostalgia": 0.8, + "sacredness": 0.2, + "desire": 0.45, + "grief": 0.4, + "awe": 0.15, + "shame": 0.2, + "hope": 0.3, + "edge": 0.45, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "gentle regret", + "soft self-mercy" + ], + "source": "MERGED_17D.json" + }, + { + "id": "loss_control_body_leads", + "label": "Loss of Control (body leads, mind follows)", + "family": "Loss_of_Control", + "subfamily": "somatic", + "vector_17d": { + "valence": 0.05, + "arousal": 0.75, + "dominance": 0.3, + "warmth": 0.3, + "brightness": 0.5, + "tension": 0.85, + "clarity": 0.45, + "social": 0.4, + "nostalgia": 0.1, + "sacredness": 0.2, + "desire": 0.55, + "grief": 0.15, + "awe": 0.25, + "shame": 0.05, + "hope": 0.25, + "edge": 0.75, + "resolution_hunger": 0.65 + }, + "qualia_tags": [ + "instinct surge", + "no plan" + ], + "source": "MERGED_17D.json" + }, + { + "id": "loss_control_ground_slips", + "label": "Loss of Control (ground slips)", + "family": "Loss_of_Control", + "subfamily": "destabilized", + "vector_17d": { + "valence": -0.05, + "arousal": 0.65, + "dominance": 0.2, + "warmth": 0.05, + "brightness": 0.45, + "tension": 0.9, + "clarity": 0.55, + "social": 0.25, + "nostalgia": 0.15, + "sacredness": 0.2, + "desire": 0.35, + "grief": 0.25, + "awe": 0.35, + "shame": 0.15, + "hope": 0.2, + "edge": 0.8, + "resolution_hunger": 0.6 + }, + "qualia_tags": [ + "tilt", + "nothing stable" + ], + "source": "MERGED_17D.json" + }, + { + "id": "loss_control_overwhelm", + "label": "Loss of Control (overwhelm floods)", + "family": "Loss_of_Control", + "subfamily": "flooded", + "vector_17d": { + "valence": -0.15, + "arousal": 0.85, + "dominance": 0.15, + "warmth": 0.1, + "brightness": 0.35, + "tension": 0.95, + "clarity": 0.3, + "social": 0.3, + "nostalgia": 0.2, + "sacredness": 0.25, + "desire": 0.45, + "grief": 0.4, + "awe": 0.35, + "shame": 0.25, + "hope": 0.15, + "edge": 0.85, + "resolution_hunger": 0.7 + }, + "qualia_tags": [ + "too much", + "no container" + ], + "source": "MERGED_17D.json" + }, + { + "id": "loss_control_silent_panic", + "label": "Loss of Control (silent panic)", + "family": "Loss_of_Control", + "subfamily": "internal", + "vector_17d": { + "valence": -0.2, + "arousal": 0.6, + "dominance": 0.2, + "warmth": -0.05, + "brightness": 0.3, + "tension": 0.9, + "clarity": 0.5, + "social": 0.15, + "nostalgia": 0.25, + "sacredness": 0.2, + "desire": 0.2, + "grief": 0.35, + "awe": 0.25, + "shame": 0.3, + "hope": 0.1, + "edge": 0.8, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "contained panic", + "no exit" + ], + "source": "MERGED_17D.json" + }, + { + "id": "loss_control_words_fail", + "label": "Loss of Control (words fail first)", + "family": "Loss_of_Control", + "subfamily": "inarticulate", + "vector_17d": { + "valence": -0.1, + "arousal": 0.55, + "dominance": 0.25, + "warmth": 0.0, + "brightness": 0.4, + "tension": 0.8, + "clarity": 0.4, + "social": 0.35, + "nostalgia": 0.25, + "sacredness": 0.3, + "desire": 0.3, + "grief": 0.35, + "awe": 0.3, + "shame": 0.2, + "hope": 0.2, + "edge": 0.7, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "stammer", + "expression collapse" + ], + "source": "MERGED_17D.json" + }, + { + "id": "love_allowing", + "label": "Love (allowing)", + "family": "Love_non_erotic", + "subfamily": "spacious", + "vector_17d": { + "valence": 0.65, + "arousal": 0.15, + "dominance": 0.85, + "warmth": 0.7, + "brightness": 0.75, + "tension": 0.0, + "clarity": 1.0, + "social": 0.6, + "nostalgia": 0.25, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.0, + "awe": 0.9, + "shame": 0.0, + "hope": 0.95, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "be as you are" + ], + "source": "MERGED_17D.json" + }, + { + "id": "love_benevolent_regard", + "label": "Love (benevolent regard)", + "family": "Love_non_erotic", + "subfamily": "gentle", + "vector_17d": { + "valence": 0.65, + "arousal": 0.2, + "dominance": 0.75, + "warmth": 0.7, + "brightness": 0.75, + "tension": 0.05, + "clarity": 0.95, + "social": 0.7, + "nostalgia": 0.3, + "sacredness": 0.85, + "desire": 0.0, + "grief": 0.05, + "awe": 0.75, + "shame": 0.0, + "hope": 0.9, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "I want you to be well" + ], + "source": "MERGED_17D.json" + }, + { + "id": "love_endurance", + "label": "Love (endurance)", + "family": "Love_non_erotic", + "subfamily": "steady", + "vector_17d": { + "valence": 0.55, + "arousal": 0.25, + "dominance": 0.8, + "warmth": 0.6, + "brightness": 0.65, + "tension": 0.15, + "clarity": 0.95, + "social": 0.65, + "nostalgia": 0.45, + "sacredness": 0.9, + "desire": 0.0, + "grief": 0.15, + "awe": 0.8, + "shame": 0.0, + "hope": 0.9, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "still here after time" + ], + "source": "MERGED_17D.json" + }, + { + "id": "love_unconditional", + "label": "Love (unconditional)", + "family": "Love_non_erotic", + "subfamily": "absolute", + "vector_17d": { + "valence": 0.7, + "arousal": 0.15, + "dominance": 0.9, + "warmth": 0.75, + "brightness": 0.8, + "tension": 0.0, + "clarity": 1.0, + "social": 0.7, + "nostalgia": 0.3, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing withheld" + ], + "source": "MERGED_17D.json" + }, + { + "id": "love_without_need", + "label": "Love (without need)", + "family": "Love_non_erotic", + "subfamily": "free", + "vector_17d": { + "valence": 0.6, + "arousal": 0.15, + "dominance": 0.8, + "warmth": 0.65, + "brightness": 0.7, + "tension": 0.0, + "clarity": 1.0, + "social": 0.55, + "nostalgia": 0.2, + "sacredness": 0.9, + "desire": 0.0, + "grief": 0.0, + "awe": 0.85, + "shame": 0.0, + "hope": 0.95, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing required" + ], + "source": "MERGED_17D.json" + }, + { + "id": "meaning_earned_through_pain", + "label": "Meaning (earned through pain)", + "family": "Meaning", + "subfamily": "costly", + "vector_17d": { + "valence": 0.3, + "arousal": 0.35, + "dominance": 0.65, + "warmth": 0.3, + "brightness": 0.55, + "tension": 0.45, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.5, + "sacredness": 0.6, + "desire": 0.15, + "grief": 0.3, + "awe": 0.6, + "shame": 0.0, + "hope": 0.65, + "edge": 0.3, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "worth the cost" + ], + "source": "MERGED_17D.json" + }, + { + "id": "meaning_pattern_understood", + "label": "Meaning (pattern understood)", + "family": "Meaning", + "subfamily": "coherence", + "vector_17d": { + "valence": 0.45, + "arousal": 0.3, + "dominance": 0.6, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.25, + "clarity": 0.95, + "social": 0.4, + "nostalgia": 0.35, + "sacredness": 0.45, + "desire": 0.2, + "grief": 0.15, + "awe": 0.5, + "shame": 0.0, + "hope": 0.7, + "edge": 0.2, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "it makes sense now" + ], + "source": "MERGED_17D.json" + }, + { + "id": "meaning_shared", + "label": "Meaning (shared, not owned)", + "family": "Meaning", + "subfamily": "collective", + "vector_17d": { + "valence": 0.5, + "arousal": 0.35, + "dominance": 0.55, + "warmth": 0.5, + "brightness": 0.7, + "tension": 0.25, + "clarity": 0.9, + "social": 0.7, + "nostalgia": 0.4, + "sacredness": 0.55, + "desire": 0.2, + "grief": 0.15, + "awe": 0.55, + "shame": 0.0, + "hope": 0.8, + "edge": 0.2, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "we recognize this together" + ], + "source": "MERGED_17D.json" + }, + { + "id": "meaning_sufficient", + "label": "Meaning (sufficient, not total)", + "family": "Meaning", + "subfamily": "enough", + "vector_17d": { + "valence": 0.55, + "arousal": 0.2, + "dominance": 0.7, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.15, + "clarity": 0.95, + "social": 0.4, + "nostalgia": 0.3, + "sacredness": 0.65, + "desire": 0.1, + "grief": 0.1, + "awe": 0.6, + "shame": 0.0, + "hope": 0.85, + "edge": 0.1, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "this is enough" + ], + "source": "MERGED_17D.json" + }, + { + "id": "meaning_without_explanation", + "label": "Meaning (without explanation)", + "family": "Meaning", + "subfamily": "felt", + "vector_17d": { + "valence": 0.4, + "arousal": 0.25, + "dominance": 0.55, + "warmth": 0.35, + "brightness": 0.6, + "tension": 0.2, + "clarity": 0.85, + "social": 0.35, + "nostalgia": 0.3, + "sacredness": 0.55, + "desire": 0.15, + "grief": 0.1, + "awe": 0.55, + "shame": 0.0, + "hope": 0.65, + "edge": 0.15, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "knowing without words" + ], + "source": "MERGED_17D.json" + }, + { + "id": "play_childlike_energy", + "label": "Play (childlike energy, not childish)", + "family": "Play", + "subfamily": "pure", + "vector_17d": { + "valence": 0.65, + "arousal": 0.75, + "dominance": 0.55, + "warmth": 0.55, + "brightness": 0.85, + "tension": 0.35, + "clarity": 0.65, + "social": 0.65, + "nostalgia": 0.35, + "sacredness": 0.15, + "desire": 0.35, + "grief": 0.05, + "awe": 0.2, + "shame": 0.0, + "hope": 0.85, + "edge": 0.2, + "resolution_hunger": 0.6 + }, + "qualia_tags": [ + "bounce", + "laughter in motion" + ], + "source": "MERGED_17D.json" + }, + { + "id": "play_light_feet", + "label": "Play (light feet, quick turns)", + "family": "Play", + "subfamily": "nimble", + "vector_17d": { + "valence": 0.6, + "arousal": 0.65, + "dominance": 0.55, + "warmth": 0.45, + "brightness": 0.8, + "tension": 0.35, + "clarity": 0.65, + "social": 0.55, + "nostalgia": 0.15, + "sacredness": 0.1, + "desire": 0.3, + "grief": 0.05, + "awe": 0.2, + "shame": 0.0, + "hope": 0.7, + "edge": 0.25, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "movement joy", + "spark" + ], + "source": "MERGED_17D.json" + }, + { + "id": "play_private_delight", + "label": "Play (private delight, no audience)", + "family": "Play", + "subfamily": "intimate", + "vector_17d": { + "valence": 0.55, + "arousal": 0.35, + "dominance": 0.45, + "warmth": 0.5, + "brightness": 0.65, + "tension": 0.25, + "clarity": 0.7, + "social": 0.25, + "nostalgia": 0.2, + "sacredness": 0.1, + "desire": 0.3, + "grief": 0.05, + "awe": 0.15, + "shame": 0.0, + "hope": 0.6, + "edge": 0.15, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "inside joke", + "soft fun" + ], + "source": "MERGED_17D.json" + }, + { + "id": "play_rule_break_smile", + "label": "Play (rule-break with a smile)", + "family": "Play", + "subfamily": "subversive", + "vector_17d": { + "valence": 0.5, + "arousal": 0.7, + "dominance": 0.65, + "warmth": 0.35, + "brightness": 0.75, + "tension": 0.65, + "clarity": 0.8, + "social": 0.55, + "nostalgia": 0.1, + "sacredness": 0.05, + "desire": 0.4, + "grief": 0.05, + "awe": 0.1, + "shame": 0.0, + "hope": 0.65, + "edge": 0.55, + "resolution_hunger": 0.7 + }, + "qualia_tags": [ + "cheeky defiance", + "fun danger" + ], + "source": "MERGED_17D.json" + }, + { + "id": "play_teasing_wink", + "label": "Play (teasing wink)", + "family": "Play", + "subfamily": "tease", + "vector_17d": { + "valence": 0.55, + "arousal": 0.6, + "dominance": 0.6, + "warmth": 0.4, + "brightness": 0.7, + "tension": 0.55, + "clarity": 0.7, + "social": 0.6, + "nostalgia": 0.15, + "sacredness": 0.05, + "desire": 0.45, + "grief": 0.05, + "awe": 0.1, + "shame": 0.0, + "hope": 0.6, + "edge": 0.45, + "resolution_hunger": 0.65 + }, + "qualia_tags": [ + "knowing grin", + "almost-mischief" + ], + "source": "MERGED_17D.json" + }, + { + "id": "power_commanding_voice", + "label": "Power (commanding voice, fills room)", + "family": "Power", + "subfamily": "commanding", + "vector_17d": { + "valence": 0.3, + "arousal": 0.75, + "dominance": 0.98, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.65, + "clarity": 0.95, + "social": 0.85, + "nostalgia": 0.1, + "sacredness": 0.35, + "desire": 0.25, + "grief": 0.05, + "awe": 0.35, + "shame": 0.0, + "hope": 0.45, + "edge": 0.4, + "resolution_hunger": 0.7 + }, + "qualia_tags": [ + "authority", + "room listens" + ], + "source": "MERGED_17D.json" + }, + { + "id": "power_crowned_after_cost", + "label": "Power (crowned after cost)", + "family": "Power", + "subfamily": "earned", + "vector_17d": { + "valence": 0.35, + "arousal": 0.65, + "dominance": 0.95, + "warmth": 0.25, + "brightness": 0.6, + "tension": 0.7, + "clarity": 0.85, + "social": 0.75, + "nostalgia": 0.35, + "sacredness": 0.55, + "desire": 0.25, + "grief": 0.3, + "awe": 0.45, + "shame": 0.0, + "hope": 0.45, + "edge": 0.45, + "resolution_hunger": 0.6 + }, + "qualia_tags": [ + "weight of authority", + "earned voice" + ], + "source": "MERGED_17D.json" + }, + { + "id": "power_dangerous_calm", + "label": "Power (dangerous calm)", + "family": "Power", + "subfamily": "threatening", + "vector_17d": { + "valence": 0.1, + "arousal": 0.5, + "dominance": 0.95, + "warmth": -0.05, + "brightness": 0.4, + "tension": 0.9, + "clarity": 0.9, + "social": 0.4, + "nostalgia": 0.1, + "sacredness": 0.1, + "desire": 0.15, + "grief": 0.1, + "awe": 0.3, + "shame": 0.0, + "hope": 0.2, + "edge": 0.75, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "stillness before strike", + "quiet threat" + ], + "source": "MERGED_17D.json" + }, + { + "id": "power_rooted_presence", + "label": "Power (rooted presence, unmoved)", + "family": "Power", + "subfamily": "rooted", + "vector_17d": { + "valence": 0.2, + "arousal": 0.45, + "dominance": 0.95, + "warmth": 0.15, + "brightness": 0.5, + "tension": 0.5, + "clarity": 0.9, + "social": 0.55, + "nostalgia": 0.1, + "sacredness": 0.2, + "desire": 0.15, + "grief": 0.1, + "awe": 0.25, + "shame": 0.0, + "hope": 0.3, + "edge": 0.35, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "grounded authority", + "still center" + ], + "source": "MERGED_17D.json" + }, + { + "id": "power_unshowy_control", + "label": "Power (unshowy control)", + "family": "Power", + "subfamily": "quiet", + "vector_17d": { + "valence": 0.15, + "arousal": 0.3, + "dominance": 0.9, + "warmth": 0.05, + "brightness": 0.45, + "tension": 0.55, + "clarity": 0.85, + "social": 0.4, + "nostalgia": 0.15, + "sacredness": 0.15, + "desire": 0.1, + "grief": 0.15, + "awe": 0.2, + "shame": 0.0, + "hope": 0.25, + "edge": 0.35, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "nothing to prove", + "hands steady" + ], + "source": "MERGED_17D.json" + }, + { + "id": "presence_enough", + "label": "Presence (enough)", + "family": "Presence", + "subfamily": "complete", + "vector_17d": { + "valence": 0.6, + "arousal": 0.05, + "dominance": 0.85, + "warmth": 0.5, + "brightness": 0.6, + "tension": 0.0, + "clarity": 1.0, + "social": 0.35, + "nostalgia": 0.15, + "sacredness": 1.0, + "desire": 0.0, + "grief": 0.0, + "awe": 1.0, + "shame": 0.0, + "hope": 1.0, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing else required" + ], + "source": "MERGED_17D.json" + }, + { + "id": "presence_now", + "label": "Presence (now)", + "family": "Presence", + "subfamily": "immediate", + "vector_17d": { + "valence": 0.55, + "arousal": 0.1, + "dominance": 0.8, + "warmth": 0.45, + "brightness": 0.6, + "tension": 0.05, + "clarity": 1.0, + "social": 0.35, + "nostalgia": 0.2, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.05, + "awe": 0.9, + "shame": 0.0, + "hope": 0.85, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "here" + ], + "source": "MERGED_17D.json" + }, + { + "id": "presence_shared_space", + "label": "Presence (shared space)", + "family": "Presence", + "subfamily": "with", + "vector_17d": { + "valence": 0.55, + "arousal": 0.1, + "dominance": 0.7, + "warmth": 0.55, + "brightness": 0.6, + "tension": 0.05, + "clarity": 0.95, + "social": 0.65, + "nostalgia": 0.3, + "sacredness": 0.9, + "desire": 0.0, + "grief": 0.05, + "awe": 0.9, + "shame": 0.0, + "hope": 0.85, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "together without speech" + ], + "source": "MERGED_17D.json" + }, + { + "id": "presence_unbroken_attention", + "label": "Presence (unbroken attention)", + "family": "Presence", + "subfamily": "continuous", + "vector_17d": { + "valence": 0.5, + "arousal": 0.1, + "dominance": 0.8, + "warmth": 0.45, + "brightness": 0.55, + "tension": 0.05, + "clarity": 1.0, + "social": 0.3, + "nostalgia": 0.2, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.0, + "awe": 0.95, + "shame": 0.0, + "hope": 0.9, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing drifts" + ], + "source": "MERGED_17D.json" + }, + { + "id": "presence_without_self", + "label": "Presence (without self-reference)", + "family": "Presence", + "subfamily": "egoless", + "vector_17d": { + "valence": 0.5, + "arousal": 0.05, + "dominance": 0.75, + "warmth": 0.4, + "brightness": 0.55, + "tension": 0.05, + "clarity": 1.0, + "social": 0.25, + "nostalgia": 0.15, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.0, + "awe": 0.95, + "shame": 0.0, + "hope": 0.85, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "no observer" + ], + "source": "MERGED_17D.json" + }, + { + "id": "purpose_alignment", + "label": "Purpose (alignment felt)", + "family": "Purpose", + "subfamily": "aligned", + "vector_17d": { + "valence": 0.6, + "arousal": 0.3, + "dominance": 0.75, + "warmth": 0.5, + "brightness": 0.75, + "tension": 0.1, + "clarity": 1.0, + "social": 0.45, + "nostalgia": 0.25, + "sacredness": 0.75, + "desire": 0.1, + "grief": 0.05, + "awe": 0.7, + "shame": 0.0, + "hope": 0.95, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "everything points the same way" + ], + "source": "MERGED_17D.json" + }, + { + "id": "purpose_lived_not_declared", + "label": "Purpose (lived, not declared)", + "family": "Purpose", + "subfamily": "implicit", + "vector_17d": { + "valence": 0.55, + "arousal": 0.25, + "dominance": 0.7, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.15, + "clarity": 0.95, + "social": 0.4, + "nostalgia": 0.3, + "sacredness": 0.65, + "desire": 0.15, + "grief": 0.1, + "awe": 0.65, + "shame": 0.0, + "hope": 0.9, + "edge": 0.1, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "no manifesto needed" + ], + "source": "MERGED_17D.json" + }, + { + "id": "purpose_long_arc", + "label": "Purpose (long arc)", + "family": "Purpose", + "subfamily": "enduring", + "vector_17d": { + "valence": 0.5, + "arousal": 0.35, + "dominance": 0.7, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.3, + "clarity": 0.9, + "social": 0.45, + "nostalgia": 0.45, + "sacredness": 0.7, + "desire": 0.2, + "grief": 0.2, + "awe": 0.65, + "shame": 0.0, + "hope": 0.85, + "edge": 0.2, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "this continues" + ], + "source": "MERGED_17D.json" + }, + { + "id": "purpose_quiet_direction", + "label": "Purpose (quiet direction)", + "family": "Purpose", + "subfamily": "compass", + "vector_17d": { + "valence": 0.45, + "arousal": 0.3, + "dominance": 0.65, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.2, + "clarity": 0.9, + "social": 0.45, + "nostalgia": 0.3, + "sacredness": 0.55, + "desire": 0.25, + "grief": 0.15, + "awe": 0.55, + "shame": 0.0, + "hope": 0.8, + "edge": 0.2, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "I know where this goes" + ], + "source": "MERGED_17D.json" + }, + { + "id": "purpose_service", + "label": "Purpose (in service)", + "family": "Purpose", + "subfamily": "offered", + "vector_17d": { + "valence": 0.5, + "arousal": 0.25, + "dominance": 0.55, + "warmth": 0.5, + "brightness": 0.65, + "tension": 0.2, + "clarity": 0.95, + "social": 0.7, + "nostalgia": 0.35, + "sacredness": 0.65, + "desire": 0.2, + "grief": 0.1, + "awe": 0.6, + "shame": 0.0, + "hope": 0.85, + "edge": 0.15, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "for others" + ], + "source": "MERGED_17D.json" + }, + { + "id": "rebirth_first_breath", + "label": "Rebirth (first breath)", + "family": "Rebirth", + "subfamily": "emergence", + "vector_17d": { + "valence": 0.2, + "arousal": 0.25, + "dominance": 0.3, + "warmth": 0.2, + "brightness": 0.35, + "tension": 0.25, + "clarity": 0.5, + "social": 0.2, + "nostalgia": 0.0, + "sacredness": 0.55, + "desire": 0.15, + "grief": 0.1, + "awe": 0.65, + "shame": 0.0, + "hope": 0.4, + "edge": 0.15, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "breath enters", + "fragile life" + ], + "source": "MERGED_17D.json" + }, + { + "id": "rebirth_fragile_yes", + "label": "Rebirth (fragile yes)", + "family": "Rebirth", + "subfamily": "tentative", + "vector_17d": { + "valence": 0.4, + "arousal": 0.35, + "dominance": 0.35, + "warmth": 0.35, + "brightness": 0.55, + "tension": 0.35, + "clarity": 0.7, + "social": 0.35, + "nostalgia": 0.05, + "sacredness": 0.5, + "desire": 0.25, + "grief": 0.1, + "awe": 0.55, + "shame": 0.0, + "hope": 0.65, + "edge": 0.25, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "yes whispered" + ], + "source": "MERGED_17D.json" + }, + { + "id": "rebirth_light_returns", + "label": "Rebirth (light returns)", + "family": "Rebirth", + "subfamily": "illumination", + "vector_17d": { + "valence": 0.35, + "arousal": 0.35, + "dominance": 0.35, + "warmth": 0.3, + "brightness": 0.55, + "tension": 0.3, + "clarity": 0.65, + "social": 0.3, + "nostalgia": 0.1, + "sacredness": 0.5, + "desire": 0.25, + "grief": 0.1, + "awe": 0.6, + "shame": 0.0, + "hope": 0.55, + "edge": 0.2, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "seeing again", + "soft illumination" + ], + "source": "MERGED_17D.json" + }, + { + "id": "rebirth_new_life_stirs", + "label": "Rebirth (new life stirs)", + "family": "Rebirth", + "subfamily": "awakening", + "vector_17d": { + "valence": 0.5, + "arousal": 0.45, + "dominance": 0.45, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.4, + "clarity": 0.75, + "social": 0.4, + "nostalgia": 0.05, + "sacredness": 0.55, + "desire": 0.35, + "grief": 0.05, + "awe": 0.65, + "shame": 0.0, + "hope": 0.75, + "edge": 0.3, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "life energy returns" + ], + "source": "MERGED_17D.json" + }, + { + "id": "rebirth_without_past", + "label": "Rebirth (without the past)", + "family": "Rebirth", + "subfamily": "clean", + "vector_17d": { + "valence": 0.3, + "arousal": 0.3, + "dominance": 0.4, + "warmth": 0.25, + "brightness": 0.5, + "tension": 0.25, + "clarity": 0.8, + "social": 0.25, + "nostalgia": 0.0, + "sacredness": 0.45, + "desire": 0.2, + "grief": 0.05, + "awe": 0.55, + "shame": 0.0, + "hope": 0.6, + "edge": 0.2, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "no backstory" + ], + "source": "MERGED_17D.json" + }, + { + "id": "release_acceptance", + "label": "Release (acceptance settles)", + "family": "Release", + "subfamily": "settled", + "vector_17d": { + "valence": 0.45, + "arousal": 0.25, + "dominance": 0.5, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.2, + "clarity": 0.9, + "social": 0.4, + "nostalgia": 0.3, + "sacredness": 0.4, + "desire": 0.1, + "grief": 0.2, + "awe": 0.35, + "shame": 0.0, + "hope": 0.6, + "edge": 0.15, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "settled truth" + ], + "source": "MERGED_17D.json" + }, + { + "id": "release_breathing_again", + "label": "Release (breathing again)", + "family": "Release", + "subfamily": "physiological", + "vector_17d": { + "valence": 0.35, + "arousal": 0.2, + "dominance": 0.4, + "warmth": 0.3, + "brightness": 0.55, + "tension": 0.2, + "clarity": 0.8, + "social": 0.35, + "nostalgia": 0.25, + "sacredness": 0.3, + "desire": 0.1, + "grief": 0.2, + "awe": 0.3, + "shame": 0.0, + "hope": 0.5, + "edge": 0.15, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "lungs open", + "calm returns" + ], + "source": "MERGED_17D.json" + }, + { + "id": "release_energy_discharged", + "label": "Release (energy discharged)", + "family": "Release", + "subfamily": "physical", + "vector_17d": { + "valence": 0.4, + "arousal": 0.45, + "dominance": 0.45, + "warmth": 0.35, + "brightness": 0.6, + "tension": 0.25, + "clarity": 0.7, + "social": 0.45, + "nostalgia": 0.15, + "sacredness": 0.2, + "desire": 0.2, + "grief": 0.1, + "awe": 0.25, + "shame": 0.0, + "hope": 0.55, + "edge": 0.2, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "spent", + "empty but okay" + ], + "source": "MERGED_17D.json" + }, + { + "id": "release_laughter_break", + "label": "Release (laughter breaks tension)", + "family": "Release", + "subfamily": "joyful", + "vector_17d": { + "valence": 0.55, + "arousal": 0.55, + "dominance": 0.45, + "warmth": 0.5, + "brightness": 0.75, + "tension": 0.25, + "clarity": 0.7, + "social": 0.6, + "nostalgia": 0.2, + "sacredness": 0.15, + "desire": 0.25, + "grief": 0.1, + "awe": 0.2, + "shame": 0.0, + "hope": 0.7, + "edge": 0.2, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "relief through joy" + ], + "source": "MERGED_17D.json" + }, + { + "id": "release_tears_fall", + "label": "Release (tears finally fall)", + "family": "Release", + "subfamily": "emotional", + "vector_17d": { + "valence": 0.15, + "arousal": 0.35, + "dominance": 0.3, + "warmth": 0.25, + "brightness": 0.5, + "tension": 0.3, + "clarity": 0.65, + "social": 0.3, + "nostalgia": 0.45, + "sacredness": 0.35, + "desire": 0.1, + "grief": 0.45, + "awe": 0.3, + "shame": 0.05, + "hope": 0.35, + "edge": 0.25, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "crying", + "pressure leaves" + ], + "source": "MERGED_17D.json" + }, + { + "id": "repair_after_shatter", + "label": "Repair (after shatter, hands shaking)", + "family": "Repair", + "subfamily": "fragile", + "vector_17d": { + "valence": 0.05, + "arousal": 0.35, + "dominance": 0.4, + "warmth": 0.1, + "brightness": 0.45, + "tension": 0.8, + "clarity": 0.65, + "social": 0.35, + "nostalgia": 0.45, + "sacredness": 0.25, + "desire": 0.15, + "grief": 0.55, + "awe": 0.2, + "shame": 0.2, + "hope": 0.35, + "edge": 0.6, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "careful touch", + "fear of breaking again" + ], + "source": "MERGED_17D.json" + }, + { + "id": "repair_bandage_kindness", + "label": "Repair (bandage kindness)", + "family": "Repair", + "subfamily": "gentle", + "vector_17d": { + "valence": 0.25, + "arousal": 0.25, + "dominance": 0.45, + "warmth": 0.55, + "brightness": 0.6, + "tension": 0.45, + "clarity": 0.7, + "social": 0.55, + "nostalgia": 0.3, + "sacredness": 0.2, + "desire": 0.1, + "grief": 0.3, + "awe": 0.15, + "shame": 0.05, + "hope": 0.55, + "edge": 0.25, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "soft care", + "no pressure" + ], + "source": "MERGED_17D.json" + }, + { + "id": "repair_earned_trust", + "label": "Repair (earned trust, not assumed)", + "family": "Repair", + "subfamily": "earned", + "vector_17d": { + "valence": 0.2, + "arousal": 0.35, + "dominance": 0.55, + "warmth": 0.35, + "brightness": 0.55, + "tension": 0.65, + "clarity": 0.85, + "social": 0.45, + "nostalgia": 0.4, + "sacredness": 0.25, + "desire": 0.2, + "grief": 0.35, + "awe": 0.2, + "shame": 0.1, + "hope": 0.45, + "edge": 0.45, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "slow rebuilding", + "watchful warmth" + ], + "source": "MERGED_17D.json" + }, + { + "id": "repair_no_promises", + "label": "Repair (no promises, just presence)", + "family": "Repair", + "subfamily": "present", + "vector_17d": { + "valence": 0.1, + "arousal": 0.25, + "dominance": 0.5, + "warmth": 0.25, + "brightness": 0.45, + "tension": 0.55, + "clarity": 0.9, + "social": 0.35, + "nostalgia": 0.35, + "sacredness": 0.3, + "desire": 0.1, + "grief": 0.3, + "awe": 0.2, + "shame": 0.05, + "hope": 0.3, + "edge": 0.35, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "showing up", + "no future claims" + ], + "source": "MERGED_17D.json" + }, + { + "id": "repair_touch_returns", + "label": "Repair (touch returns cautiously)", + "family": "Repair", + "subfamily": "reopening", + "vector_17d": { + "valence": 0.25, + "arousal": 0.4, + "dominance": 0.45, + "warmth": 0.45, + "brightness": 0.6, + "tension": 0.7, + "clarity": 0.7, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.2, + "desire": 0.3, + "grief": 0.3, + "awe": 0.15, + "shame": 0.1, + "hope": 0.45, + "edge": 0.4, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "almost-touch", + "testing warmth" + ], + "source": "MERGED_17D.json" + }, + { + "id": "return_place_unchanged", + "label": "Return (place unchanged, you are)", + "family": "Return", + "subfamily": "contrast", + "vector_17d": { + "valence": 0.25, + "arousal": 0.3, + "dominance": 0.45, + "warmth": 0.3, + "brightness": 0.5, + "tension": 0.4, + "clarity": 0.8, + "social": 0.35, + "nostalgia": 0.6, + "sacredness": 0.35, + "desire": 0.2, + "grief": 0.25, + "awe": 0.3, + "shame": 0.0, + "hope": 0.5, + "edge": 0.3, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "same walls", + "different self" + ], + "source": "MERGED_17D.json" + }, + { + "id": "return_quiet_homecoming", + "label": "Return (quiet homecoming)", + "family": "Return", + "subfamily": "soft", + "vector_17d": { + "valence": 0.35, + "arousal": 0.25, + "dominance": 0.45, + "warmth": 0.4, + "brightness": 0.6, + "tension": 0.3, + "clarity": 0.8, + "social": 0.45, + "nostalgia": 0.55, + "sacredness": 0.4, + "desire": 0.2, + "grief": 0.2, + "awe": 0.35, + "shame": 0.0, + "hope": 0.6, + "edge": 0.2, + "resolution_hunger": 0.25 + }, + "qualia_tags": [ + "familiar ground", + "changed feet" + ], + "source": "MERGED_17D.json" + }, + { + "id": "return_seen_differently", + "label": "Return (being seen differently)", + "family": "Return", + "subfamily": "social", + "vector_17d": { + "valence": 0.3, + "arousal": 0.35, + "dominance": 0.5, + "warmth": 0.35, + "brightness": 0.55, + "tension": 0.45, + "clarity": 0.85, + "social": 0.7, + "nostalgia": 0.45, + "sacredness": 0.35, + "desire": 0.25, + "grief": 0.2, + "awe": 0.3, + "shame": 0.05, + "hope": 0.55, + "edge": 0.35, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "recognition shifted" + ], + "source": "MERGED_17D.json" + }, + { + "id": "return_weight_carried", + "label": "Return (weight still carried)", + "family": "Return", + "subfamily": "burdened", + "vector_17d": { + "valence": 0.2, + "arousal": 0.35, + "dominance": 0.45, + "warmth": 0.25, + "brightness": 0.45, + "tension": 0.5, + "clarity": 0.85, + "social": 0.35, + "nostalgia": 0.55, + "sacredness": 0.4, + "desire": 0.2, + "grief": 0.3, + "awe": 0.35, + "shame": 0.0, + "hope": 0.45, + "edge": 0.4, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "not healed, but here" + ], + "source": "MERGED_17D.json" + }, + { + "id": "return_without_story", + "label": "Return (without telling the story)", + "family": "Return", + "subfamily": "silent", + "vector_17d": { + "valence": 0.3, + "arousal": 0.2, + "dominance": 0.55, + "warmth": 0.35, + "brightness": 0.55, + "tension": 0.25, + "clarity": 0.9, + "social": 0.3, + "nostalgia": 0.5, + "sacredness": 0.45, + "desire": 0.15, + "grief": 0.2, + "awe": 0.4, + "shame": 0.0, + "hope": 0.6, + "edge": 0.2, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "no explanation needed" + ], + "source": "MERGED_17D.json" + }, + { + "id": "risk_all_in", + "label": "Risk (all in, no hedge)", + "family": "Risk", + "subfamily": "commitment", + "vector_17d": { + "valence": 0.2, + "arousal": 0.85, + "dominance": 0.75, + "warmth": 0.3, + "brightness": 0.65, + "tension": 0.95, + "clarity": 0.85, + "social": 0.55, + "nostalgia": 0.15, + "sacredness": 0.35, + "desire": 0.6, + "grief": 0.1, + "awe": 0.35, + "shame": 0.1, + "hope": 0.55, + "edge": 0.85, + "resolution_hunger": 0.75 + }, + "qualia_tags": [ + "no safety net", + "full leap" + ], + "source": "MERGED_17D.json" + }, + { + "id": "risk_blind_trust", + "label": "Risk (blind trust)", + "family": "Risk", + "subfamily": "faith", + "vector_17d": { + "valence": 0.25, + "arousal": 0.6, + "dominance": 0.5, + "warmth": 0.35, + "brightness": 0.6, + "tension": 0.75, + "clarity": 0.55, + "social": 0.45, + "nostalgia": 0.25, + "sacredness": 0.55, + "desire": 0.4, + "grief": 0.15, + "awe": 0.5, + "shame": 0.1, + "hope": 0.6, + "edge": 0.65, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "eyes closed", + "step taken" + ], + "source": "MERGED_17D.json" + }, + { + "id": "risk_edge_peek", + "label": "Risk (edge peek, testing depth)", + "family": "Risk", + "subfamily": "tentative", + "vector_17d": { + "valence": 0.1, + "arousal": 0.55, + "dominance": 0.45, + "warmth": 0.1, + "brightness": 0.5, + "tension": 0.8, + "clarity": 0.65, + "social": 0.25, + "nostalgia": 0.2, + "sacredness": 0.2, + "desire": 0.4, + "grief": 0.15, + "awe": 0.3, + "shame": 0.15, + "hope": 0.45, + "edge": 0.7, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "leaning forward", + "checking footing" + ], + "source": "MERGED_17D.json" + }, + { + "id": "risk_irreversible_step", + "label": "Risk (irreversible step)", + "family": "Risk", + "subfamily": "point_of_no_return", + "vector_17d": { + "valence": 0.0, + "arousal": 0.65, + "dominance": 0.6, + "warmth": 0.1, + "brightness": 0.5, + "tension": 0.9, + "clarity": 0.9, + "social": 0.4, + "nostalgia": 0.3, + "sacredness": 0.4, + "desire": 0.45, + "grief": 0.25, + "awe": 0.4, + "shame": 0.1, + "hope": 0.4, + "edge": 0.8, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "door closing", + "forward only" + ], + "source": "MERGED_17D.json" + }, + { + "id": "risk_seen", + "label": "Risk (seen taking it)", + "family": "Risk", + "subfamily": "exposed", + "vector_17d": { + "valence": 0.05, + "arousal": 0.7, + "dominance": 0.55, + "warmth": 0.15, + "brightness": 0.55, + "tension": 0.85, + "clarity": 0.7, + "social": 0.7, + "nostalgia": 0.2, + "sacredness": 0.25, + "desire": 0.45, + "grief": 0.2, + "awe": 0.3, + "shame": 0.25, + "hope": 0.45, + "edge": 0.75, + "resolution_hunger": 0.6 + }, + "qualia_tags": [ + "exposure", + "eyes on you" + ], + "source": "MERGED_17D.json" + }, + { + "id": "silence_after_last_note", + "label": "Silence (after the last note)", + "family": "Silence", + "subfamily": "after", + "vector_17d": { + "valence": 0.35, + "arousal": 0.05, + "dominance": 0.6, + "warmth": 0.3, + "brightness": 0.3, + "tension": 0.05, + "clarity": 1.0, + "social": 0.25, + "nostalgia": 0.5, + "sacredness": 0.9, + "desire": 0.0, + "grief": 0.2, + "awe": 0.85, + "shame": 0.0, + "hope": 0.65, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "sound has ended", + "something remains" + ], + "source": "MERGED_17D.json" + }, + { + "id": "silence_before_beginning", + "label": "Silence (before beginning)", + "family": "Silence", + "subfamily": "anticipatory", + "vector_17d": { + "valence": 0.3, + "arousal": 0.1, + "dominance": 0.55, + "warmth": 0.25, + "brightness": 0.35, + "tension": 0.15, + "clarity": 0.95, + "social": 0.2, + "nostalgia": 0.2, + "sacredness": 0.85, + "desire": 0.05, + "grief": 0.1, + "awe": 0.8, + "shame": 0.0, + "hope": 0.55, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing yet", + "ready" + ], + "source": "MERGED_17D.json" + }, + { + "id": "silence_full_room", + "label": "Silence (full room)", + "family": "Silence", + "subfamily": "inhabited", + "vector_17d": { + "valence": 0.4, + "arousal": 0.05, + "dominance": 0.65, + "warmth": 0.35, + "brightness": 0.4, + "tension": 0.05, + "clarity": 1.0, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.15, + "awe": 0.9, + "shame": 0.0, + "hope": 0.7, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing missing" + ], + "source": "MERGED_17D.json" + }, + { + "id": "silence_heard", + "label": "Silence (heard, not empty)", + "family": "Silence", + "subfamily": "perceived", + "vector_17d": { + "valence": 0.35, + "arousal": 0.1, + "dominance": 0.6, + "warmth": 0.3, + "brightness": 0.35, + "tension": 0.1, + "clarity": 0.95, + "social": 0.25, + "nostalgia": 0.3, + "sacredness": 0.9, + "desire": 0.0, + "grief": 0.15, + "awe": 0.85, + "shame": 0.0, + "hope": 0.65, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "listening without sound" + ], + "source": "MERGED_17D.json" + }, + { + "id": "silence_rest", + "label": "Silence (rest)", + "family": "Silence", + "subfamily": "restorative", + "vector_17d": { + "valence": 0.45, + "arousal": 0.0, + "dominance": 0.7, + "warmth": 0.4, + "brightness": 0.3, + "tension": 0.0, + "clarity": 1.0, + "social": 0.3, + "nostalgia": 0.25, + "sacredness": 0.95, + "desire": 0.0, + "grief": 0.05, + "awe": 0.9, + "shame": 0.0, + "hope": 0.8, + "edge": 0.0, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "nothing to do" + ], + "source": "MERGED_17D.json" + }, + { + "id": "stillness_after_truth", + "label": "Stillness (after truth is spoken)", + "family": "Stillness", + "subfamily": "afterword", + "vector_17d": { + "valence": 0.25, + "arousal": 0.2, + "dominance": 0.55, + "warmth": 0.1, + "brightness": 0.55, + "tension": 0.3, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.45, + "desire": 0.05, + "grief": 0.2, + "awe": 0.5, + "shame": 0.0, + "hope": 0.4, + "edge": 0.25, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "nothing left to add" + ], + "source": "MERGED_17D.json" + }, + { + "id": "stillness_edge_of_sleep", + "label": "Stillness (edge of sleep)", + "family": "Stillness", + "subfamily": "liminal", + "vector_17d": { + "valence": 0.2, + "arousal": 0.1, + "dominance": 0.35, + "warmth": 0.2, + "brightness": 0.5, + "tension": 0.25, + "clarity": 0.6, + "social": 0.2, + "nostalgia": 0.4, + "sacredness": 0.35, + "desire": 0.0, + "grief": 0.15, + "awe": 0.45, + "shame": 0.0, + "hope": 0.35, + "edge": 0.15, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "drifting", + "soft blur" + ], + "source": "MERGED_17D.json" + }, + { + "id": "stillness_safe_void", + "label": "Stillness (safe void)", + "family": "Stillness", + "subfamily": "rest", + "vector_17d": { + "valence": 0.3, + "arousal": 0.05, + "dominance": 0.45, + "warmth": 0.15, + "brightness": 0.45, + "tension": 0.2, + "clarity": 0.75, + "social": 0.4, + "nostalgia": 0.2, + "sacredness": 0.4, + "desire": 0.0, + "grief": 0.1, + "awe": 0.4, + "shame": 0.0, + "hope": 0.45, + "edge": 0.1, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "rest", + "permission to stop" + ], + "source": "MERGED_17D.json" + }, + { + "id": "stillness_time_stops", + "label": "Stillness (time stops briefly)", + "family": "Stillness", + "subfamily": "suspended", + "vector_17d": { + "valence": 0.1, + "arousal": 0.1, + "dominance": 0.35, + "warmth": 0.0, + "brightness": 0.55, + "tension": 0.45, + "clarity": 0.7, + "social": 0.25, + "nostalgia": 0.3, + "sacredness": 0.6, + "desire": 0.05, + "grief": 0.1, + "awe": 0.7, + "shame": 0.0, + "hope": 0.3, + "edge": 0.2, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "pause", + "held breath" + ], + "source": "MERGED_17D.json" + }, + { + "id": "stillness_witnessing", + "label": "Stillness (witnessing without comment)", + "family": "Stillness", + "subfamily": "observing", + "vector_17d": { + "valence": 0.15, + "arousal": 0.15, + "dominance": 0.45, + "warmth": 0.05, + "brightness": 0.5, + "tension": 0.35, + "clarity": 0.85, + "social": 0.35, + "nostalgia": 0.25, + "sacredness": 0.55, + "desire": 0.05, + "grief": 0.15, + "awe": 0.65, + "shame": 0.0, + "hope": 0.35, + "edge": 0.2, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "watching", + "non-interference" + ], + "source": "MERGED_17D.json" + }, + { + "id": "surrender_exhale_finally", + "label": "Surrender (exhale, finally)", + "family": "Surrender", + "subfamily": "release", + "vector_17d": { + "valence": 0.25, + "arousal": 0.2, + "dominance": 0.3, + "warmth": 0.25, + "brightness": 0.55, + "tension": 0.25, + "clarity": 0.8, + "social": 0.35, + "nostalgia": 0.35, + "sacredness": 0.3, + "desire": 0.1, + "grief": 0.25, + "awe": 0.3, + "shame": 0.0, + "hope": 0.45, + "edge": 0.2, + "resolution_hunger": 0.1 + }, + "qualia_tags": [ + "letting go", + "shoulders drop" + ], + "source": "MERGED_17D.json" + }, + { + "id": "surrender_into_unknown", + "label": "Surrender (into the unknown)", + "family": "Surrender", + "subfamily": "open", + "vector_17d": { + "valence": 0.2, + "arousal": 0.35, + "dominance": 0.3, + "warmth": 0.2, + "brightness": 0.55, + "tension": 0.55, + "clarity": 0.6, + "social": 0.25, + "nostalgia": 0.2, + "sacredness": 0.45, + "desire": 0.15, + "grief": 0.2, + "awe": 0.45, + "shame": 0.05, + "hope": 0.45, + "edge": 0.45, + "resolution_hunger": 0.15 + }, + "qualia_tags": [ + "open hands", + "no map" + ], + "source": "MERGED_17D.json" + }, + { + "id": "surrender_no_more_fight", + "label": "Surrender (no more fight)", + "family": "Surrender", + "subfamily": "cessation", + "vector_17d": { + "valence": 0.15, + "arousal": 0.25, + "dominance": 0.25, + "warmth": 0.15, + "brightness": 0.45, + "tension": 0.35, + "clarity": 0.85, + "social": 0.3, + "nostalgia": 0.4, + "sacredness": 0.35, + "desire": 0.05, + "grief": 0.3, + "awe": 0.25, + "shame": 0.05, + "hope": 0.3, + "edge": 0.25, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "ending resistance", + "quiet acceptance" + ], + "source": "MERGED_17D.json" + }, + { + "id": "surrender_soft_collapse", + "label": "Surrender (soft collapse, safe)", + "family": "Surrender", + "subfamily": "safe", + "vector_17d": { + "valence": 0.3, + "arousal": 0.15, + "dominance": 0.25, + "warmth": 0.35, + "brightness": 0.5, + "tension": 0.2, + "clarity": 0.7, + "social": 0.4, + "nostalgia": 0.3, + "sacredness": 0.35, + "desire": 0.05, + "grief": 0.2, + "awe": 0.35, + "shame": 0.0, + "hope": 0.5, + "edge": 0.15, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "being held", + "rest" + ], + "source": "MERGED_17D.json" + }, + { + "id": "surrender_truth_without_defense", + "label": "Surrender (truth without defense)", + "family": "Surrender", + "subfamily": "exposed", + "vector_17d": { + "valence": 0.1, + "arousal": 0.4, + "dominance": 0.35, + "warmth": 0.1, + "brightness": 0.45, + "tension": 0.75, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.4, + "desire": 0.15, + "grief": 0.25, + "awe": 0.4, + "shame": 0.1, + "hope": 0.35, + "edge": 0.55, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "unguarded truth" + ], + "source": "MERGED_17D.json" + }, + { + "id": "transformation_burning_bridge", + "label": "Transformation (burning the bridge)", + "family": "Transformation", + "subfamily": "severing", + "vector_17d": { + "valence": -0.05, + "arousal": 0.8, + "dominance": 0.65, + "warmth": 0.2, + "brightness": 0.45, + "tension": 0.9, + "clarity": 0.8, + "social": 0.45, + "nostalgia": 0.15, + "sacredness": 0.35, + "desire": 0.45, + "grief": 0.2, + "awe": 0.35, + "shame": 0.05, + "hope": 0.45, + "edge": 0.85, + "resolution_hunger": 0.55 + }, + "qualia_tags": [ + "no return path", + "heat" + ], + "source": "MERGED_17D.json" + }, + { + "id": "transformation_identity_blur", + "label": "Transformation (identity blur)", + "family": "Transformation", + "subfamily": "liminal", + "vector_17d": { + "valence": 0.05, + "arousal": 0.4, + "dominance": 0.35, + "warmth": 0.1, + "brightness": 0.55, + "tension": 0.65, + "clarity": 0.5, + "social": 0.25, + "nostalgia": 0.4, + "sacredness": 0.45, + "desire": 0.3, + "grief": 0.3, + "awe": 0.45, + "shame": 0.1, + "hope": 0.35, + "edge": 0.55, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "who am I now?", + "between selves" + ], + "source": "MERGED_17D.json" + }, + { + "id": "transformation_internal_rewrite", + "label": "Transformation (internal rewrite)", + "family": "Transformation", + "subfamily": "cognitive", + "vector_17d": { + "valence": 0.2, + "arousal": 0.45, + "dominance": 0.55, + "warmth": 0.2, + "brightness": 0.6, + "tension": 0.7, + "clarity": 0.9, + "social": 0.4, + "nostalgia": 0.35, + "sacredness": 0.45, + "desire": 0.3, + "grief": 0.25, + "awe": 0.4, + "shame": 0.0, + "hope": 0.55, + "edge": 0.5, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "new frame clicks in" + ], + "source": "MERGED_17D.json" + }, + { + "id": "transformation_point_of_no_return", + "label": "Transformation (point of no return)", + "family": "Transformation", + "subfamily": "irreversible", + "vector_17d": { + "valence": 0.05, + "arousal": 0.7, + "dominance": 0.5, + "warmth": 0.1, + "brightness": 0.5, + "tension": 0.95, + "clarity": 0.85, + "social": 0.35, + "nostalgia": 0.3, + "sacredness": 0.5, + "desire": 0.4, + "grief": 0.3, + "awe": 0.55, + "shame": 0.05, + "hope": 0.4, + "edge": 0.85, + "resolution_hunger": 0.3 + }, + "qualia_tags": [ + "crossing a line", + "no undo" + ], + "source": "MERGED_17D.json" + }, + { + "id": "transformation_skin_shedding", + "label": "Transformation (skin shedding)", + "family": "Transformation", + "subfamily": "molting", + "vector_17d": { + "valence": 0.1, + "arousal": 0.6, + "dominance": 0.45, + "warmth": 0.15, + "brightness": 0.55, + "tension": 0.85, + "clarity": 0.65, + "social": 0.3, + "nostalgia": 0.25, + "sacredness": 0.4, + "desire": 0.35, + "grief": 0.35, + "awe": 0.45, + "shame": 0.1, + "hope": 0.45, + "edge": 0.7, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "old identity loosening", + "raw exposure" + ], + "source": "MERGED_17D.json" + }, + { + "id": "trust_after_test", + "label": "Trust (after being tested)", + "family": "Trust", + "subfamily": "earned", + "vector_17d": { + "valence": 0.45, + "arousal": 0.35, + "dominance": 0.55, + "warmth": 0.4, + "brightness": 0.65, + "tension": 0.45, + "clarity": 0.9, + "social": 0.5, + "nostalgia": 0.35, + "sacredness": 0.4, + "desire": 0.25, + "grief": 0.2, + "awe": 0.35, + "shame": 0.0, + "hope": 0.65, + "edge": 0.3, + "resolution_hunger": 0.4 + }, + "qualia_tags": [ + "confidence returns" + ], + "source": "MERGED_17D.json" + }, + { + "id": "trust_letting_be_held", + "label": "Trust (letting yourself be held)", + "family": "Trust", + "subfamily": "supported", + "vector_17d": { + "valence": 0.4, + "arousal": 0.25, + "dominance": 0.4, + "warmth": 0.45, + "brightness": 0.6, + "tension": 0.3, + "clarity": 0.75, + "social": 0.55, + "nostalgia": 0.3, + "sacredness": 0.35, + "desire": 0.15, + "grief": 0.15, + "awe": 0.3, + "shame": 0.0, + "hope": 0.65, + "edge": 0.2, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "support felt", + "relief" + ], + "source": "MERGED_17D.json" + }, + { + "id": "trust_resting_in_flow", + "label": "Trust (resting in flow)", + "family": "Trust", + "subfamily": "flow", + "vector_17d": { + "valence": 0.55, + "arousal": 0.3, + "dominance": 0.45, + "warmth": 0.45, + "brightness": 0.7, + "tension": 0.25, + "clarity": 0.75, + "social": 0.45, + "nostalgia": 0.2, + "sacredness": 0.4, + "desire": 0.15, + "grief": 0.1, + "awe": 0.45, + "shame": 0.0, + "hope": 0.75, + "edge": 0.15, + "resolution_hunger": 0.2 + }, + "qualia_tags": [ + "things carrying you" + ], + "source": "MERGED_17D.json" + }, + { + "id": "trust_shared_weight", + "label": "Trust (shared weight)", + "family": "Trust", + "subfamily": "mutual", + "vector_17d": { + "valence": 0.5, + "arousal": 0.4, + "dominance": 0.5, + "warmth": 0.5, + "brightness": 0.65, + "tension": 0.4, + "clarity": 0.8, + "social": 0.7, + "nostalgia": 0.25, + "sacredness": 0.35, + "desire": 0.25, + "grief": 0.15, + "awe": 0.3, + "shame": 0.0, + "hope": 0.7, + "edge": 0.25, + "resolution_hunger": 0.45 + }, + "qualia_tags": [ + "we can carry this" + ], + "source": "MERGED_17D.json" + }, + { + "id": "trust_without_proof", + "label": "Trust (without proof)", + "family": "Trust", + "subfamily": "faith", + "vector_17d": { + "valence": 0.3, + "arousal": 0.45, + "dominance": 0.45, + "warmth": 0.3, + "brightness": 0.55, + "tension": 0.6, + "clarity": 0.55, + "social": 0.35, + "nostalgia": 0.2, + "sacredness": 0.5, + "desire": 0.25, + "grief": 0.15, + "awe": 0.45, + "shame": 0.05, + "hope": 0.6, + "edge": 0.55, + "resolution_hunger": 0.35 + }, + "qualia_tags": [ + "leaning in", + "no guarantees" + ], + "source": "MERGED_17D.json" + }, + { + "id": "witness_end", + "label": "Witness (at the end)", + "family": "Witness", + "subfamily": "final", + "vector_17d": { + "valence": 0.45, + "arousal": 0.15, + "dominance": 0.7, + "warmth": 0.4, + "brightness": 0.55, + "tension": 0.1, + "clarity": 1.0, + "social": 0.25, + "nostalgia": 0.45, + "sacredness": 0.9, + "desire": 0.0, + "grief": 0.2, + "awe": 0.85, + "shame": 0.0, + "hope": 0.7, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "I was here" + ], + "source": "MERGED_17D.json" + }, + { + "id": "witness_joy", + "label": "Witness (joy without claiming)", + "family": "Witness", + "subfamily": "celebratory", + "vector_17d": { + "valence": 0.6, + "arousal": 0.35, + "dominance": 0.65, + "warmth": 0.55, + "brightness": 0.75, + "tension": 0.2, + "clarity": 0.95, + "social": 0.55, + "nostalgia": 0.3, + "sacredness": 0.75, + "desire": 0.0, + "grief": 0.05, + "awe": 0.8, + "shame": 0.0, + "hope": 0.9, + "edge": 0.1, + "resolution_hunger": 0.05 + }, + "qualia_tags": [ + "I see your joy" + ], + "source": "MERGED_17D.json" + }, + { + "id": "witness_present", + "label": "Witness (present, not intervening)", + "family": "Witness", + "subfamily": "pure", + "vector_17d": { + "valence": 0.4, + "arousal": 0.2, + "dominance": 0.6, + "warmth": 0.35, + "brightness": 0.55, + "tension": 0.15, + "clarity": 1.0, + "social": 0.3, + "nostalgia": 0.25, + "sacredness": 0.8, + "desire": 0.0, + "grief": 0.15, + "awe": 0.85, + "shame": 0.0, + "hope": 0.75, + "edge": 0.05, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "I see this" + ], + "source": "MERGED_17D.json" + }, + { + "id": "witness_suffering", + "label": "Witness (suffering without fixing)", + "family": "Witness", + "subfamily": "compassionate", + "vector_17d": { + "valence": 0.1, + "arousal": 0.3, + "dominance": 0.55, + "warmth": 0.4, + "brightness": 0.4, + "tension": 0.35, + "clarity": 0.95, + "social": 0.45, + "nostalgia": 0.35, + "sacredness": 0.85, + "desire": 0.0, + "grief": 0.4, + "awe": 0.75, + "shame": 0.0, + "hope": 0.55, + "edge": 0.2, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "with you" + ], + "source": "MERGED_17D.json" + }, + { + "id": "witness_truth_uncomfortable", + "label": "Witness (uncomfortable truth)", + "family": "Witness", + "subfamily": "honest", + "vector_17d": { + "valence": 0.2, + "arousal": 0.4, + "dominance": 0.65, + "warmth": 0.25, + "brightness": 0.45, + "tension": 0.55, + "clarity": 1.0, + "social": 0.35, + "nostalgia": 0.3, + "sacredness": 0.85, + "desire": 0.0, + "grief": 0.25, + "awe": 0.75, + "shame": 0.0, + "hope": 0.6, + "edge": 0.4, + "resolution_hunger": 0.0 + }, + "qualia_tags": [ + "seeing clearly" + ], + "source": "MERGED_17D.json" + } + ] +} \ No newline at end of file diff --git a/scripts/gen_qualia_profile.py b/scripts/gen_qualia_profile.py new file mode 100644 index 000000000..8e1c4aefc --- /dev/null +++ b/scripts/gen_qualia_profile.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +"""Generate `crates/lance-graph-contract/src/qualia_profile_table.rs` from +`data/qualia/calibrated_219.json`. + +Deterministic: entries are emitted sorted by `id`; palette index = position + 1 +(index 0 is reserved for UNNAMED). The PCS vector is stored as `[i8; 17]` in +hundredths — the calibration set is specified to 0.05 granularity, so the +round trip is exact. Two fingerprints are emitted so the generated table can +be checked against its source without a JSON parser in the zero-dep crate: + + PROFILE_ID — sha256 of the source JSON bytes (ICC "profile ID" field) + TABLE_FNV — FNV-1a 64 over the emitted (id, pcs) bytes, re-computable in Rust + +Run from the repo root: python3 scripts/gen_qualia_profile.py +""" +import hashlib +import json +import pathlib +import sys + +ROOT = pathlib.Path(__file__).resolve().parent.parent +SRC = ROOT / "data" / "qualia" / "calibrated_219.json" +DST = ROOT / "crates" / "lance-graph-contract" / "src" / "qualia_profile_table.rs" + +PCS_AXES = [ + "valence", "arousal", "dominance", "warmth", "brightness", "tension", + "clarity", "social", "nostalgia", "sacredness", "desire", "grief", "awe", + "shame", "hope", "edge", "resolution_hunger", +] + + +def rs(s: str) -> str: + """Quote a Python string as a Rust string literal (UTF-8 kept verbatim).""" + return '"' + s.replace("\\", "\\\\").replace('"', '\\"') + '"' + + +def fnv1a64(data: bytes) -> int: + h = 0xCBF29CE484222325 + for b in data: + h ^= b + h = (h * 0x100000001B3) & 0xFFFFFFFFFFFFFFFF + return h + + +def main() -> int: + raw = SRC.read_bytes() + doc = json.loads(raw) + if doc["axes_17d"] != PCS_AXES: + print("axis order in JSON does not match PCS_AXES", file=sys.stderr) + return 1 + entries = sorted(doc["entries"], key=lambda e: e["id"]) + ids = [e["id"] for e in entries] + if len(set(ids)) != len(ids): + print("duplicate ids", file=sys.stderr) + return 1 + if len(entries) > 219: + print("more than 219 entries: palette slots 220..255 are reserved", file=sys.stderr) + return 1 + + profile_id = hashlib.sha256(raw).hexdigest() + fnv_bytes = bytearray() + rows = [] + for pos, e in enumerate(entries): + pcs = [] + for ax in PCS_AXES: + v = e["vector_17d"][ax] + q = round(v * 100) + if abs(v * 100 - q) > 1e-6 or not -128 <= q <= 127: + print(f"{e['id']}: {ax}={v} is not representable in i8 hundredths", file=sys.stderr) + return 1 + pcs.append(q) + fnv_bytes += e["id"].encode() + fnv_bytes += bytes((q & 0xFF) for q in pcs) + tags = ", ".join(rs(t) for t in e.get("qualia_tags", [])) + rows.append( + " NamedQualia {\n" + f" idx: {pos + 1},\n" + f" id: {rs(e['id'])},\n" + f" label: {rs(e['label'])},\n" + f" family: {rs(e['family'])},\n" + f" subfamily: {rs(e.get('subfamily', ''))},\n" + f" pcs: [{', '.join(str(q) for q in pcs)}],\n" + f" tags: &[{tags}],\n" + " }," + ) + table_fnv = fnv1a64(bytes(fnv_bytes)) + + out = [ + "// GENERATED by scripts/gen_qualia_profile.py from data/qualia/calibrated_219.json", + "// Do not hand-edit. Re-run the script; `qualia_profile::tests::table_fnv_matches_source`", + "// fails if this file and the source disagree.", + "", + "use super::qualia_profile::NamedQualia;", + "", + f"/// sha256 of `data/qualia/calibrated_219.json` (the ICC profile-ID field).", + f'pub const PROFILE_ID: &str = "{profile_id}";', + "", + "/// FNV-1a 64 over `id` bytes ++ `pcs` bytes of every row, in table order.", + f"pub const TABLE_FNV: u64 = 0x{table_fnv:016X};", + "", + f"/// Number of named qualia. Palette index 0 = UNNAMED; 1..={len(entries)} = this table;", + f"/// {len(entries) + 1}..=255 reserved (RESERVE-DON'T-RECLAIM).", + f"pub const NAMED_COUNT: usize = {len(entries)};", + "", + f"pub static NAMED: [NamedQualia; {len(entries)}] = [", + *rows, + "];", + "", + ] + DST.write_text("\n".join(out), encoding="utf-8") + # keep the committed file rustfmt-stable so `cargo fmt --check` and this script agree + import shutil + import subprocess + if shutil.which("rustfmt"): + subprocess.run(["rustfmt", "--edition", "2021", str(DST)], check=True) + print(f"wrote {DST.relative_to(ROOT)}: {len(entries)} rows, PROFILE_ID={profile_id[:12]}…, TABLE_FNV=0x{table_fnv:016X}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 56b2ad98070fffeaed77000fc1a3b0d01cdba7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=BCbener?= Date: Fri, 16 Oct 2026 01:48:47 +0200 Subject: [PATCH 2/3] qualia_profile: pin the calibration source from both sides (codex P2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The single TABLE_FNV check re-computed a fingerprint from the generated table against a constant in the same generated file, so a JSON edit without regeneration stayed invisible. The generator now also emits SOURCE_FNV over the raw JSON bytes; the test reads the file with include_str! and re-computes it, and checks the declared count against NAMED_COUNT. Mutation-verified: edit the JSON without regenerating → red; hand-edit the table → red. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01HJmVZ8oUCaqgZ1efdeqCif --- .../src/qualia_profile.rs | 43 ++++++++++++++++--- .../src/qualia_profile_table.rs | 6 +++ scripts/gen_qualia_profile.py | 11 ++++- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/crates/lance-graph-contract/src/qualia_profile.rs b/crates/lance-graph-contract/src/qualia_profile.rs index 562871fa3..fb7fd5eb0 100644 --- a/crates/lance-graph-contract/src/qualia_profile.rs +++ b/crates/lance-graph-contract/src/qualia_profile.rs @@ -53,14 +53,18 @@ //! # Determinism //! //! Palette indices are a pure function of the sorted `id` strings; PCS values -//! are exact in hundredths; [`TABLE_FNV`] re-computes from the Rust table and -//! [`PROFILE_ID`] is the sha256 of the source JSON. Two sessions building from -//! the same calibration file produce byte-identical tables, and a drifted -//! table fails [`tests::table_fnv_matches_source`]. +//! are exact in hundredths. Two fingerprints pin the pair (source, table) from +//! both sides: [`TABLE_FNV`] is re-computed from the Rust table (a hand-edited +//! row fails) and [`SOURCE_FNV`] is re-computed from the JSON itself, read with +//! `include_str!` (a source edited without re-running the generator fails). +//! [`PROFILE_ID`] is the sha256 of the same source bytes, kept as the ICC +//! profile-ID field for consumers that want to cite it; the in-crate check is +//! `SOURCE_FNV`. Two sessions building from the same calibration file produce +//! byte-identical tables. use crate::qualia::{QualiaVector, QUALIA_DIMS}; -pub use crate::qualia_profile_table::{NAMED, NAMED_COUNT, PROFILE_ID, TABLE_FNV}; +pub use crate::qualia_profile_table::{NAMED, NAMED_COUNT, PROFILE_ID, SOURCE_FNV, TABLE_FNV}; // ═══════════════════════════════════════════════════════════════════════════ // PCS axes @@ -430,8 +434,12 @@ mod tests { h } + /// The calibration source, read at compile time so the test sees the file + /// as committed — not a copy the generator made. + const SOURCE_JSON: &str = include_str!("../../../data/qualia/calibrated_219.json"); + #[test] - fn table_fnv_matches_source() { + fn table_matches_the_rust_table_it_was_generated_into() { // Re-computes the generator's fingerprint from the Rust table. A single // hand-edited hundredth, or a reordered row, changes this value. let h = fnv1a64( @@ -441,8 +449,29 @@ mod tests { ); assert_eq!( h, TABLE_FNV, - "qualia_profile_table.rs drifted from data/qualia/calibrated_219.json" + "qualia_profile_table.rs was edited by hand; re-run scripts/gen_qualia_profile.py" + ); + } + + #[test] + fn table_is_not_stale_against_the_json_source() { + // Re-computes the generator's fingerprint of the SOURCE bytes from the + // file itself. Editing calibrated_219.json without re-running the + // generator changes this value while TABLE_FNV stays put — the drift the + // previous test cannot see. + let h = fnv1a64(SOURCE_JSON.bytes()); + assert_eq!( + h, SOURCE_FNV, + "data/qualia/calibrated_219.json changed; re-run scripts/gen_qualia_profile.py" ); + // And the row count the source declares is the row count the table has. + let declared = SOURCE_JSON + .split("\"count\":") + .nth(1) + .and_then(|s| s.trim_start().split(',').next()) + .and_then(|n| n.trim().parse::().ok()) + .expect("source JSON declares a count"); + assert_eq!(declared, NAMED_COUNT); } #[test] diff --git a/crates/lance-graph-contract/src/qualia_profile_table.rs b/crates/lance-graph-contract/src/qualia_profile_table.rs index e06d05612..632c6d2e1 100644 --- a/crates/lance-graph-contract/src/qualia_profile_table.rs +++ b/crates/lance-graph-contract/src/qualia_profile_table.rs @@ -8,8 +8,14 @@ use super::qualia_profile::NamedQualia; pub const PROFILE_ID: &str = "505df9acb847a0ea41155838c6754f12c5b6f102a66d0a5c31fc89c74c50fb69"; /// FNV-1a 64 over `id` bytes ++ `pcs` bytes of every row, in table order. +/// Re-computed from `NAMED` by the tests: catches a hand-edited table. pub const TABLE_FNV: u64 = 0xC0FDE8721BB8D4AC; +/// FNV-1a 64 over the raw bytes of `data/qualia/calibrated_219.json` as the +/// generator read them. Re-computed from the file by the tests: catches a +/// source edited without re-running the generator (a stale table). +pub const SOURCE_FNV: u64 = 0x818894A34F955F9C; + /// Number of named qualia. Palette index 0 = UNNAMED; 1..=219 = this table; /// 220..=255 reserved (RESERVE-DON'T-RECLAIM). pub const NAMED_COUNT: usize = 219; diff --git a/scripts/gen_qualia_profile.py b/scripts/gen_qualia_profile.py index 8e1c4aefc..cc8b2f515 100644 --- a/scripts/gen_qualia_profile.py +++ b/scripts/gen_qualia_profile.py @@ -10,6 +10,8 @@ PROFILE_ID — sha256 of the source JSON bytes (ICC "profile ID" field) TABLE_FNV — FNV-1a 64 over the emitted (id, pcs) bytes, re-computable in Rust + SOURCE_FNV — FNV-1a 64 over the source JSON bytes, re-computable in Rust via + include_str!; a JSON edit without regeneration fails the test Run from the repo root: python3 scripts/gen_qualia_profile.py """ @@ -84,6 +86,7 @@ def main() -> int: " }," ) table_fnv = fnv1a64(bytes(fnv_bytes)) + source_fnv = fnv1a64(raw) out = [ "// GENERATED by scripts/gen_qualia_profile.py from data/qualia/calibrated_219.json", @@ -96,8 +99,14 @@ def main() -> int: f'pub const PROFILE_ID: &str = "{profile_id}";', "", "/// FNV-1a 64 over `id` bytes ++ `pcs` bytes of every row, in table order.", + "/// Re-computed from `NAMED` by the tests: catches a hand-edited table.", f"pub const TABLE_FNV: u64 = 0x{table_fnv:016X};", "", + "/// FNV-1a 64 over the raw bytes of `data/qualia/calibrated_219.json` as the", + "/// generator read them. Re-computed from the file by the tests: catches a", + "/// source edited without re-running the generator (a stale table).", + f"pub const SOURCE_FNV: u64 = 0x{source_fnv:016X};", + "", f"/// Number of named qualia. Palette index 0 = UNNAMED; 1..={len(entries)} = this table;", f"/// {len(entries) + 1}..=255 reserved (RESERVE-DON'T-RECLAIM).", f"pub const NAMED_COUNT: usize = {len(entries)};", @@ -113,7 +122,7 @@ def main() -> int: import subprocess if shutil.which("rustfmt"): subprocess.run(["rustfmt", "--edition", "2021", str(DST)], check=True) - print(f"wrote {DST.relative_to(ROOT)}: {len(entries)} rows, PROFILE_ID={profile_id[:12]}…, TABLE_FNV=0x{table_fnv:016X}") + print(f"wrote {DST.relative_to(ROOT)}: {len(entries)} rows, PROFILE_ID={profile_id[:12]}…, TABLE_FNV=0x{table_fnv:016X}, SOURCE_FNV=0x{source_fnv:016X}") return 0 From d45f1dfad64029d749f18fca0ecdf33e2e536793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=BCbener?= Date: Fri, 16 Oct 2026 01:49:13 +0200 Subject: [PATCH 3/3] board: LATEST_STATE inventory line follows the SOURCE_FNV re-export and 12 tests Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01HJmVZ8oUCaqgZ1efdeqCif --- .claude/board/LATEST_STATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/board/LATEST_STATE.md b/.claude/board/LATEST_STATE.md index b47527cd0..d447b66d5 100644 --- a/.claude/board/LATEST_STATE.md +++ b/.claude/board/LATEST_STATE.md @@ -5,7 +5,7 @@ ### Current Contract Inventory — net delta (`qualia_profile.rs`, `qualia_profile_table.rs`) -- `lance_graph_contract::qualia_profile::{PCS_AXES, PCS_DIMS, Pcs, NamedQualia, UNNAMED, RESERVED_FROM, named, index_of, pcs_l1, nearest_named, nearest_named_in, Gamut, RenderingIntent, Rendered, render, Mix, SHARED_AXES, device_to_pcs_shared}` and re-exports `{NAMED, NAMED_COUNT, PROFILE_ID, TABLE_FNV}` — an ICC-style profile for felt states. Three spaces kept apart: **device** (`qualia::AXIS_LABELS`, convergence observables), **PCS** (`PCS_AXES`, 17 phenomenological axes, 219 calibrated patches in hundredths as `[i8; 17]`), **observer** (e.g. the six Ekman archetypes). `nearest_named` is B2A on the PCS side and its residual is the K channel — the `classification_distance` the i4 cutover stopped storing, measured against the inner vocabulary. `Gamut` is a 256-bit mask per rendering device; three intents adapted to a discrete palette (absolute / relative-in-family / perceptual); `Mix` = up to three inks (what `ada:qualia:active` carries). Only the five same-named axes (valence, arousal, tension, warmth, clarity) have a device→PCS mapping, and that is a CONJECTURE until the chart probe runs. 11 tests, each with a stated falsifier (FNV mutation verified red; intent inertness; anti-vacuity on gamut and nearest). +- `lance_graph_contract::qualia_profile::{PCS_AXES, PCS_DIMS, Pcs, NamedQualia, UNNAMED, RESERVED_FROM, named, index_of, pcs_l1, nearest_named, nearest_named_in, Gamut, RenderingIntent, Rendered, render, Mix, SHARED_AXES, device_to_pcs_shared}` and re-exports `{NAMED, NAMED_COUNT, PROFILE_ID, SOURCE_FNV, TABLE_FNV}` — an ICC-style profile for felt states. Three spaces kept apart: **device** (`qualia::AXIS_LABELS`, convergence observables), **PCS** (`PCS_AXES`, 17 phenomenological axes, 219 calibrated patches in hundredths as `[i8; 17]`), **observer** (e.g. the six Ekman archetypes). `nearest_named` is B2A on the PCS side and its residual is the K channel — the `classification_distance` the i4 cutover stopped storing, measured against the inner vocabulary. `Gamut` is a 256-bit mask per rendering device; three intents adapted to a discrete palette (absolute / relative-in-family / perceptual); `Mix` = up to three inks (what `ada:qualia:active` carries). Only the five same-named axes (valence, arousal, tension, warmth, clarity) have a device→PCS mapping, and that is a CONJECTURE until the chart probe runs. 12 tests, each with a stated falsifier (`TABLE_FNV` and `SOURCE_FNV` mutations both verified red — the pair (source, table) is pinned from both sides, after codex P2 on the first push; intent inertness; anti-vacuity on gamut and nearest). ## 2026-10-15 — main after #1567 (merged `b1f1365d`); D-HOLO H6c/H14 and the writer's version clock on main