COMPO · 10.02 · BASELINE / TEXT ALIGNMENT

Text
baseline
alignment.

Alignment-specific text baseline evidence and pairwise baseline measurement. 10.02 consumes upstream line-layout/typography evidence without becoming a shaping engine. Exact, authored and explicit fallback evidence remain distinguishable; baseline kind and line selector are explicit; TEXT_BASELINE is never silently collapsed into BOTTOM. Visual tolerance and optical correction remain 10.04.

ModuleCompo 10.02
Scopetext baseline relations
Fallbackexplicit + marked
Opticaldeferred 10.04
Metricsnone
Next10.03

Baseline is not box bottom

00 / baseline contract

10.02 normalizes owner-qualified text baseline evidence and measures pairwise baseline relations without re-owning shaping or typography.

EXACT

line-layout baseline evidence

AUTHOR

explicit authored baseline

FALLBACK

visible proxy only when policy allows

TextLayoutBaselineSource

01 / source

The upstream text owner supplies line evidence; 10.02 chooses a baseline explicitly.

TextLayoutBaselineSource {
  sourceRef,
  subjectRef,
  sourceOwnerRef,

  sourceMode:
    EXACT_TEXT_LAYOUT |
    EXPLICIT_AUTHOR,

  baselineKind,
  baselineKindRef?,

  lines[],

  canvasRef,
  coordinateFrame,
  sourceUnit,

  confidence,
  provenance
}

No implicit primary line

02 / selector

Multi-line text requires an explicit baseline selector.

FIRST_LINE → smallest lineIndex LAST_LINE → largest lineIndex LINE_INDEX → explicit zero-based lineIndex PRIMARY_LINE → NOT DEFINED

Semantic baseline family

03 / baseline kind

Baseline kind comes from the text-layout owner; 10.02 does not guess it from script or font.

ALPHABETIC IDEOGRAPHIC HANGING MATHEMATICAL OTHER_EXPLICIT OTHER_EXPLICIT: baselineKindRef required
NO INFERENCE. Language/script/font/glyph appearance does not silently determine baselineKind here.

Explicit proxy, never exact

04 / fallback

A box-bottom proxy exists only to preserve controlled degraded behavior when an explicit extraction policy permits it.

BaselineExtractionPolicy {
  policyRef,

  fallbackMode:
    DISALLOW |
    BOX_BOTTOM_PROXY,

  fallbackConfidenceCap?,

  provenance
}
no exact baseline + fallbackMode = DISALLOW → N_A no exact baseline + BOX_BOTTOM_PROXY → FALLBACK_PROXY → confidence capped → never relabeled exact

Different baseline kinds need explicit permission

05 / compatibility

Cross-kind alignment is not silently treated as equivalent.

BaselineCompatibilityPolicy {
  policyRef,
  allowedCrossKindPairs[],
  allowFallbackProxy,
  provenance
}
ALPHABETIC ↔ ALPHABETIC → compatible ALPHABETIC ↔ IDEOGRAPHIC → INVALID unless unordered pair explicitly allowed

Baseline pair offset

06 / measurement

Pairwise identity and raw offset follow the canonical 10.00/10.01 ordering convention.

canonical participants: sort(participantRef) b0 = first canonical baseline coordinate b1 = second canonical baseline coordinate signedDeltaRaw = b1 - b0 absoluteOffsetRaw = abs(signedDeltaRaw)

Descriptor only

07 / relation class

The class records evidence semantics, not quality.

ClassMeaning
SAME_KIND_TEXT_BASELINEtwo non-fallback text baselines with same kind
EXPLICIT_CROSS_KIND_TEXT_BASELINEdifferent kinds explicitly allowed
TEXT_TO_REFERENCE_BASELINEtext baseline ↔ explicit BASELINE reference
FALLBACK_BASELINE_RELATIONat least one allowed fallback proxy

Numerical EPS still isn't optical tolerance

08 / numerics

10.02 consumes the numerical-coincidence convention from 10.01.

effectiveEpsRaw = max( absEpsRaw, relEps * max(1, |b0|, |b1|) ) numericallyCoincident = absoluteOffsetRaw <= effectiveEpsRaw optically acceptable? → NOT ANSWERED HERE → 10.04

Text baseline ↔ explicit reference

