COMPO · 34.02 · WEIGHT / STYLE / CASE HIERARCHY

Describe emphasis channels.
Do not invent a universal salience order.

34.02 добавляет explicit font-weight, font-style и text-case evidence к semantic roles из 34.00. Numeric weight можно сравнивать объективно внутри канала. Style и case остаются categorical: модуль фиксирует equality и transitions, но не объявляет italic, oblique или uppercase автоматически более сильными.

Module34.02
Progress3/7 local
Weight1…1000
Style / casecategorical
Metricsnone
Next34.03 only

34.02 owns three explicit typography channels

Weight is numeric evidence. Style and case are categorical evidence. Pairwise descriptors preserve differences without silently converting categories into rank.

00 / three channels
immutable 34.00 TextRoleDescriptor[] + explicit FontWeightEvidence[] + explicit FontStyleEvidence[] + explicit TextCaseEvidence[] + explicit pair requests → WeightStyleCaseSubjectDescriptor[] → WeightStyleCasePairDescriptor[] weight: delta ratio heavier / lighter style: sameStyle styleTransition case: sameCase caseTransition NO style salience rank NO case salience rank NO hierarchy rank NO scoring

Weight supports numeric comparison

Explicit integer weight lives in the 1…1000 range. The result is still a structural typography descriptor, not visual-importance truth.

01 / weight channel

700 versus 400

TITLEweight = 700 BODYweight = 400 Δ = 300ratio = 1.75 · heavierSubjectRef = TITLE subject

Style is categorical, not ordinal

NORMAL, ITALIC, OBLIQUE and OWNER_DEFINED can differ structurally without a universal “stronger” direction.

02 / style channel
NORMAL

Category

No default salience rank.

ITALIC

Category

No default salience rank.

OBLIQUE

Category

No default salience rank.

OWNER_DEFINED

External style

Explicit name required.

Case is also categorical

UPPERCASE may create emphasis in some systems, but 34.02 does not promote that convention into a universal law.

03 / case channel
UPPERCASE

Difference descriptor

Not automatic dominance.

TITLE_CASE

Difference descriptor

Not automatic hierarchy level.

SENTENCE_CASE

Difference descriptor

Not automatically weaker.

One directed pair preserves all three channels

Numeric weight relation and categorical transitions travel together, while each channel keeps its own epistemic meaning.

04 / pair descriptor
A → B weightDelta = weight(A) - weight(B) weightRatio = weight(A) / weight(B) sameWeight = weight(A) == weight(B) styleTransition = style(A) → style(B) sameStyle = exact categorical equality styleSalienceDirection = null caseTransition = case(A) → case(B) sameCase = exact categorical equality caseSalienceDirection = null independentVoteAllowed = false scoreRef = null

No universal style/case salience law

The module intentionally refuses common but context-dependent assumptions.

05 / anti-law firewall

Differences are observed, not ranked

ITALICUPPERCASE NORMALSentence case ≠ rank styleTransition and caseTransition exist · salienceDirection = null
UPPERCASE ≠ dominant by law. Any such preference must enter later through explicit profile/scoring logic.

34.01 is optional compatibility lineage

Scale evidence can be attached for cross-module consistency, but 34.02 neither requires scale ratios nor mutates them.

06 / optional lineage
34.00

Required

Semantic text subject identity.

34.01

Optional

Identity compatibility only.

34.02

Owns channels

Weight, style and case.

Hierarchy remains multi-channel

Color/contrast, readability/accessibility, ordering and final scoring are still untouched.

07 / staged ownership
34.00

roles

→
34.01

scale

→
34.02

weight / style / case

→
34.03

color / contrast

→
34.04

readability / accessibility

→
34.05

ordering

→
34.06

scoring / tests

34.02 regression suite

Tests cover weight bounds, style/case taxonomies, owner-defined labels, pair direction, weight delta/ratio/equality, style/case transitions, same-role pairs, optional 34.01 lineage, bounded execution, upstream immutability and strict absence of style/case ranking, hierarchy rank, graph and scoring logic.

08 / runtime
Tests not run yet.

DATA FOR LAYOUT ENGINE

Canonical machine contract for explicit weight/style/case hierarchy channels.

