COMPO · 6.04 · TESTS / ADAPTATION HOOKS

Tests &
adaptation
hooks.

Финальный functional layer темы 6: versioned format snapshots, semantic change classification, proved common-scale detection, stateful hysteresis, deterministic dirty-graph routing, recompute hooks и mutation-free layout adaptation requests. 6.04 координирует owners, но не поглощает их метрики и не делает reflow самостоятельно.

ModuleCompo 6.04
Scopeadaptation hooks / tests
Owns metricsnone
Statehysteresis + dirty graph
Topic6 · FORMAT
NextTOPIC 6 AUDIT

Последний функциональный файл Topic 6

00 / module api

6.04 превращает изменения format context в детерминированные invalidation/recompute/adaptation events.

INPUT

Versioned snapshots 6.00–6.03.

OUTPUT

ChangeSet → hooks → recompute/adaptation requests.

OWNS METRICS

None. Operational descriptors only.

RECOMPUTE ≠ REFLOW. Пересчитать зависимую метрику и изменить layout — разные операции с разными owners.

CanvasFormatSnapshot

01 / snapshots

Stateful adaptation возможна только между явно версионированными состояниями. Snapshot также несёт coordinate-frame и normalization-domain semantics, чтобы их изменение не исчезало из diff.

CanvasFormatSnapshot {
  snapshotRef,
  canvasRef,
  canvasVersion,

  extent,
  aspectRatioWH,
  logAspectRatio,

  exactClass,
  behaviorClass,
  behaviorPolicyRef,

  physicalMetadataVersion?,
  viewingContextRef?,
  normalizationContextRef,

  confidence,
  provenance
}
SAME CANVAS. Обычный diff сравнивает snapshots одного `canvasRef`. Миграция между разными документами требует отдельного explicit adapter.

Что именно изменилось

02 / change set

ChangeSet хранит semantic diff, а не только список поменявшихся чисел. Производный behavior transition не считается второй независимой family поверх вызвавшего его aspect change.

old snapshot ↓ compare new snapshot ↓ CanvasFormatChangeSet { changedFields[], changeClass, isPureCommonScale, commonScaleFactor?, aspectChanged, behaviorTransition?, confidence }

Pure common scale нужно доказать

03 / common scale proof

Совпадающий aspect ratio ещё не доказывает common scale.

kW = newWidth / oldWidth kH = newHeight / oldHeight PURE_COMMON_SCALE iff: kW > 0 kH > 0 kW ≈ kH same unit same coordinate-frame semantics same domain/crop topology and: logAspectRatio unchanged
CLASS STABILITY IS NOT PROOF. Два landscape canvas могут иметь разный aspect ratio и поэтому не являются common-scale versions друг друга.

Operational stable behavior

04 / hysteresis

6.01 остаётся stateless canonical classifier. 6.04 может поверх него стабилизировать transition state.

Enter square-like

if previous != SQUARE_LIKE: enter when |logAspect| <= τ_enter

Exit square-like

if previous == SQUARE_LIKE: stay while |logAspect| <= τ_exit where: τ_exit >= τ_enter
OPERATIONAL ONLY. `stableBehaviorState` помогает resize/reflow logic, но не переписывает `FormatClassResult.behaviorClass` 6.01.

ChangeClass

05 / change classes

Класс нужен для routing, не для эстетической оценки.

ClassMeaning
INITIALprevious snapshot отсутствует
NO_CHANGEwatched semantic fields совпадают
PURE_COMMON_SCALEдоказан единый scale factor
ASPECT_CHANGEaspect изменился, stable behavior state не сменился
BEHAVIOR_TRANSITIONstable behavior state сменился
PHYSICAL_CONTEXT_CHANGEизменился physical metadata context
VIEWING_CONTEXT_CHANGEизменился viewing context
NORMALIZATION_DOMAIN_CHANGEизменился normalization domain/unit semantics
COMBINED_CHANGEнесколько независимых families одновременно

Recompute routing

06 / dirty graph

6.04 знает зависимости, но не перехватывает ownership целевых метрик.

6.00 extent/domain change → 6.01 behavior → 6.03 normalization → 6.04 state raster/physical binding → 6.02 6.03 normalization context → 4.01 ShortN² evidence → 5.02 ShortN clearance → future normalized modules canvas domain boundary → Topic5 full-canvas domain consumers

Invariant ≠ stale-proof

07 / common-scale consequences

Pure common scale позволяет оптимизировать pipeline, но не игнорировать raw evidence и provenance.

Raw geometry

