COMPO · 15.02 · DISTRIBUTION AND LOCAL DENSITY

Density is observed.
Desirability comes later.

15.02 строит распределение и density maps только из explicit candidate groups, owner-qualified point evidence и явных frame/grid/window policies. Нулевая плотность — валидное наблюдение, N_A — отсутствие сопоставимого evidence. Высокая плотность не становится автоматически noise, а низкая — «правильной разреженностью».

ModuleCompo 15.02
Pointsowner-qualified
Groupsexplicit
Densitydescriptor only
Metricsnone
NextSTOP

Explicit cohort + explicit space + explicit sampling policy

00 / contract
15.00 candidate set + owner-qualified point evidence + explicit distribution group policy + explicit density reference frame + explicit grid-density policy + explicit local-window policy → MicroDetailDistributionGroup[] → MicroDetailDensityMap[] → MicroDetailLocalDensityDescriptor[] → MicroDetailNearestNeighborDescriptor[] → MicroDetailDistributionDescriptor[] → MicroDetailDistributionSet NOT YET: labels / legends / technical noise → 15.03 density desirability / hierarchy scoring / generator → 15.04

Spatial descriptors, not hierarchy judgments

01 / ownership
ADAPTS

Point evidence

15.02 consumes owner-qualified anchor points without moving subjects or redefining geometry.

OWNS

Density maps

Explicit group/frame/grid/window policies produce numeric distribution descriptors.

NO SCORE

No desirability

owns_metrics=[]. Dense/sparse desirability and hierarchy damage wait for 15.04.

MicroDetailSpatialPointEvidence

02 / owner-qualified geometry adapter
MicroDetailSpatialPointEvidence {
  microDetailSpatialPointEvidenceRef,

  scopeRef,
  microDetailCandidateRef,
  subjectRef,

  pointMethodRef,
  coordinateFrameRef,

  x,
  y,

  evidenceSourceRef,
  evidenceSourceOwnerRef,

  confidence,
  provenance,
  snapshotRef,

  status,
  mutationAllowed: false
}
point evidence != placement preference != hierarchy rank != focal rank != microdetail eligibility 15.02: adapts point does not move subject does not choose "better" coordinates

Distribution cohorts are explicit

03 / grouping
ModeMeaning
ALL_CANDIDATESOne exact cohort containing the full 15.00 candidate set.
BY_ROLEOne cohort per explicitly selected role; multi-role candidates may belong to multiple cohorts.
BY_FORMOne cohort per explicitly selected form kind.
EXPLICIT_SUBJECT_SETOne explicitly declared subject cohort.
No implicit group.

Даже ALL_CANDIDATES должен быть выбран explicit policy. Group size и group order не являются score/priority.

MicroDetailDensityReferenceFrame

04 / exact density domain
MicroDetailDensityReferenceFrame {
  microDetailDensityReferenceFrameRef,

  scopeRef,
  coordinateFrameRef,
  frameOwnerRef,

  minX,
  maxX,
  minY,
  maxY,

  frameSourceRef,
  provenance,
  snapshotRef,

  status,
  mutationAllowed: false
}
NO AUTOMATIC: canvas frame viewport frame content bounds optical bounds frame != safe zone != hierarchy region != preferred composition area

Grid resolution is policy

05 / grid-density policy
MicroDetailGridDensityPolicy {
  microDetailGridDensityPolicyRef,

  columns: 1..256,
  rows: 1..256,

  valueMode:
    COUNT_PER_FRAME_AREA,

  outOfFramePolicy:
    N_A,

  boundaryAssignment:
    HALF_OPEN_LAST_CELL_CLOSED,

  policySourceRef,
  policySourceOwnerRef,
  provenance,

  status,
  mutationAllowed: false
}

Grid resolution — это analysis policy. Более мелкая сетка не означает более точную «истину композиции».

Grid cell density

06 / numeric observation
MicroDetailGridCellDensityDescriptor {
  microDetailGridCellDensityDescriptorRef,

  groupRef,
  frameRef,
  gridPolicyRef,

  rowIndex,
  columnIndex,
  cellBounds,

  candidateRefs[],
  candidateCount,
  cellArea,
  countPerFrameArea,

  status,
  reasonCode,
  mutationAllowed: false
}
countPerFrameArea = candidateCount / cellArea empty cell: candidateCount = 0 countPerFrameArea = 0 status = OK 0 != N_A

MicroDetailDensityMap

07 / row-major map
MicroDetailDensityMap {
  microDetailDensityMapRef,

  microDetailDistributionGroupRef,
  microDetailDensityReferenceFrameRef,
  microDetailGridDensityPolicyRef,

  cellDescriptorRefs[],

  candidateCount,
  assignedCandidateCount,

  status,
  reasonCode,
  mutationAllowed: false
}
Density map != attention heatmap.

Карта описывает spatial frequency конкретной группы под конкретной сеткой. Она не кодирует importance, hierarchy pressure или visual salience.

Local window is explicit

