chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-08 02:02:07 +00:00
parent c4a28e3b28
commit ebed89a113

View File

@ -1,38 +1,38 @@
---
x-i18n:
generated_at: "2026-04-07T22:41:54Z"
generated_at: "2026-04-08T02:02:07Z"
model: gpt-5.4
provider: openai
source_hash: 3a13a050574d3fbd7a9a935aa57aa260a92975029b64418633df55159fd7cb29
source_hash: 0e156cc8e2fe946a0423862f937754a7caa1fe7e6863b50a80bff49a1c86e1e8
source_path: refactor/qa.md
workflow: 15
---
# Рефакторинг QA
Статус: базову міграцію завершено.
Статус: базова міграція завершена.
## Мета
Перевести QA OpenClaw із моделі з розділеними визначеннями на єдине джерело істини:
Перевести QA OpenClaw з моделі розділених визначень на єдине джерело істини:
- метадані сценаріїв
- підказки, що надсилаються моделі
- промпти, що надсилаються моделі
- налаштування та очищення
- логіка harness
- перевірки та критерії успіху
- артефакти та підказки для звітів
- артефакти та підказки для звіту
Бажаний кінцевий стан — це універсальний QA harness, який завантажує потужні файли визначень сценаріїв замість жорсткого кодування більшості поведінки в TypeScript.
Бажаний кінцевий стан — універсальний QA harness, який завантажує потужні файли визначень сценаріїв замість жорсткого кодування більшості поведінки в TypeScript.
## Поточний стан
Основне джерело істини тепер міститься в `qa/scenarios.md`.
Основне джерело істини тепер знаходиться в `qa/scenarios.md`.
Реалізовано:
- `qa/scenarios.md`
- канонічний пакет QA
- канонічний набір QA
- ідентичність оператора
- стартова місія
- метадані сценаріїв
@ -45,71 +45,71 @@ x-i18n:
- заповнює згенеровані файли сумісності плюс `QA_SCENARIOS.md`
- `extensions/qa-lab/src/suite.ts`
- вибирає виконувані сценарії через визначені в markdown прив’язки обробників
- QA bus protocol + UI
- універсальні вбудовані вкладення для рендерингу image/video/audio/file
- протокол шини QA + UI
- універсальні вбудовані вкладення для рендерингу зображень/відео/аудіо/файлів
Поверхні, що ще залишаються розділеними:
Поверхні, що залишаються розділеними:
- `extensions/qa-lab/src/suite.ts`
- усе ще містить більшість виконуваної логіки кастомних обробників
- досі містить більшість виконуваної логіки спеціальних обробників
- `extensions/qa-lab/src/report.ts`
- усе ще виводить структуру звіту з результатів виконання
- досі виводить структуру звіту з результатів часу виконання
Отже, розділення джерела істини вже виправлено, але виконання все ще здебільшого спирається на обробники, а не є повністю декларативним.
Тож розділення джерела істини усунуто, але виконання все ще переважно спирається на обробники, а не є повністю декларативним.
## Як виглядає реальна поверхня сценаріїв
Ознайомлення з поточним suite показує кілька окремих класів сценаріїв.
Перегляд поточного suite показує кілька різних класів сценаріїв.
### Проста взаємодія
- базова перевірка каналу
- базова перевірка DM
- продовження в треді
- базовий сценарій каналу
- базовий сценарій DM
- подальша взаємодія в треді
- перемикання моделі
- проходження підтвердження
- проходження після схвалення
- реакція/редагування/видалення
### Зміна конфігурації та runtime
### Мутація конфігурації та runtime
- вимкнення skill через patch конфігурації
- пробудження після restart через apply конфігурації
- перемикання можливостей після restart конфігурації
- перевірка розходження inventory runtime
- пробудження після перезапуску через застосування конфігурації
- перемикання можливостей після перезапуску конфігурації
- перевірка розходження інвентаря runtime
### Перевірки файлової системи та репозиторію
- звіт про виявлення source/docs
- збірка Lobster Invaders
- пошук артефакта згенерованого image
- пошук артефакта згенерованого зображення
### Оркестрація пам’яті
- відтворення з пам’яті
- відновлення з пам’яті
- інструменти пам’яті в контексті каналу
- резервний сценарій при збої пам’яті
- ранжування пам’яті сесії
- ізоляція пам’яті тредів
- sweep dreaming пам’яті
- ізоляція пам’яті треду
- sweep мрій пам’яті
### Інтеграція інструментів і plugin
### Інтеграція інструментів і плагінів
- виклик MCP plugin-tools
- виклик plugin-tools MCP
- видимість skill
- гаряче встановлення skill
- нативна генерація image
- круговий цикл image
- розпізнавання image із вкладення
- нативна генерація зображень
- повний цикл зображення
- розуміння зображення з вкладення
### Багатоходові та багатосуб’єктні
### Багатокрокові та багатосуб’єктні сценарії
- передача підзадачі субагенту
- fanout-синтез субагента
- потоки у стилі відновлення після restart
- передача підагенту
- fanout synthesis підагента
- сценарії відновлення після перезапуску
Ці категорії важливі, тому що вони визначають вимоги до DSL. Плоского списку prompt + очікуваного тексту недостатньо.
Ці категорії важливі, оскільки вони визначають вимоги до DSL. Плоского списку промпт + очікуваний текст недостатньо.
## Напрям
## Напрямок
### Єдине джерело істини
@ -117,18 +117,18 @@ x-i18n:
Пакет має залишатися:
- зручним для читання під час review
- придатним для машинного розбору
- зрозумілим для читання під час рев’ю
- придатним для машинного парсингу
- достатньо насиченим, щоб керувати:
- виконанням suite
- bootstrap робочого простору QA
- bootstrap QA workspace
- метаданими UI QA Lab
- підказками для docs/discovery
- промптами для docs/discovery
- генерацією звітів
### Бажаний формат авторингу
Використовувати markdown як формат верхнього рівня зі структурованим YAML всередині.
Використовувати markdown як формат верхнього рівня зі структурованим YAML усередині.
Рекомендована форма:
@ -139,7 +139,7 @@ x-i18n:
- tags
- docs refs
- code refs
- overrides для model/provider
- model/provider overrides
- prerequisites
- прозові секції
- objective
@ -155,9 +155,9 @@ x-i18n:
- кращу читабельність PR, ніж гігантський JSON
- багатший контекст, ніж чистий YAML
- строгий розбір і валідацію zod
- суворий парсинг і валідацію zod
Чистий JSON прийнятний лише як проміжна згенерована форма.
Сирий JSON прийнятний лише як проміжна згенерована форма.
## Запропонована форма файлу сценарію
@ -184,7 +184,7 @@ codeRefs:
# Objective
Перевірити, що згенероване медіа повторно прикріплюється на наступному ході.
Verify generated media is reattached on the follow-up turn.
# Setup
@ -198,7 +198,6 @@ codeRefs:
- action: session.create
key: agent:qa:image-roundtrip
```
````
# Steps
@ -206,15 +205,15 @@ codeRefs:
- action: agent.send
session: agent:qa:image-roundtrip
message: |
Перевірка генерації image: згенеруй QA-зображення маяка та опиши його одним коротким реченням.
Image generation check: generate a QA lighthouse image and summarize it in one short sentence.
- action: artifact.capture
kind: generated-image
promptSnippet: Перевірка генерації image
promptSnippet: Image generation check
saveAs: lighthouseImage
- action: agent.send
session: agent:qa:image-roundtrip
message: |
Перевірка roundtrip image: опиши вкладення із зображенням маяка одним коротким реченням.
Roundtrip image inspection check: describe the generated lighthouse attachment in one short sentence.
attachments:
- fromArtifact: lighthouseImage
```
@ -226,17 +225,16 @@ codeRefs:
value: lighthouse
- assert: requestLog.matches
where:
promptIncludes: Перевірка roundtrip image
promptIncludes: Roundtrip image inspection check
imageInputCountGte: 1
- assert: artifact.exists
ref: lighthouseImage
```
````
## Можливості runner, які має покривати DSL
На основі поточного suite універсальний runner потребує більшого, ніж просто виконання prompt.
На основі поточного suite універсальний runner потребує більшого, ніж просто виконання промптів.
### Дії середовища та налаштування
@ -310,40 +308,40 @@ DSL має підтримувати збережені результати та
- створити тред, а потім повторно використати `threadId`
- створити сесію, а потім повторно використати `sessionKey`
- згенерувати image, а потім прикріпити файл на наступному ході
- згенерувати зображення, а потім прикріпити файл на наступному ході
- згенерувати рядок-маркер пробудження, а потім перевірити, що він з’являється пізніше
Потрібні можливості:
Необхідні можливості:
- `saveAs`
- `${vars.name}`
- `${artifacts.name}`
- типізовані посилання для path, session key, thread id, marker, результатів tool
- типізовані посилання для шляхів, ключів сесій, id тредів, маркерів, результатів інструментів
Без підтримки змінних harness і далі повертатиме логіку сценаріїв назад у TypeScript.
Без підтримки змінних harness і надалі буде пропускати логіку сценаріїв назад у TypeScript.
## Що має залишитися як escape hatch
## Що має залишитися як escape hatches
Повністю чистий декларативний runner нереалістичний на фазі 1.
Деякі сценарії за своєю природою вимагають складної оркестрації:
Деякі сценарії за своєю природою потребують складної оркестрації:
- sweep dreaming пам’яті
- пробудження після restart через apply конфігурації
- перемикання можливостей після restart конфігурації
- визначення артефакта згенерованого image за timestamp/path
- оцінювання discovery-report
- sweep мрій пам’яті
- пробудження після перезапуску через застосування конфігурації
- перемикання можливостей після перезапуску конфігурації
- визначення артефактів згенерованих зображень за timestamp/шляхом
- оцінка discovery-report
Наразі для них слід використовувати явні кастомні обробники.
Поки що вони мають використовувати явні спеціальні обробники.
Рекомендоване правило:
- 85-90% декларативно
- явні кроки `customHandler` для складного залишку
- лише іменовані та документовані кастомні обробники
- жодного анонімного вбудованого коду у файлі сценарію
- лише іменовані та задокументовані custom handlers
- жодного анонімного inline-коду у файлі сценарію
Це збереже універсальний рушій чистим і водночас дозволить рухатися вперед.
Це зберігає чистоту універсального рушія й водночас дає змогу рухатися вперед.
## Архітектурна зміна
@ -352,30 +350,30 @@ DSL має підтримувати збережені результати та
Markdown сценаріїв уже є джерелом істини для:
- виконання suite
- bootstrap-файлів робочого простору
- bootstrap-файлів workspace
- каталогу сценаріїв UI QA Lab
- метаданих звітів
- discovery prompts
- промптів discovery
Згенерована сумісність:
- заповнений робочий простір усе ще містить `QA_KICKOFF_TASK.md`
- заповнений робочий простір усе ще містить `QA_SCENARIO_PLAN.md`
- заповнений робочий простір тепер також містить `QA_SCENARIOS.md`
- workspace із початковими даними все ще містить `QA_KICKOFF_TASK.md`
- workspace із початковими даними все ще містить `QA_SCENARIO_PLAN.md`
- workspace із початковими даними тепер також містить `QA_SCENARIOS.md`
## План рефакторингу
### Фаза 1: loader і schema
Готово.
Завершено.
- додано `qa/scenarios.md`
- додано парсер для іменованого вмісту markdown YAML pack
- виконано валідацію через zod
- споживачів переведено на розібраний pack
- додано парсер для вмісту іменованого markdown YAML-пакета
- додано валідацію через zod
- споживачів переведено на розібраний пакет
- видалено `qa/seed-scenarios.json` і `qa/QA_KICKOFF_TASK.md` на рівні репозиторію
### Фаза 2: універсальний рушій
### Фаза 2: універсальний engine
- розділити `extensions/qa-lab/src/suite.ts` на:
- loader
@ -383,57 +381,57 @@ Markdown сценаріїв уже є джерелом істини для:
- registry дій
- registry перевірок
- custom handlers
- зберегти наявні helper-функції як операції рушія
- зберегти наявні допоміжні функції як операції engine
Результат:
- рушій виконує прості декларативні сценарії
- engine виконує прості декларативні сценарії
Почати зі сценаріїв, які здебільшого складаються з prompt + wait + assert:
Почати зі сценаріїв, які переважно складаються з промпту + очікування + перевірки:
- продовження в треді
- розпізнавання image із вкладення
- подальша взаємодія в треді
- розуміння зображення з вкладення
- видимість і виклик skill
- базова перевірка каналу
- базовий сценарій каналу
Результат:
- перші справжні сценарії, визначені в markdown, постачаються через універсальний рушій
- перші справжні сценарії, визначені в markdown, постачаються через універсальний engine
### Фаза 4: міграція сценаріїв середньої складності
- roundtrip генерації image
- повний цикл генерації зображення
- інструменти пам’яті в контексті каналу
- ранжування пам’яті сесії
- передача підзадачі субагенту
- fanout-синтез субагента
- передача підагенту
- fanout synthesis підагента
Результат:
- доведено змінні, артефакти, перевірки tool і перевірки request-log
- доведено роботу змінних, артефактів, перевірок інструментів і перевірок журналу запитів
### Фаза 5: залишити складні сценарії на custom handlers
- sweep dreaming пам’яті
- пробудження після restart через apply конфігурації
- перемикання можливостей після restart конфігурації
- розходження inventory runtime
- sweep мрій пам’яті
- пробудження після перезапуску через застосування конфігурації
- перемикання можливостей після перезапуску конфігурації
- розходження інвентаря runtime
Результат:
- той самий формат авторингу, але з явними блоками custom-step там, де це потрібно
### Фаза 6: видалити жорстко закодовану карту сценаріїв
### Фаза 6: видалити жорстко закодовану мапу сценаріїв
Коли покриття pack стане достатньо хорошим:
Щойно покриття пакета стане достатньо хорошим:
- видалити більшість TypeScript-розгалужень для конкретних сценаріїв із `extensions/qa-lab/src/suite.ts`
- видалити більшість специфічних для сценаріїв розгалужень TypeScript із `extensions/qa-lab/src/suite.ts`
## Підтримка Fake Slack / Rich Media
## Підтримка fake Slack / rich media
Поточний QA bus орієнтований насамперед на текст.
Поточна шина QA орієнтована насамперед на текст.
Пов’язані файли:
Відповідні файли:
- `extensions/qa-channel/src/protocol.ts`
- `extensions/qa-lab/src/bus-state.ts`
@ -441,17 +439,17 @@ Markdown сценаріїв уже є джерелом істини для:
- `extensions/qa-lab/src/bus-server.ts`
- `extensions/qa-lab/web/src/ui-render.ts`
Сьогодні QA bus підтримує:
Сьогодні шина QA підтримує:
- текст
- реакції
- треди
Він ще не моделює вбудовані медіавкладення.
Вона ще не моделює вбудовані медіавкладення.
### Потрібний транспортний контракт
Додати універсальну модель вкладень QA bus:
Додати універсальну модель вкладень шини QA:
```ts
type QaBusAttachment = {
@ -468,7 +466,7 @@ type QaBusAttachment = {
altText?: string;
transcript?: string;
};
````
```
Потім додати `attachments?: QaBusAttachment[]` до:
@ -476,7 +474,7 @@ type QaBusAttachment = {
- `QaBusInboundMessageInput`
- `QaBusOutboundMessageInput`
### Чому спочатку універсально
### Чому спочатку універсальна модель
Не створювати модель медіа лише для Slack.
@ -488,26 +486,26 @@ type QaBusAttachment = {
- майбутній fake Slack web
- будь-які інші представлення fake transport
Це запобігає дублюванню логіки й дозволяє медіасценаріям залишатися незалежними від конкретного транспорту.
Це запобігає дублюванню логіки й дозволяє сценаріям із медіа залишатися незалежними від transport.
### Потрібна робота в UI
Оновити UI QA для рендерингу:
Оновити UI QA, щоб він рендерив:
- вбудованого попереднього перегляду image
- вбудованого audio player
- вбудованого video player
- chip вкладеного file
- вбудований попередній перегляд зображення
- вбудований аудіоплеєр
- вбудований відеоплеєр
- chip вкладеного файла
Поточний UI вже вміє рендерити треди та реакції, тож рендеринг вкладень має нашаровуватися на ту саму модель картки повідомлення.
Поточний UI вже може рендерити треди й реакції, тож рендеринг вкладень має нашаровуватися на ту саму модель картки повідомлення.
### Робота над сценаріями, яку відкриває медіатранспорт
### Робота зі сценаріями, яку відкриває транспорт медіа
Щойно вкладення почнуть проходити через QA bus, можна буде додати багатші сценарії fake-chat:
Щойно вкладення почнуть проходити через шину QA, можна буде додати багатші сценарії fake-chat:
- вбудована відповідь із image у fake Slack
- розпізнавання audio-вкладення
- розпізнавання video-вкладення
- відповідь із вбудованим зображенням у fake Slack
- розуміння аудіовкладення
- розуміння відеовкладення
- змішаний порядок вкладень
- відповідь у треді зі збереженням медіа
@ -515,22 +513,22 @@ type QaBusAttachment = {
Наступний етап реалізації має бути таким:
1. додати loader сценаріїв markdown + schema zod
1. додати markdown loader сценаріїв + zod schema
2. згенерувати поточний каталог із markdown
3. спочатку мігрувати кілька простих сценаріїв
4. додати універсальну підтримку вкладень QA bus
5. рендерити вбудоване image в UI QA
6. потім розширити на audio і video
4. додати універсальну підтримку вкладень у шині QA
5. рендерити вбудоване зображення в UI QA
6. потім розширити на аудіо та відео
Це найменший шлях, який доводить обидві цілі:
Це найкоротший шлях, який доводить обидві цілі:
- універсальний QA, визначений через markdown
- багатші fake messaging surfaces
- універсальний QA, визначений у markdown
- багатші поверхні fake messaging
## Відкриті питання
- чи мають файли сценаріїв дозволяти вбудовані markdown-шаблони prompt зі вставкою змінних
- чи мають setup/cleanup бути іменованими секціями, чи просто впорядкованими списками дій
- чи мають посилання на артефакти бути строго типізованими в schema, чи базуватися на рядках
- чи мають custom handlers жити в одному registry або в окремих registry для кожної surface
- чи має згенерований файл сумісності JSON залишатися закоміченим під час міграції
- чи мають файли сценаріїв дозволяти вбудовані markdown-шаблони промптів з інтерполяцією змінних
- чи мають setup/cleanup бути іменованими секціями або просто впорядкованими списками дій
- чи мають посилання на артефакти бути строго типізованими в schema або рядковими
- чи мають custom handlers жити в одному registry або в registry для кожної surface
- чи має згенерований JSON-файл сумісності залишатися закоміченим під час міграції