length × k area × k² inverse-length × 1/k must recompute if raw value stored

Normalized geometry

ShortN invariant UV invariant but: contextRef/version may change cache lineage must stay valid
NO BLIND CACHE SKIP. Инвариантное normalized число не означает, что весь downstream result можно оставить со старым provenance.

AdaptationHookInvocation

08 / hooks

Hooks исполняются в фиксированных фазах.

PHASE ORDER: 1. INVALIDATE 2. RECOMPUTE 3. REQUEST_ADAPTATION 4. AFTER_RECOMPUTE
AdaptationHookInvocation {
  hookId,
  trigger,
  phase,
  targetOwner,
  payloadRefs[],
  mutationAllowed: false
}
DETERMINISTIC ORDER. При одинаковом ChangeSet и policy порядок hooks должен быть воспроизводим.

LayoutAdaptationRequest

09 / adaptation request

Когда format behavior действительно изменился, 6.04 может попросить layout owner построить новые candidates.

LayoutAdaptationRequest {
  requestId,
  canvasRef,

  reason:
    BEHAVIOR_TRANSITION |
    ASPECT_CHANGE_WITHIN_CLASS |
    PHYSICAL_CONTEXT_CHANGE |
    VIEWING_CONTEXT_CHANGE |
    CUSTOM,

  fromSnapshotRef,
  toSnapshotRef,

  constraints[],
  candidateOwner,
  mutationAllowed: false
}
REQUEST != MUTATION. 6.04 не выбирает новую колонность, margins, font size, grid, crop или object transform.

Что автоматически эмитить

10 / adaptation policy

Автоматизм существует только как explicit integration policy.

FormatAdaptationPolicy {
  policyRef,

  emitLayoutRequestOnBehaviorTransition,
  emitLayoutRequestOnAspectChangeWithinClass,
  emitLayoutRequestOnPhysicalContextChange,
  emitLayoutRequestOnViewingContextChange,

  recomputeRawGeometryOnPureCommonScale,
  recomputeNormalizedGeometryOnPureCommonScale,

  hookOrder[],
  provenance
}
POLICY, NOT LAW. Некоторые systems могут reflow только при class transition, другие — при любом aspect change.

Что обязан не сломать Topic 6

11 / Topic6 regression

6.04 содержит consolidated regression barriers всей темы, но не становится owner предыдущих metrics.

ModuleBarrier
6.00explicit extent; canvas ≠ content bounds
6.01exact class ≠ policy behavior; no hidden near-square tolerance
6.02PPI ≠ DPI; no default viewing distance
6.03ShortN isotropic ≠ UV metric geometry
6.04stateful diff/hysteresis/hooks; adaptation request ≠ mutation

Последняя граница темы

12 / ownership firewall

Adaptation layer координирует owners, а не поглощает их.

Topic7

safe / bleed / margins.

Topic8

grids / grid occupancy.

Future layout

actual responsive candidate generation.

Global

balance / hierarchy / eye-flow.

Visual Lab

13 / visual lab

Разные format changes требуют разных recompute/adaptation paths.

A · PURE COMMON SCALE same aspect · k=1.5 raw geometry dirty ShortN invariant after recompute B · BEHAVIOR TRANSITION SQUARE_LIKE → LANDSCAPE_LIKE emit adaptation request do not mutate layout here C · HOOK ORDER 1 INVALIDATE 2 RECOMPUTE 3 REQUEST ADAPT 4 AFTER RECOMPUTE hysteresis stabilizes operational state, not canonical 6.01 class recompute request != score · adaptation request != foreign mutation

Topic 6 adaptation regression

14 / deterministic tests

Проверяем common-scale proof, change classification, hysteresis, hook ordering, dependency routing, N/A semantics и ownership barriers.

Tests not run yet.

DATA FOR LAYOUT ENGINE

15 / machine contract

Machine-readable 6.04 contract.