08 / local policy
MicroDetailLocalWindowDensityPolicy {
  microDetailLocalWindowDensityPolicyRef,

  halfWidth,
  halfHeight,

  includeSelf,

  edgePolicy:
    CLIP_TO_FRAME,

  valueMode:
    COUNT_PER_EFFECTIVE_AREA,

  policySourceRef,
  policySourceOwnerRef,
  provenance,

  status,
  mutationAllowed: false
}
No universal: neighborhood radius halfWidth halfHeight local density threshold

MicroDetailLocalDensityDescriptor

09 / clipped effective area
MicroDetailLocalDensityDescriptor {
  microDetailLocalDensityDescriptorRef,

  microDetailCandidateRef,
  microDetailDistributionGroupRef,
  microDetailDensityReferenceFrameRef,
  microDetailLocalWindowDensityPolicyRef,

  windowBounds,
  effectiveBounds,

  neighborCandidateRefs[],
  neighborCount,

  effectiveArea,
  countPerEffectiveArea,

  status,
  reasonCode,
  mutationAllowed: false
}
raw window: candidate-centered rectangle effective window: raw window ∩ density frame countPerEffectiveArea = neighborCount / effectiveArea high density != bad low density != good

Nearest neighbor is geometry only

10 / distance descriptor
MicroDetailNearestNeighborDescriptor {
  microDetailNearestNeighborDescriptorRef,

  microDetailCandidateRef,
  microDetailDistributionGroupRef,

  nearestCandidateRef,
  nearestDistance,

  distanceMethod:
    EUCLIDEAN_POINT_DISTANCE,

  coordinateFrameRef,

  status,
  reasonCode,
  mutationAllowed: false
}

Для группы из одного кандидата nearest neighbor = N_A. Это не «бесконечная разреженность» и не score.

Group distribution descriptor

11 / centroid + spread
MicroDetailDistributionDescriptor {
  microDetailDistributionDescriptorRef,

  microDetailDistributionGroupRef,
  microDetailDensityMapRef,

  localDensityDescriptorRefs[],
  nearestNeighborDescriptorRefs[],

  candidateCount,

  centroidX,
  centroidY,

  spreadX,
  spreadY,

  status,
  reasonCode,
  mutationAllowed: false
}
centroid != balance center != optical center spread != balance score != hierarchy safety candidateCount != quality

MicroDetailDistributionSet

12 / one explicit analysis configuration
MicroDetailDistributionSet {
  microDetailDistributionSetRef,

  scopeRef,
  microDetailCandidateSetRef,

  microDetailDistributionGroupPolicyRef,
  microDetailDensityReferenceFrameRef,
  microDetailGridDensityPolicyRef,
  microDetailLocalWindowDensityPolicyRef,

  distributionDescriptorRefs[],

  status,
  reasonCode,
  mutationAllowed: false
}

Set не владеет density desirability, target score, hierarchy score или global balance.

Attach, do not mutate 15.00 seeds

13 / immutable lineage
MicroDetailDescriptorDistributionAttachment {
  microDetailDescriptorDistributionAttachmentRef,

  microDetailDescriptorSeedRef,

  microDetailLocalDensityDescriptorRefs[],
  microDetailNearestNeighborDescriptorRefs[],
  microDetailDistributionDescriptorRefs[],

  status,
  mutationAllowed: false
}

MicroDetailSystemDistributionAttachment {
  microDetailSystemDistributionAttachmentRef,

  microDetailSystemSeedRef,
  microDetailDistributionSetRef,
  descriptorAttachmentRefs[],

  status,
  mutationAllowed: false
}

Zero density and N_A are different

14 / status semantics
CaseResult
Duplicate point evidence for candidateN_A conflict; confidence does not win
Missing required candidate pointN_A
Coordinate-frame mismatchN_A
Snapshot mismatchN_A
Point outside explicit frameN_A
Explicit empty groupOK empty group
Empty grid cellOK + density 0
Local window has zero neighborsOK + density 0
Single-candidate nearest neighborN_A

Density is policy-relative

15 / comparability
Comparable only under: same group policy same groupKey semantics same density frame same grid policy → map density same local window policy → local density same point method same coordinate frame compatible snapshot lineage Forbidden: cross-window local density as same metric cross-grid values as universal density role-group density → role priority cell density → importance nearest distance → spacing quality

Dense is not noisy by definition

16 / firewalls
Forbidden shortcuts

density→noise; high density→bad; low density→good; centroid→balance; nearest distance→spacing score; role density→role importance.

Preserved

Explicit groups, explicit frame, explicit policies, owner-qualified points, numeric zero distinct from N_A, no hidden weighting, no scoring.

Topic15 ownership chain

17 / integration
OwnerCanonical responsibility
15.00Microdetail eligibility, taxonomy, candidate set and root seeds.
15.01Size/contrast measurements and explicit role envelopes.
15.02Explicit spatial groups, density maps, local density and nearest-neighbor descriptors.
15.03Labels, legends and technical noise.
15.04Target scoring, hierarchy-protection evaluation, generator and final tests.
Compo4Visual mass remains separate.
Compo13 / 13.01Dominance/attention remain separate.
Compo18Generic hierarchy/subordination remains separate.

