# Character grouping diagnostic v8 Primary snapshot: `v8_2_clause_guard_dominance` (`data/odour_character_labels_v8_2_clause_guard_dominance.jsonl`). ## Verdict **Character verdict: discriminative-weak.** Under the corrected 26-class unthresholded prevalence metric, mean cosine distance is 0.080 and mean JS divergence is 0.044 bits. This supports weak but genuine distributional separation, suitable only as a secondary axis pending human decision. **Artifact.** The perfect superclass Jaccard is mechanical: 1.000 = all genres have identical thresholded superclass active sets, NOT improved discrimination. After collapse, every genre profile contains every available superclass, so set-presence Jaccard has no room to differ. Distributional class-count metrics are not perfect (26-class all-labelled mean cosine 0.905; 26-class >=3-label mean cosine 0.858), so the prior character-is-non-discriminative verdict is retracted. | Axis | classes | mean pairwise Jaccard | delta vs 26 | | --- | ---: | ---: | ---: | | 26-class | 26 | 0.793 | baseline | | six_superclass | 5 | 1.000 | +0.207 | | eight_superclass | 8 | 1.000 | +0.207 | ## Superclass Sets Compared ### six_superclass - `amber_oriental`: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green - `citrus_cologne`: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green - `floral_woody`: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green - `fougere`: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green - `wildcard`: animalic_spicy_smoky, balsamic_woody_mossy, edible_gourmand, floral, fresh_citrus_green ### eight_superclass - `amber_oriental`: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice - `citrus_cologne`: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice - `floral_woody`: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice - `fougere`: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice - `wildcard`: animalic_musk_smoke, aromatic_cool_herbal, balsamic_woody_mossy, floral, fresh_citrus_green_fruit, gourmand_sweet, savory_phenolic, spice ## Label Density | Axis | avg distinct classes / labelled formula | avg labelled materials / labelled formula | | --- | ---: | ---: | | 26-class | 2.31 | 2.05 | | six_superclass | 1.78 | 2.05 | | eight_superclass | 1.94 | 2.05 | ## Corrected Distributional Metrics | Axis | mean cosine, all labelled | mean cosine, >=3 classes | material-level mean cosine | | --- | ---: | ---: | ---: | | 26-class | 0.905 | 0.858 | 0.999 | | six_superclass | 0.942 | 0.934 | 1.000 | | eight_superclass | 0.926 | 0.900 | 1.000 | Lower cosine means more genre-profile separation. The 26-class axis keeps the strongest separation; collapsing to superclasses weakens it and made presence-Jaccard unusable. `best_grouping` is null unless a grouped axis materially improves on 26-class; the lowest grouped Jaccard is only recorded as `lowest_jaccard_grouping` for audit. ## Unthresholded Prevalence Distributional Metric This is the corrected character discrimination test. Vectors retain the raw per-genre prevalence of each class before any active-set thresholding; cosine is reported as distance (`1 - similarity`) and JS divergence is reported in bits. | Axis | classes | mean cosine distance | mean JS divergence (bits) | | --- | ---: | ---: | ---: | | 26-class | 26 | 0.080 | 0.044 | | six_superclass | 5 | 0.015 | 0.007 | | eight_superclass | 8 | 0.023 | 0.010 | ### 26-class cosine distance | Genre | `amber_oriental` | `citrus_cologne` | `floral_woody` | `fougere` | `wildcard` | | --- | ---: | ---: | ---: | ---: | ---: | | `amber_oriental` | 0.000 | 0.043 | 0.027 | 0.007 | 0.162 | | `citrus_cologne` | 0.043 | 0.000 | 0.013 | 0.044 | 0.145 | | `floral_woody` | 0.027 | 0.013 | 0.000 | 0.024 | 0.167 | | `fougere` | 0.007 | 0.044 | 0.024 | 0.000 | 0.170 | | `wildcard` | 0.162 | 0.145 | 0.167 | 0.170 | 0.000 | ### 26-class JS divergence (bits) | Genre | `amber_oriental` | `citrus_cologne` | `floral_woody` | `fougere` | `wildcard` | | --- | ---: | ---: | ---: | ---: | ---: | | `amber_oriental` | 0.000 | 0.033 | 0.016 | 0.005 | 0.077 | | `citrus_cologne` | 0.033 | 0.000 | 0.013 | 0.033 | 0.078 | | `floral_woody` | 0.016 | 0.013 | 0.000 | 0.014 | 0.082 | | `fougere` | 0.005 | 0.033 | 0.014 | 0.000 | 0.087 | | `wildcard` | 0.077 | 0.078 | 0.082 | 0.087 | 0.000 | ### six_superclass cosine distance | Genre | `amber_oriental` | `citrus_cologne` | `floral_woody` | `fougere` | `wildcard` | | --- | ---: | ---: | ---: | ---: | ---: | | `amber_oriental` | 0.000 | 0.002 | 0.003 | 0.001 | 0.030 | | `citrus_cologne` | 0.002 | 0.000 | 0.004 | 0.002 | 0.033 | | `floral_woody` | 0.003 | 0.004 | 0.000 | 0.003 | 0.047 | | `fougere` | 0.001 | 0.002 | 0.003 | 0.000 | 0.026 | | `wildcard` | 0.030 | 0.033 | 0.047 | 0.026 | 0.000 | ### six_superclass JS divergence (bits) | Genre | `amber_oriental` | `citrus_cologne` | `floral_woody` | `fougere` | `wildcard` | | --- | ---: | ---: | ---: | ---: | ---: | | `amber_oriental` | 0.000 | 0.001 | 0.002 | 0.001 | 0.012 | | `citrus_cologne` | 0.001 | 0.000 | 0.002 | 0.002 | 0.015 | | `floral_woody` | 0.002 | 0.002 | 0.000 | 0.002 | 0.021 | | `fougere` | 0.001 | 0.002 | 0.002 | 0.000 | 0.011 | | `wildcard` | 0.012 | 0.015 | 0.021 | 0.011 | 0.000 | ### eight_superclass cosine distance | Genre | `amber_oriental` | `citrus_cologne` | `floral_woody` | `fougere` | `wildcard` | | --- | ---: | ---: | ---: | ---: | ---: | | `amber_oriental` | 0.000 | 0.006 | 0.007 | 0.002 | 0.043 | | `citrus_cologne` | 0.006 | 0.000 | 0.003 | 0.008 | 0.047 | | `floral_woody` | 0.007 | 0.003 | 0.000 | 0.010 | 0.062 | | `fougere` | 0.002 | 0.008 | 0.010 | 0.000 | 0.043 | | `wildcard` | 0.043 | 0.047 | 0.062 | 0.043 | 0.000 | ### eight_superclass JS divergence (bits) | Genre | `amber_oriental` | `citrus_cologne` | `floral_woody` | `fougere` | `wildcard` | | --- | ---: | ---: | ---: | ---: | ---: | | `amber_oriental` | 0.000 | 0.003 | 0.003 | 0.001 | 0.020 | | `citrus_cologne` | 0.003 | 0.000 | 0.002 | 0.004 | 0.020 | | `floral_woody` | 0.003 | 0.002 | 0.000 | 0.005 | 0.026 | | `fougere` | 0.001 | 0.004 | 0.005 | 0.000 | 0.020 | | `wildcard` | 0.020 | 0.020 | 0.026 | 0.020 | 0.000 | ## Threshold Sensitivity | Grouping | activity threshold | mean pairwise Jaccard | | --- | ---: | ---: | | six_superclass | 5% | 1.000 | | six_superclass | 10% | 1.000 | | six_superclass | 15% | 0.880 | | eight_superclass | 5% | 1.000 | | eight_superclass | 10% | 0.868 | | eight_superclass | 15% | 0.886 | Recommendation: **Retract the superclass presence-Jaccard conclusion: the 1.000 is a collapse/presence artifact, not proof that character is dead. Keep corrected distributional metrics as the circuit-breaker. Under unthresholded prevalence vectors, 26-class character shows weak but nonzero profile separation (mean cosine distance 0.080; mean JS divergence 0.044 bits; presence-Jaccard baseline 0.793, best collapsed presence-Jaccard 1.000). Recommended direction: character may resume only at 26-class granularity under distributional and well-labelled filters; do not use superclass presence-Jaccard for go/no-go decisions.** Character verdict policy: **Character profiles are weakly but genuinely separated at 26-class granularity. Superclass collapse remains non-discriminative and threshold-driven. Character may resume only as a secondary axis gated by this distributional metric; presence-Jaccard must not be used again as the circuit-breaker.** Substantivity remains confirmed and publishable independent of this character diagnostic. Next human decision: ship substantivity, resume character only under the corrected 26-class distributional circuit-breaker, or park character for a trajectory-proportion pivot. No new sourcing, label expansion, dataset assembly, training, or upload was performed.