Alignment starts with references, not preferences
10.00 defines the common relation language used by 10.01–10.04. It does not yet decide whether an alignment is good.
Upstream identity only.
Owner-qualified evidence.
Descriptor, not score.
AlignmentSubjectRef
Subject identity remains owned upstream; alignment only references it.
AlignmentSubjectRef {
subjectRef,
subjectOwner,
subjectKind,
geometryEvidenceRef?,
canvasRef,
coordinateFrame,
sourceUnit
}Anchor families
Anchor evidence is explicit and owner-qualified. A baseline is not guessed from a bounding-box bottom.
GEOMETRIC_EDGE
left/right/top/bottom style anchors — measured later in 10.01.
GEOMETRIC_CENTER
centerX/centerY anchors — measured later in 10.01.
TEXT_BASELINE
baseline evidence — owned by 10.02 / text owner integration.
GRID_REFERENCE
explicit Topic8/9 guide/grid evidence by reference only.
Subject + anchor
Participant is the atomic relation endpoint.
AlignmentParticipant {
participantRef,
subjectRef,
anchorRef,
semanticRoleRef?,
semanticConstraintRefs[]?
}
Pairwise and shared-axis
10.00 reserves family ownership without implementing child measurements.
| Family | Arity | Owner |
|---|---|---|
| PAIRWISE_ANCHOR_ALIGNMENT | exactly 2 | 10.01 / 10.02 |
| MULTI_SUBJECT_SHARED_AXIS | 2+ | 10.03 |
Axes are not interchangeable
X, Y and text baseline remain distinct coordinate families.
Symmetric relations are order-invariant
The same participant pair must not create two relation identities merely because input order changed.
Topic 10 boundaries
Taxonomy is separated from measurement, baseline logic, shared axes and scoring.
| Module | Ownership |
|---|---|
| 10.00 | taxonomy, root relation schema, participant/anchor contracts, identity |
| 10.01 | left/right/center/top/bottom pairwise offsets |
| 10.02 | baseline and text alignment |
| 10.03 | multi-object shared axes |
| 10.04 | tolerance, optical hooks, local score, corrections/tests |
Module order != rule priority
A geometrically exact alignment can later conflict with semantic or intentional constraints. 10.00 records the channels; it does not invent the winner.
Cross-cutting hooks active
This is the first canonical module built under project instruction v2.0.
| Layer | 10.00 action |
|---|---|
| IDEA-02 semantic objects | opaque semantic refs only |
| IDEA-03 priorities | no hidden precedence |
| IDEA-04 model data | serialize relation observations |
| IDEA-05 human reasons | reason-code hooks |
| IDEA-06 data infra | machine JSON complete |
| IDEA-07 text-to-graphic | LAB hook only |
Explainable corrections
Human correction data is not a canon mutation, but the schema is reserved now.
Alignment is not automatically good
10.00 owns no numeric metric.
Taxonomy counterexamples
The visual lab separates relation existence, semantics and preference.
10.00 taxonomy regression
Tests cover order-invariant identity, axis compatibility, opaque semantic hooks, new cross-cutting data fields and ownership barriers.
DATA FOR LAYOUT ENGINE
Machine-readable 10.00 contract including IDEAS/LAB/DATA fields.
{
"module": "Compo 10.00",
"name": "alignment_taxonomy",
"version": "1.0-canonical",
"canonical_main_title": "Alignment taxonomy",
"topic": "10_БАЗОВЫЕ_ЛИНИИ_И_ВЫРАВНИВАНИЕ",
"scope": "ALIGNMENT_RELATION_ROOT_TAXONOMY_PARTICIPANT_ANCHOR_CONTRACTS_AND_OWNERSHIP",
"review_basis": {
"public_MAIN": "Topic10 canonical title/output and 10.00–10.04 plan verified",
"public_Core_0.00": "not relied upon when unavailable; no Core contents invented",
"previous_module": "Compo9.04 v1.1 explicit variant/scoring closing layer",
"related_owners_reviewed": [
"Compo8.02 GridLine/GridNode topology ownership",
"Compo9.00 ModularGrid root/row geometry",
"Compo9.01 atomic Cell geometry/addressing",
"Compo9.04 local ModularGrid scoring boundary"
],
"cross_cutting_instruction": "COMPO project instruction v2.0",
"ideas_register": "COMPO_IDEAS entries 01–07 reviewed"
},
"consumes": [
"owner-qualified subject identity refs",
"owner-qualified anchor evidence refs",
"coordinate frame / source unit / canvas lineage",
"optional grid geometry refs from Topic8/9 by reference only",
"optional opaque semanticConstraintRefs[] as DEFERRED evidence"
],
"provides": [
"AlignmentSubjectRef",
"AlignmentAnchorEvidence",
"AlignmentParticipant",
"AlignmentRelation",
"AlignmentRelationFamily",
"AlignmentAxisFamily",
"AlignmentRelationOwnershipMap",
"alignment relation identity helpers for 10.01–10.04"
],
"owns_metrics": [],
"descriptors_only": [
"alignment.relation.family",
"alignment.relation.axisFamily",
"alignment.relation.participantCount",
"alignment.anchor.family",
"alignment.anchor.coordinateAxis",
"alignment.relation.status"
],
"alignment_subject_ref_schema": {
"subjectRef": "canonical upstream object/text/grid/content identity",
"subjectOwner": "canonical owner module/service",
"subjectKind": "OBJECT|TEXT|GRID|CELL|REGION|GUIDE|OTHER",
"geometryEvidenceRef": "optional exact geometry evidence ref",
"canvasRef": "required when relation is geometric",
"coordinateFrame": "required when relation is geometric",
"sourceUnit": "required when relation is geometric"
},
"anchor_evidence_schema": {
"anchorRef": "stable evidence ref",
"subjectRef": "subject identity",
"anchorFamily": "GEOMETRIC_EDGE|GEOMETRIC_CENTER|TEXT_BASELINE|GRID_REFERENCE",
"anchorKind": "owner-qualified enum/code",
"coordinateAxis": "X|Y|BASELINE",
"coordinateRaw": "optional numeric coordinate; may remain N_A at taxonomy stage",
"geometryEvidenceRef": "exact upstream evidence",
"sourceOwnerRef": "canonical evidence owner",
"canvasRef": "same geometric canvas lineage",
"coordinateFrame": "same coordinate frame",
"sourceUnit": "same exact raw unit",
"confidence": "0..1",
"provenance": "DERIVED|STANDARD|EMPIRICAL|INITIAL_HEURISTIC|STYLE_PRESET"
},
"participant_schema": {
"participantRef": "derived stable ref from subjectRef+anchorRef",
"subjectRef": "exact subject",
"anchorRef": "exact anchor evidence",
"semanticRoleRef": "optional opaque external role ref",
"semanticConstraintRefs": "optional opaque refs; no interpretation in 10.00"
},
"relation_families": {
"PAIRWISE_ANCHOR_ALIGNMENT": {
"owner": "Compo10.01 / Compo10.02 depending anchor family",
"arity": "exactly 2 distinct participants",
"symmetry": "SYMMETRIC",
"examples": "edge/center/baseline pairwise relation"
},
"MULTI_SUBJECT_SHARED_AXIS": {
"owner": "Compo10.03",
"arity": "2+ distinct participants",
"symmetry": "SET_LIKE",
"examples": "common left edge / common center / common baseline axis"
}
},
"axis_families": {
"INLINE_X": "geometric X-coordinate alignment family",
"BLOCK_Y": "geometric Y-coordinate alignment family",
"TEXT_BASELINE": "text baseline relation family",
"REFERENCE_AXIS": "explicit owner-provided guide/grid/reference axis"
},
"alignment_relation_schema": {
"relationRef": "stable relation identity",
"relationFamily": "PAIRWISE_ANCHOR_ALIGNMENT|MULTI_SUBJECT_SHARED_AXIS",
"axisFamily": "INLINE_X|BLOCK_Y|TEXT_BASELINE|REFERENCE_AXIS",
"participants": "canonicalized participant refs",
"sourceEvidenceRefs": "exact anchor evidence refs",
"offsetRaw": "N_A in 10.00 root; owned by child measuring module",
"toleranceRef": "deferred to 10.04",
"semanticConstraintRefs": "opaque optional refs",
"status": "SCHEMA_READY|N_A|INVALID",
"confidence": "0..1",
"provenance": "DERIVED",
"mutationAllowed": false
},
"identity_policy": {
"PAIRWISE_ANCHOR_ALIGNMENT": "participant pair sorted by canonical participantRef because relation is symmetric",
"MULTI_SUBJECT_SHARED_AXIS": "set-like participant refs sorted and unique",
"order_invariance": "input order must not change identity for current symmetric/set-like alignment families",
"directional_future": "would require an explicit new relation subtype; never inferred"
},
"axis_compatibility": {
"INLINE_X": [
"X"
],
"BLOCK_Y": [
"Y"
],
"TEXT_BASELINE": [
"BASELINE"
],
"REFERENCE_AXIS": [
"X",
"Y",
"BASELINE"
],
"mixed_axis_without_adapter": "INVALID"
},
"topic10_ownership_map": {
"10.00": "root taxonomy + participant/anchor contracts + identity/ownership",
"10.01": "left/right/center/top/bottom pairwise geometric relations and offsets",
"10.02": "text baseline evidence and baseline alignment relations",
"10.03": "multi-object shared axes",
"10.04": "tolerance, optical hooks, local alignment score, corrections/tests"
},
"metric_policy": {
"direct_scoring": "FORBIDDEN in 10.00",
"more_alignment_is_better": "FORBIDDEN",
"zero_offset_is_always_better": "FORBIDDEN",
"beautyScore": "FORBIDDEN"
},
"hard_constraints": [
"10.00 owns AlignmentRelation root schema, alignment taxonomy, participant/anchor reference contracts, relation-family ownership map and canonical symmetric identity rules.",
"10.00 does not own concrete left/right/center/top/bottom offset measurement; Compo10.01 owns those pairwise geometric relations.",
"10.00 does not own text baseline extraction or baseline relation measurement; Compo10.02 owns them.",
"10.00 does not own multi-object shared-axis construction; Compo10.03 owns it.",
"10.00 does not own tolerance, optical corrections, local alignment score or final alignment acceptance; Compo10.04 owns them.",
"Alignment consumes geometry/reference anchors from their canonical owners and never re-owns source geometry.",
"AlignmentSubjectRef identifies the subject only; it does not copy or reinterpret the subject's geometry.",
"AlignmentAnchorEvidence must be owner-qualified and evidence-qualified.",
"Baseline anchor evidence is accepted only when supplied by the canonical text/baseline owner; 10.00 does not synthesize baselines from bounding boxes.",
"Grid anchor evidence may reference Topic8/9 geometry but must not re-own grid topology or occupancy.",
"Alignment relation semantics are relational and symmetric unless a later relation subtype explicitly declares directional semantics.",
"For symmetric pairwise alignment, participant input order must not change relation identity.",
"Duplicate participants in one pairwise relation are INVALID.",
"A pairwise alignment relation requires exactly two distinct participants.",
"A shared-axis relation family is reserved for 10.03 and requires at least two distinct participants there; 10.00 defines taxonomy only.",
"Anchor axis compatibility is explicit: X-coordinate anchors cannot be silently compared to Y-coordinate anchors.",
"TEXT_BASELINE is a distinct baseline axis family and must not be silently converted to a generic bottom edge.",
"Alignment taxonomy distinguishes GEOMETRIC_EDGE, GEOMETRIC_CENTER, TEXT_BASELINE and GRID_REFERENCE anchor families.",
"Baseline relation semantics are not inferred from typographic visual bounds.",
"AlignmentRelation is a descriptor/evidence container; existence of an alignment relation is not a quality score.",
"More alignment is not universally better.",
"Perfect zero offset is not universally better without an explicit target/tolerance profile.",
"Intentional misalignment/grid-break remains a valid future/contextual condition and is not automatically an error.",
"10.00 has no numeric metric owner.",
"10.00 does not create placement candidates.",
"10.00 does not mutate object positions, grid geometry, text geometry or content.",
"Correction/repair recommendations are owner-qualified requests and mutationAllowed=false.",
"Semantic constraints are deferred opaque inputs; 10.00 must not infer face/object-part semantics.",
"A semantic hard constraint may later invalidate an otherwise geometric alignment, but 10.00 does not invent that priority today.",
"Module execution order is not rule priority.",
"Alignment evidence and semantic evidence remain separate channels until a canonical context/priority owner combines them.",
"IDEA references are R&D links, not provenance classes and not owners.",
"LAB results do not mutate this canonical taxonomy automatically.",
"All significant alignment observations and relation decisions must be serializable for future DATA/human calibration.",
"N/A != 0.",
"No beautyScore."
],
"hard_rules": [
"10.00 owns AlignmentRelation root schema, alignment taxonomy, participant/anchor reference contracts, relation-family ownership map and canonical symmetric identity rules.",
"10.00 does not own concrete left/right/center/top/bottom offset measurement; Compo10.01 owns those pairwise geometric relations.",
"10.00 does not own text baseline extraction or baseline relation measurement; Compo10.02 owns them.",
"10.00 does not own multi-object shared-axis construction; Compo10.03 owns it.",
"10.00 does not own tolerance, optical corrections, local alignment score or final alignment acceptance; Compo10.04 owns them.",
"Alignment consumes geometry/reference anchors from their canonical owners and never re-owns source geometry.",
"AlignmentSubjectRef identifies the subject only; it does not copy or reinterpret the subject's geometry.",
"AlignmentAnchorEvidence must be owner-qualified and evidence-qualified.",
"Baseline anchor evidence is accepted only when supplied by the canonical text/baseline owner; 10.00 does not synthesize baselines from bounding boxes.",
"Grid anchor evidence may reference Topic8/9 geometry but must not re-own grid topology or occupancy.",
"Alignment relation semantics are relational and symmetric unless a later relation subtype explicitly declares directional semantics.",
"For symmetric pairwise alignment, participant input order must not change relation identity.",
"Duplicate participants in one pairwise relation are INVALID.",
"A pairwise alignment relation requires exactly two distinct participants.",
"A shared-axis relation family is reserved for 10.03 and requires at least two distinct participants there; 10.00 defines taxonomy only.",
"Anchor axis compatibility is explicit: X-coordinate anchors cannot be silently compared to Y-coordinate anchors.",
"TEXT_BASELINE is a distinct baseline axis family and must not be silently converted to a generic bottom edge.",
"Alignment taxonomy distinguishes GEOMETRIC_EDGE, GEOMETRIC_CENTER, TEXT_BASELINE and GRID_REFERENCE anchor families.",
"Baseline relation semantics are not inferred from typographic visual bounds.",
"AlignmentRelation is a descriptor/evidence container; existence of an alignment relation is not a quality score.",
"More alignment is not universally better.",
"Perfect zero offset is not universally better without an explicit target/tolerance profile.",
"Intentional misalignment/grid-break remains a valid future/contextual condition and is not automatically an error.",
"10.00 has no numeric metric owner.",
"10.00 does not create placement candidates.",
"10.00 does not mutate object positions, grid geometry, text geometry or content.",
"Correction/repair recommendations are owner-qualified requests and mutationAllowed=false.",
"Semantic constraints are deferred opaque inputs; 10.00 must not infer face/object-part semantics.",
"A semantic hard constraint may later invalidate an otherwise geometric alignment, but 10.00 does not invent that priority today.",
"Module execution order is not rule priority.",
"Alignment evidence and semantic evidence remain separate channels until a canonical context/priority owner combines them.",
"IDEA references are R&D links, not provenance classes and not owners.",
"LAB results do not mutate this canonical taxonomy automatically.",
"All significant alignment observations and relation decisions must be serializable for future DATA/human calibration.",
"N/A != 0.",
"No beautyScore."
],
"soft_constraints": [],
"preferences": [],
"overrides_allowed_by": [
"new explicit upstream anchor evidence creates new relation lineage",
"10.04 may interpret measured alignment relative to explicit tolerance/optical profiles",
"future semantic/context owner may combine opaque semantic constraints without changing 10.00 ownership"
],
"initial_heuristics": {},
"style_preset_values": [],
"candidate_generation": {
"alignment_candidates": "NONE in 10.00",
"reason": "taxonomy/schema module only; measurement/candidates are deferred to child modules"
},
"correction_policy": {
"foreign_mutation": "FORBIDDEN",
"invalid_anchor_evidence": "route to sourceOwnerRef",
"axis_mismatch": "return INVALID; no silent projection",
"missing_anchor_coordinate": "return N_A where relation measurement requires it",
"semantic_conflict": "defer/report through semanticConstraintRefs; do not invent priority",
"optical_adjustment": "route to Compo10.04",
"intentional_grid_break": "do not auto-correct; future/context owner decides"
},
"deferred_inputs": [
"Compo10.01 concrete geometric relation offsets",
"Compo10.02 baseline extraction/relation contracts",
"Compo10.03 shared-axis aggregation",
"Compo10.04 tolerance/optical/scoring",
"future semantic content/part/sensitive-zone evidence",
"future canonical priority/relaxation policy"
],
"ideas_refs": [
"IDEA-01",
"IDEA-02",
"IDEA-03",
"IDEA-04",
"IDEA-05",
"IDEA-06",
"IDEA-07"
],
"data_capture": [
"subjectRef and anchorRef lineage",
"relationFamily and axisFamily",
"participant set and canonical relationRef",
"sourceEvidenceRefs",
"N_A/INVALID reasons",
"future measured offset/tolerance refs when child modules provide them",
"semanticConstraintRefs presence without interpretation",
"repair/correction request refs",
"human feedback reason codes when available"
],
"deferred_semantic_inputs": [
"semanticObjectRef?",
"semanticPartRef?",
"semanticSensitiveZoneRef?",
"semanticConstraintRefs[]",
"intentRef?"
],
"human_feedback_hooks": [
"ALIGNMENT_RELATION_WRONG",
"WRONG_ANCHOR_SELECTED",
"OPTICAL_OFFSET_NEEDED",
"SEMANTIC_CONFLICT",
"INTENTIONAL_MISALIGNMENT",
"OTHER"
],
"conflict_priority_assumptions": [
"module execution order is not priority",
"10.00 never overrides semantic hard constraints",
"10.00 never overrides intentional grid-break intent",
"geometry evidence and semantic evidence remain separate channels",
"unresolved conflict is diagnosed/deferred rather than silently relaxed"
],
"lab_hooks": [
"LAB: compare human judgments for edge-vs-center anchor taxonomy",
"LAB: semantic-sensitive alignment counterexamples without changing CANON",
"LAB: intentional misalignment examples to verify descriptor != score",
"LAB: collect human reason codes for wrong-anchor vs optical-offset corrections",
"LAB: use alignment relations in text-to-graphic prototype as EXPERIMENT only"
],
"recompute_when": [
"subject identity/geometry evidence changes",
"anchor evidence ref or coordinate lineage changes",
"canvas/unit/frame changes",
"semanticConstraintRefs version changes only if downstream context evaluation consumes them"
],
"tests": [
"taxonomy enum validation",
"owner-qualified subject/anchor refs",
"pairwise symmetric identity order invariance",
"duplicate participant rejection",
"axis compatibility",
"baseline distinct from bottom edge",
"grid reference does not re-own grid topology",
"semantic refs remain opaque",
"module order not priority",
"data/human/LAB hooks serializable",
"no score/global leakage/foreign mutation"
],
"finality": "ALIGNMENT_ROOT_TAXONOMY_AND_REFERENCE_CONTRACTS_ONLY"
}