Correction routes to geometry/frame/policy owner

18 / non-mutating request
MicroDetailDistributionCorrectionRequest {
  microDetailDistributionCorrectionRequestRef,

  targetOwnerRef,
  reasonCode,

  subjectRef?,
  groupKey?,

  evidenceRefs[],
  suggestedAction,

  status,
  mutationAllowed: false
}

CANON → LAB → DATA → IDEAS

19 / mandatory hooks
IDEAS_REFS[]7 current R&D directions retained.
DATA_CAPTURE[]Group/frame/grid/local-policy lineage and density observations.
DEFERRED_SEMANTIC_INPUTS[]Noise and desirability remain downstream.
HUMAN_FEEDBACK_HOOKS[]Point/frame/policy and density-map correction reasons.
CONFLICT_PRIORITY_ASSUMPTIONS[]Group order and density magnitude do not become hidden priority.
LAB_HOOKS[]Human dense/sparse perception studies.

Visual laboratory hook

20 / same points, different explicit windows
SAME POINTS · DIFFERENT EXPLICIT LOCAL WINDOWS Policy A: smaller explicit window Policy B: larger explicit window Different numeric density does not imply different quality. The policy changed.

15.02 regression suite

21 / deterministic tests

Tests cover point lineage, duplicate conflicts, explicit grouping, multi-role membership, frame/grid validation, row-major cell assignment, zero-vs-N_A semantics, clipped local windows, nearest neighbor, empty groups, deterministic distribution sets and immutable attachments.

Tests not run yet.

DATA FOR LAYOUT ENGINE

