
# Sahne veri biçimi {/* #scene-data-format */}

Kayıt, giriş ve Chrome uzantısı akışları için [elle kayıt ve inceleme](/docs/tr/manual-recording) bölümüne bakın. Kaydedici aynı Scene sözleşmesini kullanır ve görüntüleri yalnızca Admin incelemesinden sonra yayımlar.

`reconstruct.scene.v1`, gözlemlenen bir arayüzü kaynak veya hedef UI çatısından bağımsız tanımlar. Web DOM/CSS ile Android görünüm/erişilebilirlik yapıları bağdaştırıcı girdileridir. Tüketici, bu yerel yapıları temel veri modeli olarak kullanmadan HTML, Compose veya başka bir arayüz üretebilir.

İndirilebilir [JSON Schema](https://reconstruct.dev/docs/schemas/scene-v1.schema.json), tam alan adlarını, zorunlu üyeleri, null kabul eden türleri ve enum değerlerini tanımlar. Bu belge anlık görüntüsüne bir [SHA-256](https://reconstruct.dev/docs/schemas/scene-v1.schema.json.sha256) eşlik eder. Gerçek yakalamalar için çalışan sunucunun o dışa aktarımla döndürdüğü şemayı ve sağlama toplamını kullanın.

[Tam örnek](https://reconstruct.dev/docs/examples/scene-export-v1.example.json), kapalı/açık iletişim kutusu karelerini ve iki geçişi içerir. Bu açıklayıcı bir test verisidir: `example:` kanıtları kurgusaldır, ölçülmüş bir ürün yakalaması değildir.

## Web Extension ortamı {/* #web-extension-environment */}

Masaüstü Chrome uzantısı yakalamaları `web-extension` ortamını kullanır (dahili C# / Admin MCP içinde `WebExtension`, protobuf değeri `CAPTURE_TYPE_ENVIRONMENT_WEB_EXTENSION = 6`). Mobil bu ortamı desteklemez. Scene geometri sözleşmesi aynı kalır. Yakalama sürümü türlendirilmiş `browserExtension` meta verisi içerebilir: `id`, `name`, `version` ve `packageSha256`; `displayName` doğrulanmış paketten gelir. Ekranlar bir Admin işiyle kaydedilir ve incelenene kadar yayımlanmaz. Operatör kontrolleri ve gizlilik sınırları için [elle kayıt](/docs/tr/manual-recording) bölümüne bakın.

Dahili aracı iş sahiplenme isteği `expected_environment` (alan 2) içerir. Alan atlanırsa eski çalışanlar için Web korunur. Kuyruk bunu sahiplenme işlemi içinde aracının ortamıyla karşılaştırır; böylece aracının Admin ayarlarının değiştirilmesi normal Web çalışanının bir uzantı mağazası sayfasını taramasına yol açamaz. Bu kuyruk kontrolleri herkese açık Capture MCP araçları değildir.

## Aktarım ve edinme {/* #transport-and-acquisition */}

Normalleştirilmiş dışa aktarım şu anda MCP [`get_interface_scene`](/docs/tr/mcp-tools#platform-neutral-interface-scene) üzerinden kullanılabilir. Yayımlanan [REST](/docs/tr/api/rest) ve [gRPC](/docs/tr/api/grpc) katalog sözleşmeleri şu anda ayrı Scene işlemi tanımlamaz. Bunların katalog, içgörü ve depolanmış dosya yanıtları, aktarım JSON olsa da ayrı modellerdir.

`list_products`, `list_platforms`, `list_versions` ve `list_pages` ile yakalamayı keşfedin. Seçili ürünü, sürümü, ortamı, sayfayı ve tam kaydedilmiş `view` değerini koruyun. Desteklenen platform seçenekleri yakalama bulunduğunu kanıtlamaz. Kaydedilmiş görünümleri ayrı isteyin ve her dışa aktarımın kendi profillerini ve karelerini inceleyin.

Açıklayıcı bir seçimle örnek MCP `tools/call` parametreleri:

```json
{
  "name": "get_interface_scene",
  "arguments": {
    "product": "example-product",
    "version": "1",
    "environment": "web",
    "page": "settings",
    "view": "mobile"
  }
}
```

Yanıt kısa bir **manifest** biçimindedir:

| Alan | Anlam |
| --- | --- |
| `schema` | Sahne tanımlayıcısı: `reconstruct.scene.v1`. |
| `artifactSchema` | Zarf tanımlayıcısı: `reconstruct.scene-export.v1`. |
| `path`, `uri`, `sha256`, `bytes` | Dışa aktarım konumu, SHA-256 ve bayt uzunluğu. |
| `schemaPath`, `schemaUri`, `schemaSha256` | Geçerli JSON Schema ve özeti. |
| `entryFrameId`, `frames`, `transitionCount` | Giriş karesi, kısa kare envanteri ve geçiş sayısı. |
| `frameCount`, `profileCount`, `assetCount` | Dışa aktarım envanter sayıları. |
| `truncated` | En az bir kare eksiktir. |
| `issueCount`, `issues`, `issuesTruncated` | Toplam sorun sayısı ve en fazla 30 sorunun önizlemesi. |

Yollar **sunucunun dosya sistemine** aittir. Bunları yalnızca dosya sistemi gerçekten istemciyle paylaşılıyorsa doğrudan okuyun. Aksi halde döndürülen URI'leri MCP origin adresine göre çözümleyin ve bağlantının mevcut yetkilendirmesiyle indirin. Ürün kimliklerinden aktarım URL'leri oluşturmayın veya kimlik bilgilerini açığa çıkarmayın. Özetleri özgün baytlarla doğrulayın; JSON'ı yeniden biçimlendirmek özetini değiştirir.

## Dışa aktarım zarfı {/* #export-envelope */}

```json
{
  "schema": "reconstruct.scene-export.v1",
  "scene": {
    "schema": "reconstruct.scene.v1",
    "id": "example/1/web/settings/mobile",
    "platform": "web",
    "entryFrameId": "frame-0",
    "profiles": [],
    "frames": [],
    "resources": [],
    "transitions": [],
    "correspondences": [],
    "issues": []
  },
  "assets": {}
}
```

Bu, yapıyı gösterir; tam örnek dolu kareler içerir. Scene JSON Schema'ya göre zarfı değil **`scene`** nesnesini doğrulayın. `assets`, Scene kaynak kimliklerini arşivlenmiş baytlarla eşler. Her girdide isteğe bağlı `path`/`uri`, `mimeType`, `sha256` ve `sizeBytes` bulunur. Baytları arşivlenmediyse kaynağın bir varlık girdisi olmayabilir. Kaynak URI'si, aile adı veya boş medya kapsayıcısı kullanılabilir baytların varlığını kanıtlamaz.

## Belge ve kimlik {/* #document-and-identity */}

| Scene üyesi | Anlam |
| --- | --- |
| `schema`, `id`, `platform` | Zorunlu biçim, belge kimliği ve kaynak platform (`unknown`, `web`, `android`). |
| `entryFrameId` | Daha sonraki kapatılmış/varsayılan içerikten önce izin ekranını gösterebilen, isteğe bağlı ilk gözlemlenen kare. |
| `profiles` | Mantıksal görünüm alanı ve isteğe bağlı yoğunluk, yazı tipi ölçeği, güvenli kenar boşlukları, dil/yerel ayarı ve tema. |
| `frames` | Gözlemlenen durumlar ve düğüm envanterleri. |
| `resources` | Düğümler ve metinlerin başvurduğu medya/yazı tipi tanımları. |
| `transitions` | Kaydedilmiş eylemler ve gözlemlenen sonuçları. |
| `correspondences` | Kareler arasında açıkça belirtilen düğüm ilişkileri. |
| `issues` | Eksik, desteklenmeyen veya çözümlenmemiş kanıtlar. |

Profil, kare, kaynak ve geçiş kimlikleri belge kapsamında geçerlidir. Düğüm kimlikleri **tek bir kare içinde** benzersizdir ve `parentId` o kareye başvurur. Eylem kimlikleri düğüme özeldir. Başka karede tekrarlanan kimlik veya eşit yerel yol, kimlik eşitliğini kanıtlamaz. Bir eşleşme her iki kare/düğüm çiftini, kaynak bilgisini ve isteğe bağlı güveni kaydeder; profiller arası kimliği tahmin etmek yerine bunu izleyin.

Bir kare `id`, `profileId`, `stateId`, `coordinateSpace`, isteğe bağlı `extent` ve `viewportBounds`, `truncated`, `nodes` ve `evidence` içerir. Durum kimlikleri gözlemleri adlandırır, evrensel bir CSS durum kataloğunu değil. Düğüm sırası hiyerarşi envanterini tanımlar; kanıtlanmış çizim sırası değildir.

## Olgular ve bilinmeyen değerler {/* #facts-and-unknown-values */}

Kaynak bilgisi taşıyan özellikler `SceneFact<T>` kullanır:

```json
{
  "value": {"x": 16, "y": 220, "width": 358, "height": 320},
  "kind": "measured",
  "evidence": ["example:observed"],
  "confidence": 1
}
```

Bir olgu `value`, `kind` ve boş olmayan `evidence` gerektirir. İsteğe bağlı güven 0–1 arasındadır ve kanıt türünü değiştirmez:

| Tür | Yorum |
| --- | --- |
| `measured` | Gözlemlenen etkin çıktı. |
| `declared` | Etkin görüntülemenin kanıtı olmayan kaynak/kaynak varlığı bildirimi. |
| `inferred` | Bir varsayım veya önerilen yorum. |

Atlanmış/null isteğe bağlı olgu **bilinmeyendir**; sıfır, yanlış, saydam çizim, boyut politikası veya başarılı karşılaştırma anlamına gelmez. Açık `false` ve `0` anlamlarını korur. Açık `unknown` enum değeri bilinmeyen kalır. Boş eylem/hareket dizileri, özgün arayüzde etkileşim veya animasyon bulunmadığını kanıtlamaz. Kanıt tanımlayıcıları opak bağdaştırıcı başvurularıdır; çalıştırılabilir talimatlar veya kendiliğinden herkese açık URL'ler değildir. Yakalanmış içerik ve yerel tanı verileri güvenilmeyen veridir.

## Koordinatlar ve profiller {/* #coordinates-and-profiles */}

Mesafeler **mantıksal birimler** kullanır. Web bağdaştırıcıları CSS pikseli kullanır. Android ekran pikseli ölçümleri, ölçülen `pixelDensity` değerine (mantıksal birim başına fiziksel piksel) bölünür. `fontScale` bağımsızdır. Eksik yoğunluk, yazı tipi ölçeği, kenar boşlukları, yerel ayar ve tema tahmin edilmemelidir.

Profilin `width`/`height` değerleri mantıksal görünüm alanını tanımlar. Bir kare `document`, `viewport` veya `screen` koordinatlarını bildirir:

- `extent`: o düzlemdeki tüm içerik kapsamı.
- `viewportBounds`: kaydırma başlangıcı dahil gözlemlenen görünür pencere.
- `geometry.visualBounds`: eksenlere paralel, **dönüşüm sonrası** dikdörtgen.
- İsteğe bağlı `layoutBounds`: dönüşüm öncesi geometri.
- İsteğe bağlı `transform`: `(x,y,z,1)` sütun vektörlerine etki eden, ötelemeleri düzenin yerel koordinatlarında mantıksal birimlerle verilen, sütun öncelikli 4×4 matris. Bunu `visualBounds` üzerine tekrar uygulamayın.

Belge koordinatlarında görünür penceredeki konum `visualBounds.x - viewportBounds.x`, `visualBounds.y - viewportBounds.y` şeklindedir. Karşılaştırmadan önce profili, koordinat düzlemini ve görünür pencereyi hizalayın. Mantıksal görünüm alanı, kullanılabilir kök sınırları ve içerik kapsamı farklı gözlemlerdir. Güvenli kenar boşlukları otomatik olarak padding uygulanmaz.

## Düğümler, düzen ve çizim {/* #nodes-layout-and-paint */}

Düğümler `id`, isteğe bağlı `parentId`, `kind`, `semantics`, `visible`, `geometry`, `layout`, `paint`, metin parçaları, isteğe bağlı `mediaResourceId`, `actions`, `motion` ve `evidence` taşır. Türler `unknown`, `container`, `text`, `media`, `control`, `surface` şeklindedir. Semantik bilgiler rol/ad ile isteğe bağlı etkin, seçili, işaretli, genişletilmiş, düzenlenebilir ve modal bayraklarını içerir. Bunlar görünürlükten bağımsızdır. Hassas metin karartılmalıdır; parolalar asla Scene metnine dönüşmemelidir.

| Düzen grubu | Sözleşme |
| --- | --- |
| `placement` | `unknown`, `flow`, `anchored`, `overlay`, `sticky`. |
| `arrangement` | `unknown`, `row`, `column`, `grid`, `stack`, `free`, `flow`. Stack alt öğeleri üst üste bindirir; free bağımsız yerleşimi tanımlar. |
| `horizontal`, `vertical` | Bağımsız politika/değer/minimum/maksimum olguları; politikalar `unknown`, `intrinsic`, `fixed`, `fill`, `proportional` şeklindedir. |
| Boşluk/hizalama | İç boşluk, satır/sütun aralıkları, satır kaydırma, ters sıra, ana/çapraz eksen hizalaması. |
| İzler | Tek profildeki sayısal satır/sütun dağılımları; yazılmış uyarlanabilir kurallar değildir. |
| Çapalar | Kanıtı bulunan `referenceId` ve isteğe bağlı üst/sağ/alt/sol mesafeler; kareye yerel düğüme, `$viewport` veya `$frame` öğesine başvurur. |

Sabit/min/maks ve çapa mesafeleri mantıksal birimler kullanır. Oransal değerler, başvurulan kullanılabilir eksenin birimsiz kesirleridir; `fill` çarpan içermez. Ölçülmüş bir dikdörtgen sabit boyutlandırmayı, kapsayan bloğu, çapaları veya kesme noktalarını kanıtlamaz. Mutlak/sabit yerel yerleşim, çapa uydurmadan `overlay` olarak eşlenebilir. Margin, öğeler arası temel aralık değildir.

Çizim sayısal boyutlar, 0–1 aralığına normalleştirilmiş RGBA kanalları, çizgiler, gölgeler, opaklık, bulanıklık ve medya başvuruları kullanır. Düz çizginin isteğe bağlı `edges` alanı, `top`, `right`, `bottom`, `left` değerlerinin boş olmayan benzersiz alt kümesidir; atlanması tüm sınırı çizer. Gölgeler öteleme, bulanıklık, yayılma, içe gölge ve kaynak bilgisini kaydeder. `cornerRadii` şu anda kenar boşluğu biçimli dört alan kullanır; Web bağdaştırıcısı eşit köşeler için eşit değerler üretir. Eşit olmayan/eliptik Web köşeleri, uydurulmuş köşe eşlemesi almak yerine desteklenmeyen olarak kalır.

Medya yerleşimi (`content`, `background`, `surface`) düğüm türünden bağımsızdır. Sığdırma `unknown`, `contain`, `cover`, `stretch` veya `original` olur. Konum `(x,y)`, kalan boşlukta kesirli çapadır: 0 başlangıca hizalar, 0.5 ortalar, 1 sona hizalar; aralık dışındaki kesirlere izin verilir. Arka plan sığdırması ilgisiz bir içerik görüntüsünden alınmamalıdır.

Metin parçaları özgün `text`, isteğe bağlı sınırlar ve tipografi içerir: aile/yazı tipi kaynağı, boyut, ağırlık, satır yüksekliği, harf aralığı, renk, yön, hizalama, satır kaydırma, süsleme ve harf dönüşümü. Harf dönüşümü (`none`, `uppercase`, `lowercase`, `capitalize`), özgün metinden ve erişilebilir adlardan bağımsız olarak sunumu değiştirir. Desteklenmeyen çizim/degrade/metin efektleri sorun olarak kalır. Keyfî yerel CSS ifadeleri temel düzen veya çizim değerleri değildir.

## Kaynaklar ve yazı tipleri {/* #resources-and-fonts */}

Kaynaklar `id`, `kind`, isteğe bağlı `uri`, `mimeType`, `sha256`, `bytes` ve yazı tipi yüzleri içerir. Türler `unknown`, `image`, `vector`, `font`, `video`, `audio`, `paint` şeklindedir. Düğüm ve tipografi kaynak başvuruları bu belge içinde çözümlenir. Yazı tipi yüzleri aileyi, kanıt türünü/başvurularını, isteğe bağlı ağırlık aralığını, italik durumunu ve Unicode kod noktası kapsamını kaydeder. Arşivlenmiş baytları koruyup uygun yüzü seçin. Tek başına aile adı veya URL, amaçlanan yazı tipinin yüklendiğini ya da yedeğinin eşdeğer olduğunu kanıtlamaz.

## Eylemler ve modal durumlar {/* #actions-and-modal-states */}

Eylemler olası işlemleri bildirir: `unknown`, `activate`, `edit`, `scroll`, `navigate`, `focus`, `hover`, `back`; hedef isteğe bağlıdır. Bir geçişte kaynak kare, isteğe bağlı kaynak düğüm ve hedef kare, eylem, sonuç ve kaynak bilgisi bulunur. `nodeId` her zaman **kaynak kareye** aittir.

| Sonuç | Anlam |
| --- | --- |
| `unknown` | Sonuç belirlenmemiştir. |
| `changed` | Bir değişiklik gözlemlenmiştir. |
| `unchanged` | Değişiklik gözlemlenmemiştir. |
| `failed` | Eylem başarısız olmuştur. |
| `performedUnverified` | Beklenen sonucu kanıtlamadan girdi iletilmiştir. |

Yeni anlık görüntü kimlikleri veya değişen imleç bir menünün açıldığını kanıtlamaz. Açık modal, gözlemlenen tam karesini korumalıdır: arka örtü, panel, alt öğeler ve alttaki içerik. İzin ekranı, kapatılmış içerik, iletişim kutusu sekmeleri, arama ve genişletilmiş menüleri ayırmak için `entryFrameId` ve geçişleri izleyin. Zorlanmış durum ölçümleri ile gerçek işaretçi/dokunma girdileri farklı kanıtlar olarak kalır. Kaynak üzerindeki tekrar oynatmalar, yeni üretilmiş arayüzün işlevsel testleri değildir.

## Hareket {/* #motion */}

Düğüm/geçiş hareket kayıtları `property`, `durationMs`, `keyframes`, `kind`, `evidence` ve isteğe bağlı `delayMs`, `iterations` ile kübik Bézier `easing` (`x1`, `y1`, `x2`, `y2`) içerir. Süre milisaniyedir; ofsetler artan sırada 0–1 aralığındadır. Easing x koordinatları 0–1 aralığındadır.

| Özellik | Anahtar karenin `value` bileşenleri |
| --- | --- |
| `opacity` | `[alpha]`, 0–1. |
| `translation` | `[x, y, z]`, mantıksal birimler. |
| `scale` | `[x, y, z]`, çarpanlar. |
| `rotation` | `[x, y, z]`, radyan. |
| `bounds` | `[x, y, width, height]`, mantıksal birimler. |
| `color` | `[red, green, blue, alpha]`, 0–1. |

Atlanan seçenekler bilinmeyen kalır. Sıfır yineleme oynatma yapılmaması demektir. Bilinmeyen veya sınırsız tekrar, tahmin edilmiş sonlu sayıya dönüştürülmemelidir. CSS/WAAPI bildirimleri `declared`; gözlemlenen örnekler `measured` olabilir. Durağan görüntüler veya iki uç nokta zamanlamayı veya easing eğrisini kanıtlayamaz.

## Doğrulama ve kapsam {/* #validation-and-coverage */}

Yapıyı dışa aktarımın şemasıyla, ardından semantiği doğrulayın: kapsam içinde benzersiz kimlikler, geçerli başvurular, döngüsüz üst öğeler, sonlu geometri, negatif olmayan boyutlar, normalleştirilmiş renkler, yazı tipi/kod noktası aralıkları, karartma ve hareket boyutları. Backend `SceneValidator` bu ek değişmezleri uygular. JSON Schema tek başına tam bir grafik veya gizlilik doğrulayıcısı değildir.

Mevcut yapısal şema bilinmeyen alanları ve tamsayı enum değerlerini reddeder. Tanımlayıcısını ve özetini sabitleyin; farklı biçim sürümü için açık bir bağdaştırıcı kullanın. Bilinmeyen verileri yerel düzen olarak yeniden yorumlamayın. Mevcut alanlar anlamını korur; uyumsuz anlam değişiklikleri yeni biçim tanımlayıcısı gerektirir. Sunucu yükseltmeleri geçerli şema baytlarını değiştirebilir: her arşivlenmiş dışa aktarımla şema/özeti saklayın.

`SceneIssue`, `code`, `message` ve isteğe bağlı `frameId`/`nodeId` içerir. Yalnızca manifest önizlemesini değil tam çıktıyı okuyun ve kare kesilmesini dikkate alın. Mevcut doğrulayıcı sınırları 100 profil, 500 kare, 20.000 kaynak, toplam 100.000 düğüm ve kare başına 20.000 düğümdür. Edinme/aktarım sınırları daha düşük olabilir; bu sayılar yakalama kapsamı garantisi değildir.

Yeni Web yakalamaları yerel tanı verileriyle birlikte Scene üretir. Eski Web verileri açıkça belirtilmiş boşluklarla dönüştürülebilir. Android bağdaştırıcısı yerel ölçümleri normalleştirebilir; ancak API/MCP erişimi yine yayımlanmış yerel Scene gerektirir. Veri modelinin desteği, yakalanmamış ortamı kullanılabilir yapmaz. Eksik durumlar, kaynaklar, hareket ve uyarlanabilir gözlemler bilinmeyen kalır. Dışa aktarım başarısı veya şema geçerliliği yeniden üretim doğruluğunu kanıtlamaz.


## İstek gönderim politikası {/* #request-submission-policy */}

İstek kullanılabilirliği katalog yakalamalarının kullanılabilirliğinden bağımsızdır. Yöneticiler bunu Requests → Job defaults → Request submissions altında yapılandırır. Saklanan `ProductRequestJobDefaults.Submission`, `Enabled` ve türlendirilmiş `Targets` (`Type`, `Environment`) içerir. Bu üyesi olmayan mevcut ayarlar varsayılanları korur: Desktop/Web, Desktop/WebExtension ve Mobile/Web. Gönderimleri kapatmak bu seçimleri ve mevcut istekleri korur. Platform API ve kimliği doğrulanmış MCP, istek oluşturmadan önce mevcut politikayı doğrular. Kapalıyken request-options boş `platforms` listesi döndürür; MCP ayrıca `enabled: false` döndürür. Herkese açık ortam kimlikleri enum adları değil, `web` ve `web-extension` olarak kalır. Katalog seçicileri ürün başına yakalanmış kullanılabilirliği kullanır ve kullanılamayan çiftleri gizler.


### Gruplanmış istek hedefleri {/* #grouped-request-targets */}

Yeni istemciler `CreateRequestRequest.targets` alanını açık platform/ortam çiftleri olarak gönderir. Örneğin:

```json
{
  "requestType": "PRODUCT_REQUEST_TYPE_ADD",
  "url": "https://metamask.io/",
  "webExtensionUrl": "https://chromewebstore.google.com/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn",
  "targets": [
    { "view": "desktop", "implementation": "web-extension" },
    { "view": "mobile", "implementation": "web" }
  ]
}
```

Sunucu her çifti mevcut istek kullanılabilirliğine göre doğrular ve bu çiftleri türlendirilmiş istek ayrıntılarına kaydeder. Onay yalnızca seçili çiftleri oluşturur: bu örnek Desktop/Web işi oluşturmaz. Eski istemciler için `views` ve `implementations` kabul edilmeye devam eder ve Kartezyen çarpımlarını temsil eder; bunları `targets` ile birleştirmeyin. Web sitesi kaynağı `url`; uzantı işleri `webExtensionUrl` kullanır. Güncelleme isteklerinde kaynak bağlantıları olmadan mevcut `catalogId` ve hedefleri gönderin. Önce ürünü seçin: platform yalnızca ürünün yakalanmış ve istekler için şu anda etkin olan platform/ortam çiftlerini sunar. Sunucu üründe bulunmayan hedefleri bağımsız olarak reddeder, her ortamın kaynağını ürünün yayımlanmış yakalamalarından çözümler ve istemcinin alternatif bağlantılarını yok sayar. Herkese açık istek özetleri, özel istek ayrıntılarıyla birlikte uzantı kaynağını da çıkarır.

## Ek Scene kanıtları {/* #additional-scene-evidence */}

Güncel şema tipli token içeren `themes` ve başka genişliklerde seyrek ölçümler içeren `layoutSamples` tanımlar. Örnekler `frameId` düğümlerine başvurur; kare değildir, metni veya görünümü yeniden ölçmez. Eksik düğüm gizli demek değildir. `nodes[].states` görünüm değişikliklerini içerir: mevcut `patch` alanları değerleri değiştirir, eksik alanlar değişmez, listeler tamamen değiştirilir. Layout; `flow`, `grow`, `shrink`, `basis`, `selfAlignment`, `order`, `gridCell` destekler; paint gradyan ve çizgi biçimi/konumu içerir. Bunlar eski yakalamalarda bulunmayabilecek isteğe bağlı kanıtlardır. Kökeni koruyun; tek ölçümden duyarlı kurallar çıkarmayın.