{
  "module": "Compo 6.04",
  "name": "tests_and_adaptation_hooks",
  "version": "1.1-corrective",
  "canonical_main_title": "Tests and adaptation hooks",
  "topic": "06_ФОРМАТ_ПОСТЕРА_И_СООТНОШЕНИЕ_СТОРОН",
  "scope": "STATEFUL_FORMAT_CHANGE_CLASSIFICATION_RECOMPUTE_ROUTING_ADAPTATION_HOOKS_HYSTERESIS_AND_TOPIC6_REGRESSION",
  "consumes": [
    "Compo6.00.CanvasDescriptor snapshots / change evidence",
    "Compo6.01.FormatClassResult",
    "Compo6.02.PhysicalCanvasMetadata?",
    "Compo6.03.CanvasNormalizationContext",
    "FormatAdaptationPolicy",
    "FormatBehaviorHysteresisPolicy?",
    "downstream dependency registry"
  ],
  "provides": [
    "CanvasFormatSnapshot",
    "CanvasFormatChangeSet",
    "FormatChangeClass",
    "StableBehaviorState",
    "FormatAdaptationPolicy",
    "FormatBehaviorHysteresisPolicy",
    "FormatAdaptationPlan",
    "AdaptationHookInvocation[]",
    "RecomputeRequest[]",
    "LayoutAdaptationRequest[]",
    "Topic6RegressionCase[]",
    "Topic6RegressionSuite",
    "adaptationHooksRef for CanvasDescriptor"
  ],
  "owns_metrics": [],
  "descriptors_only": [
    "canvas.adaptation.changeClass",
    "canvas.adaptation.changedFields[]",
    "canvas.adaptation.isPureCommonScale",
    "canvas.adaptation.aspectChanged",
    "canvas.adaptation.behaviorTransition",
    "canvas.adaptation.physicalContextChanged",
    "canvas.adaptation.viewingContextChanged",
    "canvas.adaptation.normalizationContextChanged",
    "canvas.adaptation.stableBehaviorState",
    "canvas.adaptation.recomputeTargets[]",
    "canvas.adaptation.layoutRequestReasons[]",
    "canvas.adaptation.status"
  ],
  "canvas_format_snapshot_schema": {
    "snapshotRef": "stable versioned ref",
    "canvasRef": "same canvas identity",
    "canvasVersion": "monotonic/version token from owner",
    "extent": {
      "width": "6.00",
      "height": "6.00",
      "unit": "6.00"
    },
    "aspectRatioWH": "6.00",
    "logAspectRatio": "6.00",
    "exactClass": "6.01",
    "behaviorClass": "6.01 or N_A",
    "behaviorPolicyRef": "6.01 policy ref or null",
    "physicalMetadataVersion": "6.02 ref/version or null",
    "viewingContextRef": "6.02 ref or null",
    "normalizationContextRef": "6.03 ref",
    "confidence": "0..1",
    "provenance": "object",
    "coordinateFrame": "6.00 coordinate-frame semantics; required for change classification",
    "normalizationDomainTopologyRef": "semantic domain/crop topology ref; required for pure common-scale proof"
  },
  "format_change_set_schema": {
    "changeRef": "string",
    "canvasRef": "string",
    "fromSnapshotRef": "optional for initial state",
    "toSnapshotRef": "required",
    "changedFields": "explicit semantic field paths[]",
    "changeClass": "INITIAL|NO_CHANGE|PURE_COMMON_SCALE|ASPECT_CHANGE|BEHAVIOR_TRANSITION|BEHAVIOR_POLICY_CHANGE|PHYSICAL_CONTEXT_CHANGE|VIEWING_CONTEXT_CHANGE|NORMALIZATION_CONTEXT_CHANGE|NORMALIZATION_DOMAIN_CHANGE|COORDINATE_FRAME_CHANGE|COMBINED_CHANGE",
    "isPureCommonScale": "boolean",
    "commonScaleFactor": "finite >0 only when proved",
    "aspectChanged": "boolean",
    "behaviorTransition": "optional {from,to}",
    "confidence": "0..1",
    "provenance": "DERIVED"
  },
  "pure_common_scale_proof": {
    "requirements": [
      "same canvas identity",
      "same extent unit",
      "same coordinate-frame semantics",
      "at least one extent dimension actually changes; k=1 with only metadata/context changes is not a PURE_COMMON_SCALE change event",
      "positive finite k = newWidth/oldWidth",
      "newHeight/oldHeight equals same k within declared numerical tolerance",
      "aspect ratio/log aspect unchanged within numerical tolerance",
      "normalization domain topology/crop unchanged"
    ],
    "important": "same behavior class alone is not proof of common scaling",
    "result": "raw dimensional geometry changes by k^p; ShortN/UV representations may remain invariant where their owner semantics permit"
  },
  "hysteresis_policy_schema": {
    "policyRef": "string",
    "enabled": "boolean",
    "enterSquareLikeLogTolerance": "finite >=0",
    "exitSquareLikeLogTolerance": "finite >= enterSquareLikeLogTolerance",
    "requiredRelation": "exit >= enter",
    "stateDomain": "SQUARE_LIKE|PORTRAIT_LIKE|LANDSCAPE_LIKE|N_A",
    "purpose": "stabilize operational behavior state across sequential resizes",
    "important": "does not rewrite Compo6.01 canonical stateless behaviorClass",
    "provenance": "STYLE_PRESET|EMPIRICAL|INITIAL_HEURISTIC"
  },
  "stable_behavior_state_semantics": {
    "input": "previous StableBehaviorState + current 6.01 logAspectRatio/behavior evidence + explicit hysteresis policy",
    "inside_from_non_square": "enter SQUARE_LIKE only when |logAspect| <= enter threshold",
    "remain_square_like": "stay SQUARE_LIKE while |logAspect| <= exit threshold",
    "leave_square_like": "when |logAspect| > exit threshold, select PORTRAIT_LIKE or LANDSCAPE_LIKE by sign",
    "non_square_sign_flip": "PORTRAIT_LIKE↔LANDSCAPE_LIKE transition follows current sign unless square-like entry threshold is satisfied",
    "disabled": "stable state equals current 6.01 behaviorClass",
    "missing_policy": "no operational hysteresis state mutation; use current canonical class or N_A according consumer policy"
  },
  "format_adaptation_policy_schema": {
    "policyRef": "string",
    "emitLayoutRequestOnBehaviorTransition": "boolean",
    "emitLayoutRequestOnAspectChangeWithinClass": "boolean",
    "emitLayoutRequestOnPhysicalContextChange": "boolean",
    "emitLayoutRequestOnViewingContextChange": "boolean",
    "recomputeRawGeometryOnPureCommonScale": "boolean",
    "recomputeNormalizedGeometryOnPureCommonScale": "boolean",
    "hookOrder": "optional ordered exact hook ids or prefixes used only as a deterministic tie-break inside a fixed canonical phase order",
    "provenance": "STYLE_PRESET|IMPLEMENTATION_HEURISTIC|EMPIRICAL"
  },
  "adaptation_hook_schema": {
    "hookId": "string",
    "trigger": "CANVAS_EXTENT_CHANGED|FORMAT_BEHAVIOR_STATE_CHANGED|PHYSICAL_METADATA_CHANGED|VIEWING_CONTEXT_CHANGED|NORMALIZATION_CONTEXT_CHANGED|TOPIC6_CONTEXT_CHANGED",
    "phase": "INVALIDATE|RECOMPUTE|REQUEST_ADAPTATION|AFTER_RECOMPUTE",
    "targetOwner": "owner-qualified module/subsystem",
    "payloadRefs": "evidence refs[]",
    "mutationAllowed": "false for all canonical 6.04 hooks",
    "deterministicOrder": "fixed phase order INVALIDATE→RECOMPUTE→REQUEST_ADAPTATION→AFTER_RECOMPUTE; within a phase, explicit policy hookOrder then lexical fallback"
  },
  "recompute_request_schema": {
    "requestId": "string",
    "reason": "string enum/qualified reason",
    "targetOwner": "module owner",
    "targetEvidenceRefs": "refs[]",
    "dependencyKind": "RAW_GEOMETRY|NORMALIZED_GEOMETRY|FORMAT_BEHAVIOR|PHYSICAL_CONTEXT|VIEWING_CONTEXT|SPACE_DOMAIN|CUSTOM",
    "priority": "HARD_INVALIDATION|RECOMPUTE|DIAGNOSTIC",
    "mutationAllowed": false,
    "provenance": "DERIVED"
  },
  "layout_adaptation_request_schema": {
    "requestId": "string",
    "canvasRef": "string",
    "reason": "BEHAVIOR_TRANSITION|ASPECT_CHANGE_WITHIN_CLASS|PHYSICAL_CONTEXT_CHANGE|VIEWING_CONTEXT_CHANGE|CUSTOM",
    "fromSnapshotRef": "string",
    "toSnapshotRef": "string",
    "constraints": "preserved hard constraints[]",
    "candidateOwner": "future layout solver / relevant owner",
    "mutationAllowed": false,
    "important": "6.04 requests adaptation; it does not choose object positions/scales/typography/grid itself"
  },
  "dependency_registry": {
    "6.00_change": [
      "6.01 format behavior",
      "6.03 normalization context",
      "6.04 adaptation state"
    ],
    "6.00_raster_extent_or_physical_binding_change": [
      "6.02 physical/PPI metadata"
    ],
    "6.01_behavior_change": [
      "6.04 stable behavior/adaptation request"
    ],
    "6.02_physical_change": [
      "6.04 physical-context hooks",
      "future physical/readability consumers"
    ],
    "6.02_viewing_change": [
      "6.04 viewing-context hooks",
      "future angular/readability consumers"
    ],
    "6.03_context_change": [
      "Compo4.01 ShortN² evidence",
      "Compo5.02 ShortN clearance evidence",
      "future normalized-geometry consumers"
    ],
    "canvas_domain_boundary_change": [
      "Compo5.00/5.01 full-canvas space domain consumers"
    ],
    "INITIAL": [
      "6.01 format behavior initialization",
      "6.02 physical/viewing context initialization when present",
      "6.03 normalization context initialization",
      "Compo4.01 / Compo5.02 normalized-evidence initialization",
      "Compo5.00/5.01 full-canvas domain initialization"
    ]
  },
  "common_scale_recompute_semantics": {
    "raw_geometry": "raw lengths/areas and raw-space evidence may need recompute because they scale with k^p",
    "normalized_geometry": "ShortN/UV values are mathematically invariant under proved common scale, but cached results may still require provenance/contextRef refresh",
    "4.01": "raw silhouette/alpha areas change with k²; normalized ShortN² may remain invariant after recompute",
    "5.02": "raw clearance changes with k; ShortN clearance may remain invariant after recompute",
    "6.01": "behavior class remains invariant under common scale",
    "warning": "invariance is not permission to skip all recomputation when downstream evidence stores raw values or versioned provenance"
  },
  "change_classification_policy": {
    "INITIAL": "no previous snapshot; full subscribed context initialization/recompute is emitted",
    "NO_CHANGE": "no watched semantic or versioned context field changed",
    "PURE_COMMON_SCALE": "proved same positive scale factor on both axes and no independent semantic context change",
    "BEHAVIOR_TRANSITION": "effective/stable behavior state changes due geometry or behavior-policy change; derived aspect+transition is one format-change family, not automatically COMBINED",
    "ASPECT_CHANGE": "aspect/log-aspect changes without stable behavior transition",
    "BEHAVIOR_POLICY_CHANGE": "behavior policy ref changed without an effective stable-state transition",
    "PHYSICAL_CONTEXT_CHANGE": "physical metadata version changed alone",
    "VIEWING_CONTEXT_CHANGE": "viewing context changed alone",
    "NORMALIZATION_CONTEXT_CHANGE": "normalization context ref/version changed alone without domain topology change",
    "NORMALIZATION_DOMAIN_CHANGE": "normalization domain/crop/unit semantics changed alone",
    "COORDINATE_FRAME_CHANGE": "coordinate-frame semantics changed alone",
    "COMBINED_CHANGE": "two or more independent root change families apply"
  },
  "metric_policy": {
    "adaptation_change_classes": "descriptors only",
    "hysteresis_state": "operational state only",
    "recompute_requests": "dependency-routing objects, not scores",
    "layout_adaptation_requests": "requests, not mutations",
    "direct_scoring": "FORBIDDEN in 6.04",
    "more_recompute_requests_is_better": "FORBIDDEN",
    "fewer_transitions_is_better": "FORBIDDEN",
    "stable_square_like_is_better": "FORBIDDEN"
  },
  "regression_scope": {
    "covers": [
      "Compo6.00",
      "Compo6.01",
      "Compo6.02",
      "Compo6.03",
      "Compo6.04"
    ],
    "required_barriers": [
      "6.00 explicit extent/aspect ratio ownership",
      "6.01 stateless behavior class with explicit near-square policy",
      "6.02 PPI != DPI and explicit viewing distance",
      "6.03 ShortN isotropic metric space != UV placement space",
      "6.03 shortSidePx only for PX normalization domains",
      "pure common scale proof requires same positive factor on width and height",
      "common-scale invariance does not erase raw recompute/provenance requirements",
      "6.04 hysteresis does not overwrite 6.01 canonical behavior class",
      "layout adaptation request != foreign mutation",
      "Topic7 safe/bleed and Topic8 grid remain external",
      "no global balance/hierarchy/eye-flow leakage"
    ]
  },
  "hard_constraints": [
    "one metric = one owner",
    "6.04 owns no design-quality metric; adaptation outputs are descriptors/requests",
    "6.04 consumes 6.00–6.03 evidence and must not recompute their owned canonical metrics under new aliases",
    "format change classification compares versioned snapshots of the same canvas identity unless explicitly declared as migration",
    "pure common scale must be proved from both axes with one positive factor; unchanged aspect class alone is insufficient",
    "stateful hysteresis requires explicit policy and may not rewrite the canonical 6.01 behaviorClass",
    "hysteresis exit tolerance must be >= enter tolerance",
    "disabled hysteresis makes operational stable state follow current 6.01 behavior class",
    "recompute request is not a correction score and not a foreign mutation",
    "layout adaptation request is not permission for 6.04 to move/scale/crop objects, alter typography, margins, safe zones or grids",
    "hook execution order must be deterministic",
    "hard invalidation precedes recompute; recompute precedes adaptation request; after-recompute hooks run last",
    "common-scale invariance of normalized values does not imply raw evidence or provenance can be silently left stale",
    "normalization context version changes must propagate to 4.01/5.02 normalized evidence dependencies",
    "full-canvas domain boundary changes must propagate to Topic5 domain consumers",
    "PPI/DPI semantics remain owned by 6.02",
    "ShortN/UV semantics remain owned by 6.03",
    "safe/bleed/margins remain Topic7",
    "grid occupancy remains Topic8",
    "global balance/hierarchy/eye-flow remain future owners",
    "N/A != 0",
    "no beautyScore",
    "coordinate-frame changes must be visible in semantic diff and cannot collapse to NO_CHANGE",
    "a derived behavior transition caused by an aspect change is one format-change family; it must classify as BEHAVIOR_TRANSITION unless another independent context family also changes",
    "INITIAL snapshot must emit initialization/recompute requests for subscribed canonical downstream contexts rather than only lifecycle hooks",
    "normalizationContextRef-only refresh is an explicit NORMALIZATION_CONTEXT_CHANGE, not an unexplained COMBINED_CHANGE",
    "hookOrder may only break ties inside the fixed canonical phase order and cannot move adaptation before recompute",
    "PURE_COMMON_SCALE as a change class requires an actual extent change; k=1 cannot mask a normalization/context-only change"
  ],
  "initial_heuristics": {
    "common_scale_relative_tolerance": {
      "value": 1e-09,
      "provenance": "IMPLEMENTATION_HEURISTIC"
    },
    "reference_hysteresis_policy": {
      "value": {
        "enterSquareLikeLogTolerance": 0.04,
        "exitSquareLikeLogTolerance": 0.06
      },
      "provenance": "STYLE_PRESET"
    }
  },
  "correction_policy": {
    "foreign_layout_mutation": "FORBIDDEN",
    "invalid_snapshot": "route to relevant 6.00–6.03 owner",
    "behavior_policy_issue": "route to Compo6.01",
    "physical_context_issue": "route to Compo6.02",
    "normalization_issue": "route to Compo6.03",
    "missing_dependency_registry": "request integration/runtime owner configuration",
    "adaptation_needed": "emit LayoutAdaptationRequest to future solver/owner"
  },
  "deferred_inputs": [
    "future concrete layout solver consuming LayoutAdaptationRequest",
    "Topic7 safe/bleed adaptation",
    "Topic8 grid adaptation",
    "future typography/image/layout responsive adaptation",
    "future global balance/hierarchy/eye-flow"
  ],
  "recompute_when": [
    "any 6.00–6.03 snapshot/version changes",
    "hysteresis policy changes",
    "adaptation policy changes",
    "dependency registry changes",
    "downstream owner subscribes/unsubscribes from hooks"
  ],
  "finality": "TOPIC6_ADAPTATION_HOOKS_STATEFUL_TRANSITIONS_AND_REGRESSION_ONLY"
}
ARCHITECTURE CHECKPOINT · 6.04 OWNS STATEFUL FORMAT CHANGE DESCRIPTORS, HYSTERESIS OPERATIONAL STATE, RECOMPUTE ROUTING, ADAPTATION HOOKS AND TOPIC6 REGRESSION — NO DESIGN-QUALITY METRICS. PURE COMMON SCALE MUST BE PROVED FROM BOTH AXES; NORMALIZED INVARIANCE DOES NOT PERMIT STALE RAW EVIDENCE OR PROVENANCE. HYSTERESIS DOES NOT REWRITE 6.01 CANONICAL BEHAVIOR CLASS. RECOMPUTE REQUEST != REFLOW; LAYOUT ADAPTATION REQUEST != FOREIGN MUTATION. TOPIC7 SAFE/BLEED, TOPIC8 GRIDS AND GLOBAL BALANCE/HIERARCHY/EYE-FLOW REMAIN EXTERNAL. NO BEAUTYSCORE.
VISITS / ...