09 / machine
{
  "module": "Compo 34.02",
  "name": "weight_style_case_hierarchy",
  "version": "1.0-canonical",
  "canonical_main_title": "Weight / style / case hierarchy",
  "topic": "34_ТИПОГРАФИЧЕСКАЯ_ИЕРАРХИЯ",
  "scope": "EXPLICIT_OWNER_QUALIFIED_FONT_WEIGHT_STYLE_AND_CASE_EVIDENCE_WITH_PAIRWISE_CHANNEL_DESCRIPTORS_OVER_IMMUTABLE_34_00_ROLE_SUBJECTS_AND_OPTIONAL_34_01_SCALE_LINEAGE_WITHOUT_STYLE_OR_CASE_SALIENCE_LAWS_HIERARCHY_RANK_COLOR_CONTRAST_READABILITY_ORDERING_OR_SCORING",
  "main_topic_contract": {
    "topic_title": "Типографическая иерархия",
    "topic_goal": "Строит типографическую иерархию title/subtitle/body/caption/meta по scale, weight, case, color и порядку; отдельно фиксирует минимальную читаемость и accessibility constraints.",
    "expected_output": "TextHierarchyGraph, type levels, hierarchy violations",
    "planned_files": [
      "34.00 Text role taxonomy",
      "34.01 Type scale и hierarchy ratios",
      "34.02 Weight / style / case hierarchy",
      "34.03 Color / contrast hierarchy",
      "34.04 Минимальная читаемость, size floors и accessibility constraints",
      "34.05 Multi-block ordering",
      "34.06 Scoring и tests"
    ]
  },
  "ownership": {
    "owner": "Compo34.02",
    "owns": [
      "FontWeightEvidenceBinding",
      "FontStyleEvidenceBinding",
      "TextCaseEvidenceBinding",
      "WeightStyleCasePairRequest",
      "WeightStyleCasePolicy",
      "WeightStyleCaseSubjectDescriptor",
      "WeightStyleCasePairDescriptor",
      "WeightStyleCaseDescriptorSet",
      "WeightStyleCaseAttachment",
      "numeric font-weight preservation",
      "font-style taxonomy",
      "text-case taxonomy",
      "pairwise weight delta",
      "pairwise weight ratio",
      "pairwise heavier/lighter structural direction",
      "same-weight structural flag",
      "same-style structural flag",
      "same-case structural flag",
      "style-transition descriptor",
      "case-transition descriptor",
      "optional 34.01 subject-lineage compatibility",
      "bounded deterministic pair resolution",
      "non-mutating correction request"
    ],
    "does_not_own": [
      "34.00 semantic text role",
      "34.01 type-size evidence",
      "34.01 scale ratio",
      "automatic font-weight extraction",
      "automatic style classification",
      "automatic case classification",
      "automatic style salience ranking",
      "automatic case salience ranking",
      "universal boldness hierarchy law",
      "universal italic hierarchy law",
      "universal uppercase hierarchy law",
      "automatic hierarchy rank",
      "automatic hierarchy level",
      "34.03 color hierarchy",
      "34.03 contrast hierarchy",
      "34.04 readability constraints",
      "34.04 accessibility constraints",
      "34.05 multi-block ordering",
      "34.05 hierarchy graph construction",
      "34.06 hierarchy scoring",
      "34.06 hierarchy violations scoring",
      "35 TextBlock geometry",
      "36 typography spacing",
      "37 text-image relation",
      "automatic winner selection",
      "foreign typography mutation",
      "universal beautyScore"
    ]
  },
  "font_style_kinds": [
    "NORMAL",
    "ITALIC",
    "OBLIQUE",
    "OWNER_DEFINED"
  ],
  "text_case_kinds": [
    "LOWERCASE",
    "UPPERCASE",
    "TITLE_CASE",
    "SENTENCE_CASE",
    "MIXED_CASE",
    "CASELESS",
    "OWNER_DEFINED"
  ],
  "weight_semantics": {
    "value": "explicit integer 1..1000",
    "meaning": "font-weight evidence from an external typography/style owner",
    "pair_delta": "numeratorWeight - denominatorWeight",
    "pair_ratio": "numeratorWeight / denominatorWeight",
    "heavier_subject_ref": "subject with numerically greater explicit weight; null when equal",
    "lighter_subject_ref": "subject with numerically smaller explicit weight; null when equal",
    "same_weight": "numeric equality",
    "weight_is_hierarchy_rank": false,
    "weight_is_importance_score": false
  },
  "style_case_semantics": {
    "style": "categorical only; 34.02 does not rank NORMAL/ITALIC/OBLIQUE",
    "case": "categorical only; 34.02 does not rank LOWERCASE/UPPERCASE/TITLE_CASE/etc.",
    "style_transition": "numeratorStyle → denominatorStyle",
    "case_transition": "numeratorCase → denominatorCase",
    "same_style": "categorical equality",
    "same_case": "categorical equality",
    "style_salience_direction": "NOT_OWNED",
    "case_salience_direction": "NOT_OWNED",
    "uppercase_dominance_claim": false,
    "italic_dominance_claim": false
  },
  "compatibility_semantics": {
    "34_00_subject": "must be immutable DECLARED_TYPOGRAPHIC_ROLE",
    "34_01_scale_subject": "optional compatibility reference only; when supplied, textSubjectRef and textSubjectIdentity must match 34.00",
    "scope_snapshot": "all evidence must match exact 34.00 scope/snapshot",
    "one_weight_evidence_per_subject": "required",
    "one_style_evidence_per_subject": "required",
    "one_case_evidence_per_subject": "required",
    "same_role_pairs": "allowed",
    "different_role_pairs": "allowed",
    "same_subject_pair": "INVALID",
    "pair_orientation": "explicit numeratorTextSubjectRef → denominatorTextSubjectRef"
  },
  "policy": {
    "request_mode": "EXPLICIT_WEIGHT_STYLE_CASE_PAIR_REQUESTS_ONLY",
    "max_weight_evidence": [
      1,
      131072
    ],
    "max_style_evidence": [
      1,
      131072
    ],
    "max_case_evidence": [
      1,
      131072
    ],
    "max_pair_requests": [
      0,
      262144
    ],
    "max_subjects": [
      1,
      131072
    ],
    "overflow": "N_A_NO_TRUNCATION",
    "duplicate_weight_evidence_ref": "INVALID",
    "duplicate_style_evidence_ref": "INVALID",
    "duplicate_case_evidence_ref": "INVALID",
    "duplicate_pair_request_ref": "INVALID",
    "duplicate_subject_channel_binding": "INVALID",
    "duplicate_directed_pair_identity": "INVALID",
    "auto_weight_extraction": false,
    "auto_style_classification": false,
    "auto_case_classification": false,
    "auto_style_salience_rank": false,
    "auto_case_salience_rank": false,
    "auto_hierarchy_rank": false,
    "auto_hierarchy_level": false,
    "auto_color_contrast_hierarchy": false,
    "auto_readability_evaluation": false,
    "auto_accessibility_evaluation": false,
    "auto_multi_block_ordering": false,
    "auto_hierarchy_graph": false,
    "auto_scoring": false
  },
  "status_semantics": {
    "OK": "explicit weight/style/case evidence resolves for immutable 34.00 subjects and requested pair descriptors are derived deterministically",
    "N_A": "subject/evidence/optional 34.01 lineage is missing or scope/snapshot mismatches, or bounds overflow",
    "INVALID": "malformed evidence/request/policy, unsupported style/case, weight outside 1..1000, missing owner-defined names, duplicate channel identity, or same-subject pair",
    "zero": "weight delta may legitimately be zero for equal weights; zero is never a sentinel for N_A"
  },
  "firewalls": [
    "font weight != hierarchy rank",
    "font weight != visual importance score",
    "heavier weight != automatically higher semantic role",
    "same weight != hierarchy failure",
    "ITALIC != automatically more salient than NORMAL",
    "OBLIQUE != automatically more salient than ITALIC",
    "UPPERCASE != automatically more dominant than LOWERCASE",
    "TITLE_CASE != automatically more important than SENTENCE_CASE",
    "style difference != hierarchy direction",
    "case difference != hierarchy direction",
    "style transition != score",
    "case transition != score",
    "weight ratio != independent vote",
    "34.02 does not infer typographic role from weight/style/case",
    "34.02 does not mutate 34.00 semantic roles",
    "34.02 does not mutate 34.01 type-scale evidence",
    "34.02 weight/style/case != 34.03 color/contrast hierarchy",
    "34.02 channels != 34.04 readability/accessibility",
    "34.02 channels != 34.05 multi-block ordering",
    "34.02 pair descriptors != 34.06 hierarchy score",
    "34.02 does not own Topic35 TextBlock geometry",
    "34.02 does not own Topic36 typography spacing",
    "34.02 does not own Topic37 text-image relation",
    "N_A != 0",
    "INVALID != 0",
    "descriptor != score",
    "local != global",
    "geometry != interpretation",
    "heuristic != law",
    "no universal weight/style/case hierarchy threshold",
    "no universal beautyScore"
  ],
  "owns_metrics": [],
  "independent_numeric_votes": 0,
  "topic34ProgressAfterThisModule": "3/7 local",
  "next_module": "Compo 34.03 — Color / contrast hierarchy",
  "topic35_started": false,
  "publication": "NOT_VERIFIED"
}
VISITS / ...