09 / reference

A baseline may align to an explicit BASELINE reference, but generic grid topology remains upstream.

TEXT_BASELINE ↔ GRID_REFERENCE coordinateAxis=BASELINE → axisFamily=REFERENCE_AXIS → TEXT_TO_REFERENCE_BASELINE two generic references: outside 10.02 scope

Typography and alignment remain separate

10 / ownership

10.02 consumes text-layout evidence but does not become a shaping engine.

ResponsibilityOwner
font shaping / line layout / raw font metricsupstream typography/text-layout owner
alignment root taxonomy10.00
generic X/Y edge/center relations10.01
baseline normalization + pair measurement10.02
multi-subject shared axes10.03
visual tolerance / optical / local score10.04

Exact/fallback provenance is data

11 / IDEAS + DATA

Future calibration needs to know why a baseline existed and how it was selected, not only the final offset.

DATA_CAPTURE: source mode selector selected line baseline kind exact / author / fallback fallback confidence cap compatibility policy pair offset numerical EPS N_A / INVALID reason semantic refs human reason codes PRIORITY: fallback never overrides exact module order never decides conflicts

Capture the reason

12 / human feedback

Human corrections distinguish wrong line selection from optical offset or semantic conflict.

BASELINE_RELATION_WRONG WRONG_TEXT_LINE_SELECTED WRONG_BASELINE_KIND FALLBACK_BASELINE_UNACCEPTABLE OPTICAL_BASELINE_SHIFT_NEEDED SEMANTIC_CONFLICT INTENTIONAL_BASELINE_OFFSET OTHER

Coincidence is not preference

13 / descriptor != score

An exact baseline match can still be undesirable in context.

FORBIDDEN. `baseline offset=0 → score=1`, `fallback proxy = exact`, `every text block should share a baseline`. Visual tolerance, optical offset and context belong later.

Baseline cases

14 / Visual Lab

The visual lab separates exact baseline evidence, multi-line selection, proxy fallback and reference alignment.

A · EXACT TEXT BASELINE Ag blue baseline != red box bottom B · MULTI-LINE SELECTOR First line Last line FIRST / LAST / explicit LINE_INDEX C · FALLBACK PROXY Text explicit FALLBACK only · never exact TEXT_BASELINE != BOTTOM · no silent box-bottom synthesis no exact baseline + fallback DISALLOW → N/A cross baseline-kind pair requires explicit compatibility policy fallback evidence remains marked FALLBACK even at offset 0 numerical coincidence != optical alignment acceptance semantic/intent conflict is deferred · module order != priority

10.02 baseline regression

15 / deterministic tests

Tests cover exact/author/fallback evidence, line selectors, kind compatibility, reference alignment, order invariance and new data hooks.

Tests not run yet.

DATA FOR LAYOUT ENGINE

16 / machine contract

Machine-readable 10.02 contract.

