Baseline is not box bottom
10.02 normalizes owner-qualified text baseline evidence and measures pairwise baseline relations without re-owning shaping or typography.
line-layout baseline evidence
explicit authored baseline
visible proxy only when policy allows
TextLayoutBaselineSource
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
Multi-line text requires an explicit baseline selector.
Semantic baseline family
Baseline kind comes from the text-layout owner; 10.02 does not guess it from script or font.
Explicit proxy, never exact
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
}
Different baseline kinds need explicit permission
Cross-kind alignment is not silently treated as equivalent.
BaselineCompatibilityPolicy {
policyRef,
allowedCrossKindPairs[],
allowFallbackProxy,
provenance
}
Baseline pair offset
Pairwise identity and raw offset follow the canonical 10.00/10.01 ordering convention.
Descriptor only
The class records evidence semantics, not quality.
| Class | Meaning |
|---|---|
| SAME_KIND_TEXT_BASELINE | two non-fallback text baselines with same kind |
| EXPLICIT_CROSS_KIND_TEXT_BASELINE | different kinds explicitly allowed |
| TEXT_TO_REFERENCE_BASELINE | text baseline ↔ explicit BASELINE reference |
| FALLBACK_BASELINE_RELATION | at least one allowed fallback proxy |
Numerical EPS still isn't optical tolerance
10.02 consumes the numerical-coincidence convention from 10.01.
Text baseline ↔ explicit reference
A baseline may align to an explicit BASELINE reference, but generic grid topology remains upstream.
Typography and alignment remain separate
10.02 consumes text-layout evidence but does not become a shaping engine.
| Responsibility | Owner |
|---|---|
| font shaping / line layout / raw font metrics | upstream typography/text-layout owner |
| alignment root taxonomy | 10.00 |
| generic X/Y edge/center relations | 10.01 |
| baseline normalization + pair measurement | 10.02 |
| multi-subject shared axes | 10.03 |
| visual tolerance / optical / local score | 10.04 |
Exact/fallback provenance is data
Future calibration needs to know why a baseline existed and how it was selected, not only the final offset.
Capture the reason
Human corrections distinguish wrong line selection from optical offset or semantic conflict.
Coincidence is not preference
An exact baseline match can still be undesirable in context.
Baseline cases
The visual lab separates exact baseline evidence, multi-line selection, proxy fallback and reference alignment.
10.02 baseline regression
Tests cover exact/author/fallback evidence, line selectors, kind compatibility, reference alignment, order invariance and new data hooks.
DATA FOR LAYOUT ENGINE
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"
}