# Збірки в дашборді

Запис про кожну збірку Pro Cloud: покриття, роздування, складність, час збірки, вартість, діагностика і Protection Map.

Source: https://www.afterpack.dev/uk/docs/dashboard/builds

Кожна збірка [**Pro Cloud**](https://www.afterpack.dev/uk/docs/deployment-modes) залишає запис: коли вона виконувалася, з якого коміту, скільки коштувала, яку її частину рушій зміг трансформувати і що рушій повідомив під час роботи. Локальні збірки Free ніколи не зв'язуються з AfterPack, тож тут вони ніколи не з'являються.

## Список збірок

Усі збірки одного проєкту, від найновіших.

| Стовпець | Що це |
| --- | --- |
| **Зібрано** | Коли виконувалася збірка. |
| **Коміт** | Git SHA, який AfterPack визначив для збірки (див. [`seed`](https://www.afterpack.dev/uk/docs/config#seed)). Показується скорочено, копіюється повністю і пов'язує рядок із розгортанням. |
| **Файли** | Файли виводу, які ця збірка надіслала в AfterPack, без вихідних файлів усередині них. |
| **Вихід** | Що вийшло після захисту. |
| **Оплачено** | Вхідні байти, які обробив AfterPack. Саме за це з вас стягується плата. |
| **Час збірки** | Час, який AfterPack додав до збірки, виміряний на edge; для старіших збірок цього запису немає, тож у таких рядках значення показується як відсутнє, а не `0`. |
| **Покриття** | Частка отриманого виводу, яку рушій міг вільно трансформувати. |
| [**Роздування**](https://www.afterpack.dev/uk/docs/config#inflation-max) | Вихід ÷ вхід. Це те, скільки захист коштує вашим користувачам під час завантаження. |

Список показує найновіші збірки цього проєкту. Під час перегляду збірки бічна панель вкладає сусідні збірки цього проєкту під пункт **Збірки**, тож дві збірки можна порівняти в один клік.

## Одна збірка повністю

Відкрийте рядок, і в заголовку буде коміт (або id збірки, якщо git-контексту немає) і кнопка **Переглянути Protection Map** або позначка *Мапу не збережено*, коли відкривати нічого.

### Результат

Чотири числа, і кожне відповідає на своє запитання.

- **Покриття**: частка отриманого виводу, яку рушій міг вільно трансформувати.
- **Роздування**: відношення розміру виходу до входу, число, за яке платять ваші користувачі. Певне зростання очікуване, бо трансформації, які роблять код важким для читання, займають місце.
- **Складність**: середня складність, досягнута на прийнятних байтах, показана відносно [цільового значення](https://www.afterpack.dev/uk/docs/config#complexity) цієї збірки (`score / target`). Складність є орієнтиром і не вимірює безпеку.
- **Розмір**: що надійшло на вхід і що вийшло.

### Склад покриття

Куди пішов кожен байт входу. Смуги в сумі дають вхід, а їхні частки збігаються з Покриттям вище.

| Смуга | Значення |
| --- | --- |
| **Прийнятні** | Байти, які рушій міг вільно трансформувати. |
| **Збережено (безпека)** | Байти, до яких рушій не зміг дістатися, бо не міг безпечно представити ці конструкції. |
| **Збережено (рефлексія)** | Байти, збережені тому, що ваш код використовує [рефлексію під час виконання](https://www.afterpack.dev/uk/docs/config#reflection-allow). |
| **Ви виключили** | Файли, що відповіли вашому налаштуванню [`paths.exclude`](https://www.afterpack.dev/uk/docs/config#paths-exclude), пропущені до розбору й повернуті без змін. |
| **Ви пропустили** | Ділянки, які ви позначили [`/* @afterpack skip */`](https://www.afterpack.dev/uk/docs/config#skip). |
| **Необліковано** | Вхідні байти, що не належать до жодної іншої смуги. |

Поруч зі смугами: **слабкі місця** (рядки з вашого коду, які досі читаються у виводі, без імен властивостей; відкрийте мапу, щоб побачити, де вони) і **[директиви](https://www.afterpack.dev/uk/docs/directives)** (маркери `@afterpack`, які рушій знайшов у вашому вихідному коді й записав тут; так ви [підтверджуєте, що директиву підхоплено](https://www.afterpack.dev/uk/docs/directives#checking-what-was-applied)).

### Файли з кодом

Деревоподібна мапа (treemap) кожного вихідного файлу збірки, розмір плиток відповідає байтам на вході, а колір показує, наскільки далеко просунувся рушій: сірі плитки не мали з чим працювати, червоні означають, що щось пішло не так, а від помаранчевого до зеленого йде шкала від слабкого до сильного. Плитки покривають лише вивід, який можна простежити до файлу, приблизно половину того, що ви випускаєте, тож роздування плитки не дорівнює роздуванню збірки. Решта є [рантаймом, який AfterPack вбудовує](https://www.afterpack.dev/uk/docs/config#inflation-max) один раз на бандл. Спільний код рантайму не має плитки, і саме тому збірка роздувається більше, ніж будь-який окремий файл.

Цей рядок доступний лише на [платних планах](https://www.afterpack.dev/uk/docs/tiers): робочий простір Free бачить замість treemap заблокований стан, хоча кожен інший рядок на сторінці збірки безкоштовний.

### Захоплення файлів виводу

Цей розділ показує, скільки файлів виводу збірки можна переглянути в збереженій мапі і що сталося з рештою; він не вимірює захист, бо кожен файл було обфусковано незалежно від того, чи його захоплено. Один виняток: якщо збірка вичерпує [бюджет часу AfterPack](https://www.afterpack.dev/uk/docs/cloud-api), вона перестає починати нові файли, і кожен файл, що залишився, завершується помилкою. Перезапустіть збірку або розділіть її на менші.

### Час

Час, який збірка провела на edge AfterPack, включно з очікуванням завантаження відповіді. Значну його частку займає [Protection Map](https://www.afterpack.dev/uk/docs/protection-map): її створення й повернення додається до часу обфускації, тож вимкнення захоплення в [налаштуваннях проєкту](https://www.afterpack.dev/uk/docs/dashboard/workspaces) повертає цей час.

### Тарифікація

Що ця збірка взяла з вашого робочого простору: **Виміряно** (тарифіковані вхідні байти) і звідки це взято: **Ліміт**, **Кредит** (Extra MB), **Перевищення**.

### Діагностика

Що рушій повідомив під час обфускації цієї збірки, згруповане за стабільним кодом із лічильником; оскільки це ваша власна збірка у вашому власному робочому просторі, ви також бачите повідомлення й файл для кожного запису. Інформаційні записи очікувані, тож виділяються лише помилки та критичні.

Сторінка вказує, яка з трьох речей сталася: записи зафіксовано, збірка була чистою і нічого не повідомила, або AfterPack узагалі не має запису, як і буває після збірки Free.

Кожен код стабільний, і його можна цитувати у звіті про помилку. Див. [Діагностика](https://www.afterpack.dev/uk/docs/diagnostics).

## Protection Map

Коли захоплення увімкнено і збірка зберегла мапу, **Переглянути Protection Map** відкриває [подання на рівні токенів](https://www.afterpack.dev/uk/docs/protection-map): ваш оригінальний вихідний код, розфарбований за оцінкою складності кожного токена, із [класом відновлення](https://www.afterpack.dev/uk/docs/reversal-classes) коду, який ви виділили. Збережена мапа містить ваш оригінальний вихідний код і доступна для читання всім у робочому просторі; строк зберігання й перемикач для кожного проєкту описано в розділі [Конфіденційність і обробка даних](https://www.afterpack.dev/uk/docs/privacy#protection-maps-for-cloud-builds-are-stored-and-you-can-turn-that-off), а ця сторінка вказує точну дату закінчення зберігання для збірки. Збірка без збереженої мапи натомість вказує причину: захоплення було вимкнено, це не була збірка Pro Cloud, або вона не містила вхідних source map, з яких можна було б побудувати мапу.

## Тренди

Огляд проєкту показує покриття, роздування та час збірки з часом з адаптивним розміром інтервалу і з різницею щодо попереднього тижня чи місяця; огляд робочого простору робить те саме для використання в усіх проєктах.

## Далі

- [Protection Map](https://www.afterpack.dev/uk/docs/protection-map): як читати сам артефакт.
- [Класи відновлення](https://www.afterpack.dev/uk/docs/reversal-classes): що означають мітки класів.
- [Діагностика](https://www.afterpack.dev/uk/docs/diagnostics): коди, які видає рушій.
- [Збірки та CI](https://www.afterpack.dev/uk/docs/builds): як узагалі створюються ці збірки.
- [Використання та оплата](https://www.afterpack.dev/uk/docs/dashboard/usage): куди йдуть виміряні байти.