22 / machine contract
{
  "module": "Compo 15.02",
  "name": "distribution_and_local_density",
  "version": "1.0-canonical",
  "canonical_main_title": "Distribution and local density",
  "topic": "15_МАЛЫЕ_ФОРМЫ_АКЦЕНТЫ_И_МИКРОДЕТАЛИ",
  "scope": "OWNER_QUALIFIED_MICRODETAIL_POSITION_ADAPTER_EXPLICIT_DISTRIBUTION_GROUPS_GRID_DENSITY_MAPS_LOCAL_WINDOW_DENSITY_AND_NONSCORING_SPATIAL_DISTRIBUTION_DESCRIPTORS_ONLY",
  "main_topic_contract": {
    "topic_title": "Малые формы, акценты и микродетали",
    "topic_goal": "Управляет микродеталями, technical marks и мелкими акцентами: их плотностью, контрастом, размером и вкладом без разрушения основной иерархии.",
    "expected_output": "MicroDetailDescriptor[], density maps, role envelopes",
    "planned_files": [
      "15.00 Microdetail taxonomy and roles",
      "15.01 Size/contrast envelopes",
      "15.02 Distribution and local density",
      "15.03 Labels, legends, technical noise",
      "15.04 Generator, scoring and tests"
    ]
  },
  "ownership": {
    "owner": "Compo15.02",
    "owns": [
      "MicroDetailSpatialPointEvidence adapter",
      "MicroDetailDistributionGroupMode taxonomy",
      "MicroDetailDistributionGroupPolicy",
      "MicroDetailDistributionGroup",
      "MicroDetailDensityReferenceFrame",
      "MicroDetailGridDensityPolicy",
      "MicroDetailGridCellDensityDescriptor",
      "MicroDetailDensityMap",
      "MicroDetailLocalWindowDensityPolicy",
      "MicroDetailLocalDensityDescriptor",
      "MicroDetailNearestNeighborDescriptor",
      "MicroDetailDistributionDescriptor",
      "MicroDetailDistributionSet",
      "MicroDetailDescriptorDistributionAttachment",
      "MicroDetailSystemDistributionAttachment",
      "same-frame/same-group/same-policy comparability contract",
      "identity/status/provenance rules for Topic15 distribution-density layer",
      "non-mutating correction request for spatial evidence / grouping / density policy"
    ],
    "does_not_own": [
      "microdetail eligibility / form / role taxonomy — Compo15.00",
      "MicroDetailCandidateSet / descriptor seeds / system seed — Compo15.00",
      "size / contrast measurements and role envelopes — Compo15.01",
      "subject geometry / layout positions — upstream geometry owners",
      "visual mass calculation — Compo4",
      "dominance / focal ranking — Compo13",
      "attention-factor scoring — Compo13.01",
      "secondary-mass support — Topic14",
      "generic hierarchy/subordination graph — Compo18",
      "labels / legends / technical-noise evaluation — Compo15.03",
      "semantic interpretation of labels/legends — semantic owner / Compo15.03 adapter",
      "density desirability / target scoring — Compo15.04",
      "hierarchy-damage evaluation — Compo15.04",
      "generator / repair-candidate search — Compo15.04",
      "global balance ownership",
      "global hierarchy priority",
      "foreign geometry mutation"
    ]
  },
  "consumes": [
    "valid Compo15.00 MicroDetailCandidateSet",
    "valid Compo15.00 MicroDetailDescriptorSeed[] / MicroDetailSystemSeed",
    "owner-qualified subject anchor/point evidence from geometry owners",
    "explicit density reference frame",
    "explicit distribution grouping policy",
    "explicit grid-density policy",
    "explicit local-window-density policy"
  ],
  "provides": [
    "MicroDetailDistributionGroup[]",
    "MicroDetailDensityMap[]",
    "MicroDetailGridCellDensityDescriptor[]",
    "MicroDetailLocalDensityDescriptor[]",
    "MicroDetailNearestNeighborDescriptor[]",
    "MicroDetailDistributionDescriptor[]",
    "MicroDetailDistributionSet",
    "descriptor/system distribution attachments",
    "Topic15.02 observation record"
  ],
  "owns_metrics": [],
  "metric_ownership_note": "15.02 owns numeric spatial/density descriptors but no MetricResult, no density-desirability score, no hierarchy-damage score and no independent numeric vote.",
  "spatial_point_evidence_schema": {
    "microDetailSpatialPointEvidenceRef": "stable identity",
    "scopeRef": "Topic15 scope",
    "microDetailCandidateRef": "exact 15.00 candidate",
    "subjectRef": "candidate subject",
    "pointMethodRef": "explicit method that supplies the anchor point",
    "coordinateFrameRef": "exact upstream coordinate frame",
    "x": "finite coordinate in source frame",
    "y": "finite coordinate in source frame",
    "evidenceSourceRef": "explicit source",
    "evidenceSourceOwnerRef": "geometry/position owner",
    "confidence": "finite [0,1] source confidence only",
    "provenance": "canonical provenance",
    "snapshotRef": "exact observation snapshot",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "firewall": "15.02 adapts the point; it does not move the subject, choose a better anchor automatically, or infer hierarchy from coordinates."
  },
  "distribution_group_mode_taxonomy": {
    "ALL_CANDIDATES": "One group containing all eligible candidates in the exact candidate set.",
    "BY_ROLE": "One group per explicitly selected declared role.",
    "BY_FORM": "One group per explicitly selected form kind.",
    "EXPLICIT_SUBJECT_SET": "One explicitly named subject set."
  },
  "distribution_group_policy_schema": {
    "microDetailDistributionGroupPolicyRef": "stable identity",
    "mode": "ALL_CANDIDATES|BY_ROLE|BY_FORM|EXPLICIT_SUBJECT_SET",
    "selectedRoleKinds": "required non-empty for BY_ROLE, otherwise empty",
    "selectedFormKinds": "required non-empty for BY_FORM, otherwise empty",
    "explicitSubjectRefs": "required non-empty for EXPLICIT_SUBJECT_SET, otherwise empty",
    "includeCandidateInMultipleGroups": "true for BY_ROLE multi-role semantics; false otherwise",
    "policySourceRef": "explicit source",
    "policySourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "default": "NONE — no implicit grouping policy",
    "firewall": "Grouping selects observation cohorts only. Group identity/order is not priority and group size is not a score."
  },
  "distribution_group_schema": {
    "microDetailDistributionGroupRef": "stable identity",
    "scopeRef": "scope",
    "microDetailCandidateSetRef": "exact candidate set",
    "microDetailDistributionGroupPolicyRef": "policy",
    "groupKey": "ALL|ROLE:<role>|FORM:<form>|EXPLICIT",
    "roleKind": "role or null",
    "formKind": "form or null",
    "subjectRefs": "canonical unique subject refs",
    "candidateRefs": "canonical unique candidate refs",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "A group may be empty under an explicit filter. Empty group is not density zero until a frame/policy calculation is performed."
  },
  "density_reference_frame_schema": {
    "microDetailDensityReferenceFrameRef": "stable identity",
    "scopeRef": "scope",
    "coordinateFrameRef": "must match spatial point evidence",
    "frameOwnerRef": "owner of the frame definition",
    "minX": "finite",
    "maxX": "finite > minX",
    "minY": "finite",
    "maxY": "finite > minY",
    "frameSourceRef": "explicit source",
    "provenance": "canonical provenance",
    "snapshotRef": "exact snapshot lineage",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "default": "NONE — no automatic canvas/viewport/content bounding frame",
    "firewall": "Frame defines the density domain only. It is not a safe zone, hierarchy region or preferred composition area."
  },
  "grid_density_policy_schema": {
    "microDetailGridDensityPolicyRef": "stable identity",
    "columns": "integer 1..256",
    "rows": "integer 1..256",
    "valueMode": "COUNT_PER_FRAME_AREA",
    "outOfFramePolicy": "N_A",
    "boundaryAssignment": "HALF_OPEN_LAST_CELL_CLOSED",
    "policySourceRef": "explicit source",
    "policySourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "default": "NONE — no universal grid resolution",
    "firewall": "Grid resolution is an analysis policy, not a composition law. Cell density values are descriptors, not penalties."
  },
  "grid_cell_density_descriptor_schema": {
    "microDetailGridCellDensityDescriptorRef": "stable identity",
    "microDetailDistributionGroupRef": "group",
    "microDetailDensityReferenceFrameRef": "frame",
    "microDetailGridDensityPolicyRef": "policy",
    "rowIndex": "0-based",
    "columnIndex": "0-based",
    "cellBounds": "exact rectangular bounds",
    "candidateRefs": "candidate refs assigned to the cell",
    "candidateCount": "integer >=0",
    "cellArea": "positive area in frame coordinate units",
    "countPerFrameArea": "candidateCount / cellArea",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "countPerFrameArea is a local observation density. Zero is a valid empty-cell value and is distinct from N_A."
  },
  "density_map_schema": {
    "microDetailDensityMapRef": "stable identity",
    "microDetailDistributionGroupRef": "group",
    "microDetailDensityReferenceFrameRef": "frame",
    "microDetailGridDensityPolicyRef": "policy",
    "cellDescriptorRefs": "rows*columns descriptors in canonical row-major serialization",
    "candidateCount": "group candidate count",
    "assignedCandidateCount": "must equal candidateCount for OK map",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Density map is a sampled descriptor of one explicit group/frame/policy. It is not a universal heatmap of visual importance."
  },
  "local_window_density_policy_schema": {
    "microDetailLocalWindowDensityPolicyRef": "stable identity",
    "halfWidth": "finite >0 in frame coordinate units",
    "halfHeight": "finite >0 in frame coordinate units",
    "includeSelf": "boolean explicit",
    "edgePolicy": "CLIP_TO_FRAME",
    "valueMode": "COUNT_PER_EFFECTIVE_AREA",
    "policySourceRef": "explicit source",
    "policySourceOwnerRef": "owner",
    "provenance": "canonical provenance",
    "status": "OK|INVALID",
    "mutationAllowed": false,
    "default": "NONE — no universal neighborhood size",
    "firewall": "Window size is an analysis policy, not a perceptual law or global density threshold."
  },
  "local_density_descriptor_schema": {
    "microDetailLocalDensityDescriptorRef": "stable identity",
    "microDetailCandidateRef": "candidate",
    "microDetailDistributionGroupRef": "group",
    "microDetailDensityReferenceFrameRef": "frame",
    "microDetailLocalWindowDensityPolicyRef": "policy",
    "windowBounds": "candidate-centered raw window",
    "effectiveBounds": "window clipped to frame",
    "neighborCandidateRefs": "refs counted under policy",
    "neighborCount": "integer >=0",
    "effectiveArea": "positive area",
    "countPerEffectiveArea": "neighborCount / effectiveArea",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Local density is numeric descriptor only. High density is not automatically bad; low density is not automatically good."
  },
  "nearest_neighbor_descriptor_schema": {
    "microDetailNearestNeighborDescriptorRef": "stable identity",
    "microDetailCandidateRef": "candidate",
    "microDetailDistributionGroupRef": "group",
    "nearestCandidateRef": "nearest other candidate or null",
    "nearestDistance": "finite >=0 or null",
    "distanceMethod": "EUCLIDEAN_POINT_DISTANCE",
    "coordinateFrameRef": "exact frame",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Nearest-neighbor distance is geometry descriptor only. It is not spacing quality, density score or hierarchy pressure."
  },
  "distribution_descriptor_schema": {
    "microDetailDistributionDescriptorRef": "stable identity",
    "microDetailDistributionGroupRef": "group",
    "microDetailDensityMapRef": "map",
    "localDensityDescriptorRefs": "one per group candidate",
    "nearestNeighborDescriptorRefs": "one per group candidate",
    "candidateCount": "group candidate count",
    "centroidX": "mean x or null for empty group",
    "centroidY": "mean y or null for empty group",
    "spreadX": "population standard deviation x or null for empty group",
    "spreadY": "population standard deviation y or null for empty group",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Centroid/spread/count/density are observations. They do not state whether the distribution is balanced, clustered appropriately or hierarchy-safe."
  },
  "distribution_set_schema": {
    "microDetailDistributionSetRef": "stable identity",
    "scopeRef": "scope",
    "microDetailCandidateSetRef": "15.00 candidate set",
    "microDetailDistributionGroupPolicyRef": "group policy",
    "microDetailDensityReferenceFrameRef": "frame",
    "microDetailGridDensityPolicyRef": "grid policy",
    "microDetailLocalWindowDensityPolicyRef": "local window policy",
    "distributionDescriptorRefs": "one per generated group",
    "status": "OK|N_A|INVALID",
    "reasonCode": "explicit",
    "mutationAllowed": false,
    "firewall": "Set owns no density desirability, no target score, no hierarchy score, no global balance judgment and no independent vote."
  },
  "descriptor_attachment_schema": {
    "microDetailDescriptorDistributionAttachmentRef": "stable identity",
    "microDetailDescriptorSeedRef": "exact 15.00 seed",
    "microDetailLocalDensityDescriptorRefs": "all group-local density descriptors involving the candidate",
    "microDetailNearestNeighborDescriptorRefs": "all group nearest-neighbor descriptors involving the candidate",
    "microDetailDistributionDescriptorRefs": "groups containing the candidate",
    "status": "OK",
    "mutationAllowed": false,
    "firewall": "Derived attachment never mutates distributionDensityAttachmentRef on the 15.00 descriptor seed."
  },
  "system_attachment_schema": {
    "microDetailSystemDistributionAttachmentRef": "stable identity",
    "microDetailSystemSeedRef": "exact 15.00 system seed",
    "microDetailDistributionSetRef": "15.02 set",
    "descriptorAttachmentRefs": "canonical attachments",
    "status": "OK",
    "mutationAllowed": false,
    "firewall": "Derived attachment never mutates distributionDensitySetAttachmentRef on the 15.00 system seed."
  },
  "status_policy": {
    "invalidSpatialEvidence": "INVALID",
    "duplicatePointEvidenceForCandidate": "N_A conflict; confidence does not choose a winner",
    "missingPointEvidenceForRequiredCandidate": "N_A",
    "coordinateFrameMismatch": "N_A",
    "snapshotMismatch": "N_A",
    "pointOutsideFrame": "N_A",
    "emptyExplicitGroup": "OK empty group",
    "gridMapEmptyGroup": "OK map with all zero-valued cells",
    "localDensityZeroNeighbors": "OK + numeric zero",
    "nearestNeighborSingleCandidateGroup": "N_A",
    "distributionEmptyGroup": "OK with null centroid/spread",
    "N_A_not_zero": true
  },
  "comparability_contract": {
    "requires": [
      "same MicroDetailDistributionGroupPolicyRef",
      "same groupKey semantics",
      "same MicroDetailDensityReferenceFrameRef",
      "same MicroDetailGridDensityPolicyRef for map values",
      "same MicroDetailLocalWindowDensityPolicyRef for local-density values",
      "same pointMethodRef",
      "same coordinateFrameRef",
      "compatible snapshot lineage"
    ],
    "forbids": [
      "comparing raw density values across different frame areas/policies as universal density",
      "comparing local-window density across different window sizes as the same metric",
      "treating role-group density as candidate priority",
      "treating cell density as visual importance",
      "treating nearest-neighbor distance as spacing quality",
      "using group serialization order as rule priority"
    ]
  },
  "critical_firewalls": [
    "15.02 consumes explicit Compo15.00 candidates only",
    "15.02 does not redefine microdetail eligibility",
    "position evidence != microdetail eligibility",
    "position evidence != hierarchy rank",
    "position evidence != focal rank",
    "coordinate frame must be explicit",
    "density reference frame must be explicit",
    "no automatic canvas density frame",
    "no automatic viewport density frame",
    "no automatic content-bounds density frame",
    "point method must be explicit",
    "point method != preferred placement",
    "density group policy must be explicit",
    "no implicit ALL_CANDIDATES group",
    "multi-role BY_ROLE candidate may belong to multiple groups",
    "multi-group membership != duplicate candidate identity",
    "group order != priority",
    "group size != score",
    "candidate count != density by itself",
    "empty group != N_A",
    "empty density cell = numeric 0, not N_A",
    "zero local neighbors = numeric 0, not N_A",
    "N_A != 0",
    "INVALID != 0",
    "grid resolution must be explicit",
    "no universal density grid",
    "no universal local-density window",
    "no universal microdetail density threshold",
    "grid cell density != density desirability",
    "local density != density desirability",
    "high local density != automatically bad",
    "low local density != automatically good",
    "high cell density != automatically noisy",
    "low cell density != automatically sparse enough",
    "nearest-neighbor distance != spacing quality",
    "nearest-neighbor distance != hierarchy pressure",
    "centroid != balance center",
    "distribution centroid != optical center",
    "spread != balance score",
    "spread != hierarchy safety",
    "density map != attention heatmap",
    "density map != visual importance map",
    "density map != hierarchy map",
    "role density != role priority",
    "technical-mark density != technical noise",
    "annotation density != label clutter",
    "decorative density != decoration quality",
    "repeating-unit density != rhythm quality",
    "density map does not use 15.01 size/contrast as implicit weights",
    "no implicit visual-mass weighting",
    "no implicit attention weighting",
    "no implicit role weighting",
    "no density desirability score in 15.02",
    "no hierarchy-damage score in 15.02",
    "no labels/legends/noise evaluation in 15.02",
    "no target profile scoring in 15.02",
    "no generator in 15.02",
    "15.02 owns no MetricResult",
    "15.02 owns no independent numeric vote",
    "microdetail role ownership remains Compo15.00",
    "size/contrast envelope ownership remains Compo15.01",
    "visual mass ownership remains Compo4",
    "dominance ownership remains Compo13",
    "attention-factor ownership remains Compo13.01",
    "secondary-mass support ownership remains Topic14",
    "generic hierarchy/subordination graph remains Compo18 territory",
    "descriptor attachment != seed mutation",
    "system attachment != seed mutation",
    "correction request != foreign mutation",
    "local != global",
    "geometry != interpretation",
    "descriptor != score",
    "heuristic != law",
    "one metric = one owner",
    "module execution order != rule priority",
    "no universal beautyScore",
    "IDEA != CANON",
    "EXPERIMENT != CANON"
  ],
  "identity_policy": {
    "microDetailSpatialPointEvidenceRef": "hash(scope, candidate, subject, point method, coordinate frame, x/y, source/owner, confidence, provenance, snapshot, status)",
    "microDetailDistributionGroupPolicyRef": "hash(mode, selected roles/forms/subjects, multiple-group flag, source/owner, provenance, status)",
    "microDetailDistributionGroupRef": "hash(scope, candidate set, policy, group key, role/form, canonical candidate/subject refs, status)",
    "microDetailDensityReferenceFrameRef": "hash(scope, coordinate frame, owner, bounds, source, provenance, snapshot, status)",
    "microDetailGridDensityPolicyRef": "hash(cols/rows, value mode, boundary/out-of-frame policies, source/owner, provenance, status)",
    "microDetailGridCellDensityDescriptorRef": "hash(group, frame, grid policy, row/col, bounds, candidate refs/count, area, density, status)",
    "microDetailDensityMapRef": "hash(group, frame, grid policy, row-major cell refs, candidate counts, status)",
    "microDetailLocalWindowDensityPolicyRef": "hash(halfWidth/halfHeight, includeSelf, edge/value policies, source/owner, provenance, status)",
    "microDetailLocalDensityDescriptorRef": "hash(candidate, group, frame, local policy, raw/effective bounds, neighbor refs/count, area, density, status)",
    "microDetailNearestNeighborDescriptorRef": "hash(candidate, group, nearest candidate, distance, method, frame, status)",
    "microDetailDistributionDescriptorRef": "hash(group, map, local refs, nearest refs, count, centroid/spread, status)",
    "microDetailDistributionSetRef": "hash(scope, candidate set, group/frame/grid/local policies, distribution refs, status)",
    "microDetailDescriptorDistributionAttachmentRef": "hash(descriptor seed, local/nearest/distribution refs)",
    "microDetailSystemDistributionAttachmentRef": "hash(system seed, distribution set, descriptor attachments)",
    "excluded_from_identity": [
      "display color",
      "heatmap color ramp",
      "UI rendering interpolation",
      "free-form comment"
    ]
  },
  "correction_request_schema": {
    "microDetailDistributionCorrectionRequestRef": "stable identity",
    "targetOwnerRef": "position owner / frame owner / grouping policy owner / density-policy owner",
    "reasonCode": "POINT_WRONG|POINT_METHOD_WRONG|COORDINATE_FRAME_WRONG|DENSITY_FRAME_WRONG|GROUP_POLICY_WRONG|ROLE_GROUP_WRONG|FORM_GROUP_WRONG|EXPLICIT_SUBJECT_SET_WRONG|GRID_RESOLUTION_WRONG|LOCAL_WINDOW_WRONG|DUPLICATE_POINT_CONFLICT",
    "subjectRef": "subject or null for policy/frame issue",
    "groupKey": "group or null",
    "evidenceRefs": "canonical refs",
    "suggestedAction": "non-mutating review request",
    "status": "OPEN|INVALID",
    "mutationAllowed": false
  },
  "deferred_downstream": {
    "15.03": [
      "labels and legends classification",
      "technical-mark overload / technical noise descriptors",
      "annotation clutter/noise interpretation",
      "semantic importance adapters for labels and legends"
    ],
    "15.04": [
      "explicit density desirability targets",
      "hierarchy-protection target profile",
      "component/composite MetricResult scoring",
      "generator / bounded repair candidates",
      "final Topic15 regression tests"
    ]
  },
  "IDEAS_REFS": [
    "IDEA-01 full human test after all 72 topics; compare explicit density descriptors with human dense/sparse judgments without prelabeling desirability",
    "IDEA-02 semantics needed before placement; label/legend/technical-noise interpretation remains deferred to 15.03",
    "IDEA-03 explicit rule priorities; group/policy/module order never becomes hidden priority",
    "IDEA-04 collect structured density-map/local-density data for future composition model",
    "IDEA-05 preserve reasons for human corrections",
    "IDEA-06 structured machine-readable layer for website",
    "IDEA-07 graphics-for-post-text research remains downstream/separate"
  ],
  "DATA_CAPTURE": [
    "sceneRef",
    "scopeRef",
    "snapshotRef",
    "microDetailCandidateSetRef",
    "microDetailCandidateRefs[]",
    "microDetailSpatialPointEvidenceRefs[]",
    "pointMethodRefByCandidate",
    "coordinateFrameRefByCandidate",
    "pointXYByCandidate",
    "pointOwnerByCandidate",
    "duplicatePointConflicts[]",
    "microDetailDistributionGroupPolicyRef",
    "distributionGroupMode",
    "selectedRoleKinds[]",
    "selectedFormKinds[]",
    "explicitSubjectRefs[]",
    "microDetailDistributionGroupRefs[]",
    "groupKeyByRef",
    "candidateRefsByGroup",
    "microDetailDensityReferenceFrameRef",
    "densityFrameBounds",
    "microDetailGridDensityPolicyRef",
    "gridRows",
    "gridColumns",
    "microDetailGridCellDensityDescriptorRefs[]",
    "cellCandidateCountByGroupCell",
    "cellDensityByGroupCell",
    "microDetailDensityMapRefs[]",
    "microDetailLocalWindowDensityPolicyRef",
    "localWindowHalfWidth",
    "localWindowHalfHeight",
    "localIncludeSelf",
    "microDetailLocalDensityDescriptorRefs[]",
    "localNeighborCountByCandidateGroup",
    "localDensityByCandidateGroup",
    "microDetailNearestNeighborDescriptorRefs[]",
    "nearestDistanceByCandidateGroup",
    "microDetailDistributionDescriptorRefs[]",
    "centroidByGroup",
    "spreadByGroup",
    "microDetailDistributionSetRef",
    "descriptorAttachmentRefs[]",
    "systemAttachmentRef",
    "humanReasonCodes[]",
    "futureNoiseDescriptorRefs[]",
    "futureMetricResultRefs[]"
  ],
  "DEFERRED_SEMANTIC_INPUTS": [
    "whether high or low density is desirable",
    "whether a dense technical-mark region should count as noise",
    "whether annotation clustering harms readability",
    "whether decorative clustering supports or hurts style",
    "whether repeating-unit density supports rhythm",
    "desired regional density targets",
    "hierarchy-damage tolerance",
    "global hierarchy priority",
    "final microdetail target profile"
  ],
  "HUMAN_FEEDBACK_HOOKS": [
    "POINT_WRONG",
    "POINT_METHOD_WRONG",
    "COORDINATE_FRAME_WRONG",
    "DENSITY_FRAME_WRONG",
    "FRAME_SHOULD_BE_LARGER",
    "FRAME_SHOULD_BE_SMALLER",
    "GROUP_POLICY_WRONG",
    "ROLE_GROUP_MISSING",
    "ROLE_GROUP_UNNECESSARY",
    "FORM_GROUP_MISSING",
    "EXPLICIT_SUBJECT_GROUP_WRONG",
    "GRID_TOO_COARSE",
    "GRID_TOO_FINE",
    "LOCAL_WINDOW_TOO_SMALL",
    "LOCAL_WINDOW_TOO_LARGE",
    "INCLUDE_SELF_SHOULD_CHANGE",
    "DENSITY_VALUE_LOOKS_WRONG",
    "EDGE_CLIPPING_LOOKS_WRONG",
    "NEAREST_NEIGHBOR_LOOKS_WRONG",
    "DENSE_BUT_ACCEPTABLE",
    "SPARSE_BUT_UNACCEPTABLE",
    "DENSITY_MAP_NOT_IMPORTANCE",
    "TECHNICAL_DENSITY_SHOULD_BE_NOISE_LATER",
    "REPEATING_DENSITY_SHOULD_BE_RHYTHM_LATER",
    "DUPLICATE_POINT_IS_REAL_CONFLICT",
    "DUPLICATE_POINT_SHOULD_RESOLVE"
  ],
  "CONFLICT_PRIORITY_ASSUMPTIONS": [
    "module execution order is not priority",
    "group serialization order is not role priority",
    "grid-cell order is not visual priority",
    "point confidence is not density priority",
    "role membership count is not density weight",
    "size/contrast evidence is not implicit density weight",
    "high density and low density have no desirability ordering in 15.02",
    "future reviewed global conflict-priority owner remains authoritative"
  ],
  "LAB_HOOKS": [
    "human study: dense/sparse perception under fixed explicit window policy",
    "human study: sensitivity to grid resolution without presenting density as quality",
    "compare local window density with nearest-neighbor distance",
    "collect edge cases where clipping changes local density substantially",
    "collect multi-role candidates included in multiple role groups",
    "collect cases with dense technical marks that are still functionally acceptable",
    "collect cases with sparse microdetails that still damage hierarchy",
    "compare group-specific and all-candidate density maps",
    "study stability across explicit coordinate/reference frames"
  ],
  "observation_record": {
    "moduleRef": "Compo15.02",
    "metricResults": [],
    "futureMicroDetailEvaluationRefs": []
  },
  "stop_condition": "STOP after 15.02. Do not create 15.03 in this module."
}
VISITS / ...