{
  "module": "Compo 10.02",
  "name": "baseline_and_text_alignment",
  "version": "1.0-canonical",
  "canonical_main_title": "Baseline and text alignment",
  "topic": "10_БАЗОВЫЕ_ЛИНИИ_И_ВЫРАВНИВАНИЕ",
  "scope": "TEXT_BASELINE_EVIDENCE_EXTRACTION_NORMALIZATION_AND_PAIRWISE_BASELINE_ALIGNMENT_MEASUREMENT",
  "review_basis": {
    "public_MAIN": "10.02 exact title confirmed in Topic10 plan",
    "previous_modules": [
      "Compo10.00 Alignment taxonomy",
      "Compo10.01 Left/right/center/top/bottom relations"
    ],
    "related_owners_reviewed": [
      "Compo10.00 TEXT_BASELINE taxonomy boundary",
      "Compo10.01 NumericalPolicy and pairwise identity conventions",
      "upstream text-layout/typography geometry ownership boundary",
      "Topic8/9 reference/grid ownership boundary"
    ],
    "cross_cutting_instruction": "COMPO project instruction v2.0",
    "ideas_register": "COMPO_IDEAS reviewed before implementation"
  },
  "consumes": [
    "Compo10.00.AlignmentRelation root shell",
    "Compo10.00.AlignmentParticipant[2]",
    "Compo10.00.AlignmentAnchorEvidence taxonomy",
    "Compo10.01.NumericalPolicy compatibility contract",
    "owner-qualified TextLayoutBaselineSource or explicit author baseline evidence",
    "optional TextBoxGeometry only when explicit fallback policy allows proxy generation",
    "optional opaque semanticConstraintRefs[]"
  ],
  "provides": [
    "BaselineExtractionPolicy",
    "BaselineCompatibilityPolicy",
    "TextLayoutBaselineSource",
    "TextBaselineEvidence",
    "BaselineAlignmentMeasurement",
    "BaselineRelationClass",
    "BaselineAlignmentRepairRequest",
    "serializable baseline observation record"
  ],
  "owns_metrics": [],
  "descriptors_only": [
    "alignment.baseline.sourceMode",
    "alignment.baseline.baselineKind",
    "alignment.baseline.lineSelector",
    "alignment.baseline.lineIndex",
    "alignment.baseline.relationClass",
    "alignment.baseline.signedDeltaRaw",
    "alignment.baseline.absoluteOffsetRaw",
    "alignment.baseline.effectiveEpsRaw",
    "alignment.baseline.numericallyCoincident",
    "alignment.baseline.evidenceMode"
  ],
  "baseline_kind_semantics": {
    "allowed": [
      "ALPHABETIC",
      "IDEOGRAPHIC",
      "HANGING",
      "MATHEMATICAL",
      "OTHER_EXPLICIT"
    ],
    "OTHER_EXPLICIT": "requires baselineKindRef supplied by upstream owner",
    "inference": "FORBIDDEN; 10.02 does not infer baseline kind from language/script/font/glyph geometry"
  },
  "baseline_source_schema": {
    "sourceRef": "stable upstream source ref",
    "subjectRef": "TEXT subject identity",
    "sourceOwnerRef": "text-layout/typography owner",
    "sourceMode": "EXACT_TEXT_LAYOUT|EXPLICIT_AUTHOR",
    "baselineKind": "explicit allowed kind",
    "baselineKindRef": "required only for OTHER_EXPLICIT",
    "lines": "ordered line baseline evidence with unique zero-based lineIndex and unique lineRef",
    "canvasRef": "exact canvas lineage",
    "coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN or explicit same-frame contract",
    "sourceUnit": "exact raw unit",
    "confidence": "0..1",
    "provenance": "DERIVED|STANDARD|EMPIRICAL"
  },
  "baseline_line_schema": {
    "lineRef": "stable line identity",
    "lineIndex": "zero-based integer >=0",
    "baselineRaw": "finite raw Y coordinate or null if genuinely unavailable",
    "confidence": "0..1",
    "evidenceRef": "exact upstream line-layout evidence"
  },
  "extraction_policy_schema": {
    "policyRef": "stable explicit ref",
    "fallbackMode": "DISALLOW|BOX_BOTTOM_PROXY",
    "fallbackConfidenceCap": "0..1; required when BOX_BOTTOM_PROXY",
    "fallbackBaselineKind": "OTHER_EXPLICIT/UNKNOWN_PROXY marker, never exact baseline kind",
    "provenance": "STANDARD|INITIAL_HEURISTIC|STYLE_PRESET"
  },
  "selector_schema": {
    "selectorKind": "FIRST_LINE|LAST_LINE|LINE_INDEX",
    "lineIndex": "required only for LINE_INDEX",
    "implicit_primary_line": "FORBIDDEN"
  },
  "text_baseline_evidence_schema": {
    "baselineEvidenceRef": "stable hash of source/selector/policy lineage",
    "subjectRef": "text subject",
    "lineRef": "selected exact line or null for fallback proxy",
    "lineIndex": "selected zero-based index or null for fallback proxy",
    "baselineKind": "explicit kind or OTHER_EXPLICIT proxy marker",
    "baselineKindRef": "optional/required for OTHER_EXPLICIT",
    "coordinateRaw": "raw baseline/proxy coordinate",
    "coordinateAxis": "BASELINE",
    "anchorFamily": "TEXT_BASELINE",
    "anchorKind": "TEXT_BASELINE_EXACT|TEXT_BASELINE_AUTHOR|TEXT_BASELINE_PROXY",
    "evidenceMode": "EXACT|AUTHOR_EXPLICIT|FALLBACK",
    "sourceMode": "EXACT_TEXT_LAYOUT|EXPLICIT_AUTHOR|FALLBACK_PROXY",
    "sourceEvidenceRefs": "exact upstream refs",
    "canvasRef": "same source canvas",
    "coordinateFrame": "same source frame",
    "sourceUnit": "same source unit",
    "confidence": "propagated/capped confidence",
    "status": "OK|N_A|INVALID",
    "provenance": "DERIVED"
  },
  "compatibility_policy_schema": {
    "policyRef": "stable explicit ref",
    "allowedCrossKindPairs": "unordered baselineKind pairs explicitly allowed",
    "allowFallbackProxy": "boolean",
    "provenance": "STANDARD|STYLE_PRESET|INITIAL_HEURISTIC",
    "no_default_cross_kind_compatibility": true
  },
  "relation_class_semantics": {
    "SAME_KIND_TEXT_BASELINE": "two non-fallback text baselines of the same baselineKind",
    "EXPLICIT_CROSS_KIND_TEXT_BASELINE": "different text baseline kinds explicitly allowed by compatibility policy",
    "TEXT_TO_REFERENCE_BASELINE": "one text baseline plus one explicit BASELINE reference",
    "FALLBACK_BASELINE_RELATION": "at least one explicitly allowed fallback proxy participates",
    "quality_meaning": "NONE"
  },
  "measurement_schema": {
    "measurementRef": "stable hash of relationRef + canonical anchor evidence refs + numericalPolicyRef + compatibilityPolicyRef",
    "relationRef": "Compo10.00 relation identity",
    "relationFamily": "PAIRWISE_ANCHOR_ALIGNMENT",
    "axisFamily": "TEXT_BASELINE|REFERENCE_AXIS",
    "canonicalParticipantRefs": "sorted participant refs",
    "canonicalSubjectRefs": "subjects in canonical participant order",
    "canonicalAnchorRefs": "baseline/reference refs in canonical participant order",
    "baselineKinds": "kind values in canonical participant order, null for generic reference",
    "relationClass": "baseline relation descriptor",
    "coordinateAxis": "BASELINE",
    "coordinatePairRaw": "[c0,c1]",
    "signedDeltaRaw": "c1-c0 in canonical participant order",
    "absoluteOffsetRaw": "abs(signedDeltaRaw)",
    "effectiveEpsRaw": "from consumed NumericalPolicy",
    "numericallyCoincident": "numeric descriptor only",
    "evidenceModes": "EXACT|AUTHOR_EXPLICIT|FALLBACK|REFERENCE",
    "status": "OK|N_A|INVALID",
    "confidence": "minimum relevant evidence confidence",
    "provenance": "DERIVED",
    "score": "not owned",
    "mutationAllowed": false
  },
  "topic10_ownership_map": {
    "10.00": "alignment root taxonomy/reference identity",
    "10.01": "pairwise geometric X/Y edge/center/reference offsets",
    "10.02": "baseline evidence normalization/extraction and pairwise text baseline relations",
    "10.03": "multi-object shared axes",
    "10.04": "design tolerance/optical correction/local alignment score/tests"
  },
  "metric_policy": {
    "direct_scoring": "FORBIDDEN in 10.02",
    "baseline_coincidence_is_better": "FORBIDDEN",
    "more_baseline_alignment_is_better": "FORBIDDEN",
    "fallback_equals_exact": "FORBIDDEN",
    "beautyScore": "FORBIDDEN"
  },
  "hard_constraints": [
    "10.02 owns alignment-specific TextBaselineEvidence normalization/extraction, pairwise baseline relation measurement and baseline-specific repair/data contracts.",
    "Raw text shaping, font metrics and line layout remain owned by the upstream text-layout/typography owner; 10.02 consumes them by reference.",
    "10.02 does not redefine the AlignmentRelation root taxonomy from Compo10.00.",
    "10.02 does not re-own generic left/right/center/top/bottom geometric alignment measured by Compo10.01.",
    "10.02 does not own multi-subject shared-axis aggregation; Compo10.03 owns it.",
    "10.02 does not own visual tolerance, optical correction, target interpretation or local alignment scoring; Compo10.04 owns them.",
    "TEXT_BASELINE is semantically distinct from BOTTOM and must never be silently synthesized from a bounding-box bottom.",
    "Exact baseline evidence requires explicit upstream line-layout or explicit-author baseline coordinates.",
    "Baseline source modes are EXACT_TEXT_LAYOUT, EXPLICIT_AUTHOR and FALLBACK_PROXY.",
    "FALLBACK_PROXY is never relabeled as an exact baseline.",
    "Fallback generation is allowed only by an explicit BaselineExtractionPolicy with fallbackMode=BOX_BOTTOM_PROXY.",
    "When fallbackMode=DISALLOW and exact/author baseline evidence is unavailable, extraction returns N_A.",
    "Fallback confidence is capped by explicit fallbackConfidenceCap and remains visibly marked FALLBACK_PROXY.",
    "Baseline selector must be explicit: FIRST_LINE, LAST_LINE or LINE_INDEX.",
    "LINE_INDEX requires an explicit zero-based lineIndex.",
    "No implicit PRIMARY_LINE exists in 10.02.",
    "Text line baselines are ordered by explicit zero-based lineIndex and lineRef; missing indices are INVALID.",
    "Duplicate lineIndex or duplicate lineRef inside one baseline source is INVALID.",
    "BaselineKind is explicit owner-supplied semantics such as ALPHABETIC, IDEOGRAPHIC, HANGING, MATHEMATICAL or OTHER_EXPLICIT.",
    "OTHER_EXPLICIT requires a non-empty baselineKindRef.",
    "10.02 does not infer BaselineKind from script, language, font family or glyph shapes.",
    "Two text baselines with different baselineKind values are incompatible unless an explicit BaselineCompatibilityPolicy allows that unordered pair.",
    "Baseline kind compatibility is semantic compatibility, not rule priority or quality.",
    "Pairwise baseline relation requires exactly two distinct participants and distinct subjectRef values.",
    "Participant.anchorRef must match the supplied baseline/reference anchor evidence.",
    "Text-baseline to text-baseline uses axisFamily=TEXT_BASELINE.",
    "Text-baseline to explicit reference uses axisFamily=REFERENCE_AXIS.",
    "A baseline reference anchor must use coordinateAxis=BASELINE and must be explicit owner-qualified evidence.",
    "Two generic reference anchors without a text baseline are outside 10.02 scope and are INVALID.",
    "All coordinates must use the same canvasRef, coordinateFrame and sourceUnit unless an upstream mapping adapter already produced same-frame evidence.",
    "10.02 performs no implicit unit conversion, canvas mapping or coordinate projection.",
    "Missing baseline coordinate yields N_A, not zero.",
    "Non-finite baseline coordinate is INVALID.",
    "Pairwise baseline alignment is symmetric; reversing input order must not change relationRef, measurementRef, absoluteOffsetRaw or canonical signedDeltaRaw.",
    "signedDeltaRaw is defined only in canonical participantRef order.",
    "absoluteOffsetRaw = abs(signedDeltaRaw).",
    "10.02 consumes the explicit NumericalPolicy contract used by Compo10.01 for numerical coincidence; it does not turn numerical EPS into visual baseline tolerance.",
    "numericallyCoincident describes numeric equivalence only.",
    "BaselineRelationClass is descriptive only: SAME_KIND_TEXT_BASELINE, EXPLICIT_CROSS_KIND_TEXT_BASELINE, TEXT_TO_REFERENCE_BASELINE or FALLBACK_BASELINE_RELATION.",
    "FALLBACK_BASELINE_RELATION remains a fallback descriptor even when coordinates coincide exactly.",
    "Exact numerical baseline coincidence is not universally better.",
    "More text baseline alignment is not universally better.",
    "Optical baseline correction is deferred to Compo10.04.",
    "Intentional baseline offset remains possible and is not automatically an error.",
    "10.02 owns no numeric metric and emits no score.",
    "10.02 creates no placement candidates and never mutates text/object position, line layout or source typography.",
    "SemanticConstraintRefs remain opaque deferred inputs; 10.02 does not infer content semantics.",
    "A semantic constraint may later reject a geometrically exact baseline relation; module order does not decide that conflict.",
    "Module execution order is not rule priority.",
    "Correction requests are owner-qualified and mutationAllowed=false.",
    "All exact/fallback source lineage, selector choice, baseline kind, offsets and N_A/INVALID reasons must be serializable for future DATA/human calibration.",
    "IDEA references are R&D links, not provenance classes.",
    "LAB experiments do not mutate CANON automatically.",
    "N/A != 0.",
    "No beautyScore."
  ],
  "hard_rules": [
    "10.02 owns alignment-specific TextBaselineEvidence normalization/extraction, pairwise baseline relation measurement and baseline-specific repair/data contracts.",
    "Raw text shaping, font metrics and line layout remain owned by the upstream text-layout/typography owner; 10.02 consumes them by reference.",
    "10.02 does not redefine the AlignmentRelation root taxonomy from Compo10.00.",
    "10.02 does not re-own generic left/right/center/top/bottom geometric alignment measured by Compo10.01.",
    "10.02 does not own multi-subject shared-axis aggregation; Compo10.03 owns it.",
    "10.02 does not own visual tolerance, optical correction, target interpretation or local alignment scoring; Compo10.04 owns them.",
    "TEXT_BASELINE is semantically distinct from BOTTOM and must never be silently synthesized from a bounding-box bottom.",
    "Exact baseline evidence requires explicit upstream line-layout or explicit-author baseline coordinates.",
    "Baseline source modes are EXACT_TEXT_LAYOUT, EXPLICIT_AUTHOR and FALLBACK_PROXY.",
    "FALLBACK_PROXY is never relabeled as an exact baseline.",
    "Fallback generation is allowed only by an explicit BaselineExtractionPolicy with fallbackMode=BOX_BOTTOM_PROXY.",
    "When fallbackMode=DISALLOW and exact/author baseline evidence is unavailable, extraction returns N_A.",
    "Fallback confidence is capped by explicit fallbackConfidenceCap and remains visibly marked FALLBACK_PROXY.",
    "Baseline selector must be explicit: FIRST_LINE, LAST_LINE or LINE_INDEX.",
    "LINE_INDEX requires an explicit zero-based lineIndex.",
    "No implicit PRIMARY_LINE exists in 10.02.",
    "Text line baselines are ordered by explicit zero-based lineIndex and lineRef; missing indices are INVALID.",
    "Duplicate lineIndex or duplicate lineRef inside one baseline source is INVALID.",
    "BaselineKind is explicit owner-supplied semantics such as ALPHABETIC, IDEOGRAPHIC, HANGING, MATHEMATICAL or OTHER_EXPLICIT.",
    "OTHER_EXPLICIT requires a non-empty baselineKindRef.",
    "10.02 does not infer BaselineKind from script, language, font family or glyph shapes.",
    "Two text baselines with different baselineKind values are incompatible unless an explicit BaselineCompatibilityPolicy allows that unordered pair.",
    "Baseline kind compatibility is semantic compatibility, not rule priority or quality.",
    "Pairwise baseline relation requires exactly two distinct participants and distinct subjectRef values.",
    "Participant.anchorRef must match the supplied baseline/reference anchor evidence.",
    "Text-baseline to text-baseline uses axisFamily=TEXT_BASELINE.",
    "Text-baseline to explicit reference uses axisFamily=REFERENCE_AXIS.",
    "A baseline reference anchor must use coordinateAxis=BASELINE and must be explicit owner-qualified evidence.",
    "Two generic reference anchors without a text baseline are outside 10.02 scope and are INVALID.",
    "All coordinates must use the same canvasRef, coordinateFrame and sourceUnit unless an upstream mapping adapter already produced same-frame evidence.",
    "10.02 performs no implicit unit conversion, canvas mapping or coordinate projection.",
    "Missing baseline coordinate yields N_A, not zero.",
    "Non-finite baseline coordinate is INVALID.",
    "Pairwise baseline alignment is symmetric; reversing input order must not change relationRef, measurementRef, absoluteOffsetRaw or canonical signedDeltaRaw.",
    "signedDeltaRaw is defined only in canonical participantRef order.",
    "absoluteOffsetRaw = abs(signedDeltaRaw).",
    "10.02 consumes the explicit NumericalPolicy contract used by Compo10.01 for numerical coincidence; it does not turn numerical EPS into visual baseline tolerance.",
    "numericallyCoincident describes numeric equivalence only.",
    "BaselineRelationClass is descriptive only: SAME_KIND_TEXT_BASELINE, EXPLICIT_CROSS_KIND_TEXT_BASELINE, TEXT_TO_REFERENCE_BASELINE or FALLBACK_BASELINE_RELATION.",
    "FALLBACK_BASELINE_RELATION remains a fallback descriptor even when coordinates coincide exactly.",
    "Exact numerical baseline coincidence is not universally better.",
    "More text baseline alignment is not universally better.",
    "Optical baseline correction is deferred to Compo10.04.",
    "Intentional baseline offset remains possible and is not automatically an error.",
    "10.02 owns no numeric metric and emits no score.",
    "10.02 creates no placement candidates and never mutates text/object position, line layout or source typography.",
    "SemanticConstraintRefs remain opaque deferred inputs; 10.02 does not infer content semantics.",
    "A semantic constraint may later reject a geometrically exact baseline relation; module order does not decide that conflict.",
    "Module execution order is not rule priority.",
    "Correction requests are owner-qualified and mutationAllowed=false.",
    "All exact/fallback source lineage, selector choice, baseline kind, offsets and N_A/INVALID reasons must be serializable for future DATA/human calibration.",
    "IDEA references are R&D links, not provenance classes.",
    "LAB experiments do not mutate CANON automatically.",
    "N/A != 0.",
    "No beautyScore."
  ],
  "soft_constraints": [],
  "preferences": [],
  "overrides_allowed_by": [
    "new upstream text-layout evidence creates new baseline evidence lineage",
    "explicit compatibility policy may allow specific cross-kind baseline pairs",
    "explicit extraction policy may allow a visibly marked fallback proxy",
    "10.04 may interpret raw baseline offset through visual tolerance/optical profiles",
    "future semantic/context owners may reject or contextualize an otherwise exact baseline relation"
  ],
  "initial_heuristics": {
    "BOX_BOTTOM_PROXY": {
      "status": "optional explicit fallback only",
      "provenance": "INITIAL_HEURISTIC",
      "warning": "proxy is never relabeled exact; confidence cap required"
    }
  },
  "style_preset_values": [],
  "candidate_generation": {
    "placement_or_alignment_candidates": "NONE",
    "reason": "10.02 extracts/measures explicit baseline evidence only"
  },
  "correction_policy": {
    "foreign_mutation": "FORBIDDEN",
    "missing_exact_baseline": "return N_A when fallback disallowed; request upstream text baseline evidence",
    "fallback_not_allowed": "return N_A/diagnostic; never silently substitute box bottom",
    "baseline_kind_mismatch": "return INVALID unless explicit compatibility policy allows pair",
    "wrong_line_selector": "request selector correction",
    "wrong_baseline_kind": "route to text-layout/typography evidence owner",
    "optical_adjustment": "route to Compo10.04",
    "semantic_conflict": "preserve opaque refs and defer priority resolution"
  },
  "deferred_inputs": [
    "Compo10.03 multi-object baseline/shared-axis aggregation",
    "Compo10.04 design tolerance/optical/scoring",
    "future semantic content/part/sensitive-zone interpretation",
    "future canonical rule priority/relaxation policy"
  ],
  "ideas_refs": [
    "IDEA-01",
    "IDEA-02",
    "IDEA-03",
    "IDEA-04",
    "IDEA-05",
    "IDEA-06",
    "IDEA-07"
  ],
  "data_capture": [
    "baseline sourceRef/sourceMode/sourceOwnerRef",
    "selectorKind and selected lineIndex/lineRef",
    "baselineKind/baselineKindRef",
    "exact/author/fallback evidence mode",
    "fallback policyRef and confidence cap when used",
    "compatibility policyRef and cross-kind decision",
    "relationRef/measurementRef",
    "canonical participant/anchor refs",
    "coordinatePairRaw/signedDeltaRaw/absoluteOffsetRaw",
    "NumericalPolicy ref/effectiveEpsRaw/numericallyCoincident",
    "N_A/INVALID reasons",
    "semanticConstraintRefs presence without interpretation",
    "repair request refs",
    "human correction reason codes"
  ],
  "deferred_semantic_inputs": [
    "semanticObjectRef?",
    "semanticPartRef?",
    "semanticSensitiveZoneRef?",
    "semanticConstraintRefs[]",
    "intentRef?",
    "readingOrderRef?"
  ],
  "human_feedback_hooks": [
    "BASELINE_RELATION_WRONG",
    "WRONG_TEXT_LINE_SELECTED",
    "WRONG_BASELINE_KIND",
    "FALLBACK_BASELINE_UNACCEPTABLE",
    "OPTICAL_BASELINE_SHIFT_NEEDED",
    "SEMANTIC_CONFLICT",
    "INTENTIONAL_BASELINE_OFFSET",
    "OTHER"
  ],
  "conflict_priority_assumptions": [
    "module execution order is not priority",
    "exact numerical baseline coincidence does not override semantic/intent constraints",
    "fallback baseline evidence never overrides exact evidence",
    "10.02 never auto-moves text to satisfy a baseline relation",
    "10.02 never upgrades numerical EPS into visual tolerance",
    "unresolved geometry/semantic/intent conflict is diagnosed/deferred"
  ],
  "lab_hooks": [
    "LAB: human comparison of exact font baseline versus box-bottom proxy",
    "LAB: first-line versus last-line baseline preference in multi-line blocks",
    "LAB: alphabetic versus ideographic baseline compatibility examples",
    "LAB: small baseline offsets around future optical tolerance",
    "LAB: semantic/intentional cases where exact baseline alignment is rejected",
    "LAB: capture human reason codes for wrong-line, wrong-kind and optical corrections",
    "LAB: downstream text-to-graphic baseline experiment as EXPERIMENT only"
  ],
  "recompute_when": [
    "text layout source/version changes",
    "line baseline evidence changes",
    "selector changes",
    "extraction/fallback policy changes",
    "compatibility policy changes",
    "NumericalPolicy changes",
    "canvas/frame/unit changes"
  ],
  "tests": [
    "baseline source validation",
    "first/last/index selector",
    "no implicit primary line",
    "exact/author/fallback extraction",
    "fallback disallow/allow/confidence cap",
    "baseline distinct from bottom",
    "same-kind/cross-kind compatibility",
    "text-to-reference relation",
    "same canvas/frame/unit",
    "missing coordinate N_A",
    "order-invariant pair identity",
    "deterministic signed delta",
    "numerical EPS vs visual tolerance separation",
    "semantic/data/human/LAB hooks",
    "no score/global leakage/foreign mutation"
  ],
  "finality": "TEXT_BASELINE_EVIDENCE_AND_PAIRWISE_ALIGNMENT_MEASUREMENT_ONLY"
}
ARCHITECTURE CHECKPOINT · 10.02 OWNS ALIGNMENT-SPECIFIC TEXTBASELINEEVIDENCE NORMALIZATION/EXTRACTION AND PAIRWISE BASELINE MEASUREMENT ONLY. RAW SHAPING/FONT METRICS/LINE LAYOUT REMAIN UPSTREAM. TEXT_BASELINE != BOTTOM. EXACT / AUTHOR_EXPLICIT / FALLBACK EVIDENCE REMAIN DISTINCT. FALLBACK REQUIRES EXPLICIT POLICY, CONFIDENCE CAP AND NEVER BECOMES EXACT. FIRST / LAST / LINE_INDEX SELECTORS ARE EXPLICIT; NO HIDDEN PRIMARY LINE. BASELINE KIND IS OWNER-SUPPLIED, NOT INFERRED. CROSS-KIND TEXT BASELINES REQUIRE EXPLICIT COMPATIBILITY. TEXT↔REFERENCE IS ALLOWED ONLY WITH EXPLICIT BASELINE REFERENCE. PAIRWISE IDENTITY IS ORDER-INVARIANT. MISSING COORDINATE=N/A. NUMERICAL EPS != OPTICAL TOLERANCE. SHARED AXES → 10.03. TOLERANCE / OPTICAL / LOCAL SCORE → 10.04. SEMANTIC REFS REMAIN OPAQUE. MODULE ORDER != RULE PRIORITY. IDEA != CANON. EXPERIMENT != CANON. NO FOREIGN MUTATION. NO SCORE. N/A != 0. NO BEAUTYSCORE.
VISITS / ...