@cat-factory/app 0.157.0 → 0.158.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -455,6 +455,19 @@
455
455
  "run": "Proponi comunque",
456
456
  "skip": "Salta"
457
457
  }
458
+ },
459
+ "classRules": {
460
+ "heading": "Regole per categoria di modifica",
461
+ "help": "Ogni pull request viene classificata dai file che ha modificato. Una categoria può essere sempre unita automaticamente, richiedere sempre una revisione, oppure ricadere sulle soglie qui sopra. I conteggi mostrano che cosa ha richiesto finora quella categoria.",
462
+ "autoMergeOffWarning": "L'unione automatica è disattivata per questo preset, quindi ogni pull request passa comunque da una persona. Una regola di categoria non può ignorarlo.",
463
+ "noData": "Nessuno storico finora",
464
+ "record": "{merged} uniti, {autoShare} automaticamente",
465
+ "frictionless": "{share} senza alcun commento",
466
+ "rule": {
467
+ "thresholds": "Usa le soglie",
468
+ "always": "Unisci sempre automaticamente",
469
+ "never": "Richiedi sempre una revisione"
470
+ }
458
471
  }
459
472
  },
460
473
  "observabilityConnection": {
@@ -1406,7 +1419,9 @@
1406
1419
  "no_rationale": "Il merger ha valutato la PR ma non ha fornito alcuna motivazione, quindi il verdetto non poteva essere ritenuto affidabile per l'unione automatica; la PR e' in attesa che un umano la unisca.",
1407
1420
  "no_assessment": "Il merger non ha restituito una valutazione analizzabile, quindi la PR e' in attesa che un umano la unisca.",
1408
1421
  "merge_failed": "I punteggi rientravano nelle soglie {preset}, ma l'unione automatica non e' riuscita a completarsi (ad esempio protezione del branch o un conflitto), quindi la PR e' in attesa che un umano la unisca.",
1409
- "merge_partial": "Alcune delle pull request dell'attivita' sono state unite, ma una successiva non e' riuscita, quindi la modifica e' in attesa che un umano completi o annulli l'unione multi-repository."
1422
+ "merge_partial": "Alcune delle pull request dell'attivita' sono state unite, ma una successiva non e' riuscita, quindi la modifica e' in attesa che un umano completi o annulli l'unione multi-repository.",
1423
+ "class_auto_merge": "Questo preset unisce sempre automaticamente questa categoria di modifica, quindi i punteggi non sono stati confrontati.",
1424
+ "class_requires_review": "Questo preset invia sempre questa categoria di modifica a una persona, indipendentemente dai punteggi."
1410
1425
  },
1411
1426
  "scores": "Punteggi",
1412
1427
  "axis": {
@@ -1818,7 +1833,8 @@
1818
1833
  "fork_decision_pending": "Segna come letto",
1819
1834
  "pr_review_ready": "Segna come letto",
1820
1835
  "budget_paused": "Segna come letto",
1821
- "key_drift": "Elimina credenziali obsolete"
1836
+ "key_drift": "Elimina credenziali obsolete",
1837
+ "merge_tag_request": "Registra l’impegno"
1822
1838
  }
1823
1839
  },
1824
1840
  "aiProvidersBanner": {
@@ -4247,7 +4263,8 @@
4247
4263
  "human_test_ready": "Pronto per il test umano",
4248
4264
  "visual_confirmation_ready": "Pronto per la conferma visiva",
4249
4265
  "pr_review_ready": "Rilievi revisione PR",
4250
- "initiative": "Aggiornamenti dell'iniziativa"
4266
+ "initiative": "Aggiornamenti dell'iniziativa",
4267
+ "merge_tag_request": "Richiesta impegno di revisione"
4251
4268
  },
4252
4269
  "role": {
4253
4270
  "engineering": "Ingegneria",
@@ -5188,6 +5205,24 @@
5188
5205
  "unlinkSourceFailed": "Impossibile scollegare la fonte"
5189
5206
  }
5190
5207
  },
5208
+ "merge": {
5209
+ "changeClass": {
5210
+ "docs": "Documentazione e testi",
5211
+ "test": "Test",
5212
+ "dependency": "Aggiornamento dipendenze",
5213
+ "config": "Configurazione e CI",
5214
+ "source": "Codice sorgente",
5215
+ "schema": "Schema e migrazioni",
5216
+ "unknown": "Non classificato"
5217
+ },
5218
+ "effort": {
5219
+ "prompt": "Impegno di revisione",
5220
+ "none": "Nessun commento",
5221
+ "minor": "Note minori",
5222
+ "major": "Rilavorazione sostanziale",
5223
+ "classHistory": "{merged} uniti in questa categoria, {autoShare} in automatico"
5224
+ }
5225
+ },
5191
5226
  "vcs": {
5192
5227
  "panel": {
5193
5228
  "title": "Controllo del codice sorgente",
@@ -1116,7 +1116,9 @@
1116
1116
  "no_rationale": "マージ担当は PR を採点しましたが根拠を示さなかったため、自動マージするには判定を信頼できませんでした。PR は人によるマージを待っています。",
1117
1117
  "no_assessment": "マージ担当が解析可能な評価を返さなかったため、PR は人によるマージを待っています。",
1118
1118
  "merge_failed": "スコアは {preset} のしきい値内でしたが、自動マージを完了できなかった(例: ブランチ保護や競合)ため、PR は人によるマージを待っています。",
1119
- "merge_partial": "タスクの一部のプルリクエストはマージされましたが、後続の1つが失敗したため、変更は人が複数リポジトリのマージを完了するか元に戻すのを待っています。"
1119
+ "merge_partial": "タスクの一部のプルリクエストはマージされましたが、後続の1つが失敗したため、変更は人が複数リポジトリのマージを完了するか元に戻すのを待っています。",
1120
+ "class_auto_merge": "このプリセットはこのカテゴリの変更を常に自動マージするため、スコアは比較されませんでした。",
1121
+ "class_requires_review": "このプリセットはスコアにかかわらず、このカテゴリの変更を常に人のレビューに回します。"
1120
1122
  },
1121
1123
  "scores": "スコア",
1122
1124
  "axis": {
@@ -1721,7 +1723,8 @@
1721
1723
  "fork_decision_pending": "既読にする",
1722
1724
  "pr_review_ready": "既読にする",
1723
1725
  "budget_paused": "既読にする",
1724
- "key_drift": "古い認証情報を削除"
1726
+ "key_drift": "古い認証情報を削除",
1727
+ "merge_tag_request": "工数を記録"
1725
1728
  },
1726
1729
  "toast": {
1727
1730
  "acted": "対応済みにしました",
@@ -2456,6 +2459,19 @@
2456
2459
  "run": "それでも提案",
2457
2460
  "skip": "スキップ"
2458
2461
  }
2462
+ },
2463
+ "classRules": {
2464
+ "heading": "変更カテゴリごとのルール",
2465
+ "help": "プルリクエストは変更されたファイルから分類されます。カテゴリごとに、常に自動マージする、常にレビューを必須にする、または上のスコアしきい値に従う、を選べます。件数はそのカテゴリがこれまでに必要とした内容を示します。",
2466
+ "autoMergeOffWarning": "このプリセットでは自動マージが無効なので、すべてのプルリクエストは人の確認に回ります。カテゴリのルールでこれを上書きすることはできません。",
2467
+ "noData": "履歴はまだありません",
2468
+ "record": "{merged} 件マージ、うち {autoShare} が自動",
2469
+ "frictionless": "{share} はコメント不要",
2470
+ "rule": {
2471
+ "thresholds": "スコアしきい値に従う",
2472
+ "always": "常に自動マージ",
2473
+ "never": "常にレビューを必須にする"
2474
+ }
2459
2475
  }
2460
2476
  },
2461
2477
  "observabilityConnection": {
@@ -3268,7 +3284,8 @@
3268
3284
  "human_test_ready": "人手テスト準備完了",
3269
3285
  "visual_confirmation_ready": "ビジュアル確認準備完了",
3270
3286
  "pr_review_ready": "PRレビューの指摘",
3271
- "initiative": "イニシアチブの更新"
3287
+ "initiative": "イニシアチブの更新",
3288
+ "merge_tag_request": "レビュー工数の記録依頼"
3272
3289
  },
3273
3290
  "role": {
3274
3291
  "engineering": "エンジニアリング",
@@ -5188,6 +5205,24 @@
5188
5205
  "unlinkSourceFailed": "ソースのリンクを解除できませんでした"
5189
5206
  }
5190
5207
  },
5208
+ "merge": {
5209
+ "changeClass": {
5210
+ "docs": "ドキュメント・文言",
5211
+ "test": "テスト",
5212
+ "dependency": "依存関係の更新",
5213
+ "config": "設定・CI",
5214
+ "source": "ソースコード",
5215
+ "schema": "スキーマ・マイグレーション",
5216
+ "unknown": "未分類"
5217
+ },
5218
+ "effort": {
5219
+ "prompt": "レビュー工数",
5220
+ "none": "コメントなし",
5221
+ "minor": "軽微な指摘",
5222
+ "major": "本格的な手直し",
5223
+ "classHistory": "このカテゴリで {merged} 件マージ、うち {autoShare} が自動マージ"
5224
+ }
5225
+ },
5191
5226
  "vcs": {
5192
5227
  "panel": {
5193
5228
  "title": "ソース管理",
@@ -1116,7 +1116,9 @@
1116
1116
  "no_rationale": "Scalający ocenił PR, ale nie podał uzasadnienia, więc werdyktowi nie można było zaufać na tyle, by scalić automatycznie; PR czeka na scalenie przez człowieka.",
1117
1117
  "no_assessment": "Scalający nie zwrócił możliwej do przetworzenia oceny, więc PR czeka na scalenie przez człowieka.",
1118
1118
  "merge_failed": "Oceny mieściły się w progach {preset}, ale automatyczne scalenie nie mogło się powieść (np. ochrona gałęzi lub konflikt), więc PR czeka na scalenie przez człowieka.",
1119
- "merge_partial": "Część pull requestów zadania została scalona, ale kolejnego nie udało się scalić, więc zmiana czeka, aż człowiek dokończy lub cofnie scalanie wielorepozytoryjne."
1119
+ "merge_partial": "Część pull requestów zadania została scalona, ale kolejnego nie udało się scalić, więc zmiana czeka, aż człowiek dokończy lub cofnie scalanie wielorepozytoryjne.",
1120
+ "class_auto_merge": "Ten zestaw zawsze scala automatycznie tę kategorię zmian, więc oceny nie były porównywane.",
1121
+ "class_requires_review": "Ten zestaw zawsze przekazuje tę kategorię zmian człowiekowi, niezależnie od ocen."
1120
1122
  },
1121
1123
  "scores": "Oceny",
1122
1124
  "axis": {
@@ -1721,7 +1723,8 @@
1721
1723
  "fork_decision_pending": "Oznacz jako przeczytane",
1722
1724
  "pr_review_ready": "Oznacz jako przeczytane",
1723
1725
  "budget_paused": "Oznacz jako przeczytane",
1724
- "key_drift": "Usuń nieaktualne poświadczenia"
1726
+ "key_drift": "Usuń nieaktualne poświadczenia",
1727
+ "merge_tag_request": "Zapisz nakład"
1725
1728
  },
1726
1729
  "toast": {
1727
1730
  "acted": "Oznaczono jako obsłużone",
@@ -2334,6 +2337,19 @@
2334
2337
  "run": "Zaproponuj mimo to",
2335
2338
  "skip": "Pomiń"
2336
2339
  }
2340
+ },
2341
+ "classRules": {
2342
+ "heading": "Reguły dla kategorii zmian",
2343
+ "help": "Każdy pull request jest klasyfikowany na podstawie zmienionych plików. Kategoria może być zawsze scalana automatycznie, zawsze wymagać przeglądu albo korzystać z progów powyżej. Liczby pokazują, czego ta kategoria wymagała do tej pory.",
2344
+ "autoMergeOffWarning": "W tym zestawie automatyczne scalanie jest wyłączone, więc każdy pull request nadal trafia do człowieka. Reguła kategorii tego nie zmieni.",
2345
+ "noData": "Brak historii",
2346
+ "record": "Scalono {merged}, {autoShare} automatycznie",
2347
+ "frictionless": "{share} bez żadnych uwag",
2348
+ "rule": {
2349
+ "thresholds": "Według progów oceny",
2350
+ "always": "Zawsze scalaj automatycznie",
2351
+ "never": "Zawsze wymagaj przeglądu"
2352
+ }
2337
2353
  }
2338
2354
  },
2339
2355
  "observabilityConnection": {
@@ -3256,7 +3272,8 @@
3256
3272
  "human_test_ready": "Gotowe do testow przez czlowieka",
3257
3273
  "visual_confirmation_ready": "Gotowe do potwierdzenia wizualnego",
3258
3274
  "pr_review_ready": "Uwagi z przeglądu PR",
3259
- "initiative": "Aktualizacje inicjatywy"
3275
+ "initiative": "Aktualizacje inicjatywy",
3276
+ "merge_tag_request": "Prośba o nakład przeglądu"
3260
3277
  },
3261
3278
  "role": {
3262
3279
  "engineering": "Inzynieria",
@@ -5176,6 +5193,24 @@
5176
5193
  "unlinkSourceFailed": "Nie udało się odłączyć źródła"
5177
5194
  }
5178
5195
  },
5196
+ "merge": {
5197
+ "changeClass": {
5198
+ "docs": "Dokumentacja i teksty",
5199
+ "test": "Testy",
5200
+ "dependency": "Aktualizacja zależności",
5201
+ "config": "Konfiguracja i CI",
5202
+ "source": "Kod źródłowy",
5203
+ "schema": "Schemat i migracje",
5204
+ "unknown": "Niesklasyfikowane"
5205
+ },
5206
+ "effort": {
5207
+ "prompt": "Nakład przeglądu",
5208
+ "none": "Bez uwag",
5209
+ "minor": "Drobne uwagi",
5210
+ "major": "Istotne przeróbki",
5211
+ "classHistory": "Scalono {merged} w tej kategorii, {autoShare} automatycznie"
5212
+ }
5213
+ },
5179
5214
  "vcs": {
5180
5215
  "panel": {
5181
5216
  "title": "Kontrola źródeł",
@@ -1116,7 +1116,9 @@
1116
1116
  "no_rationale": "Birleştirici PR'yi puanladı ancak bir gerekçe vermedi, bu yüzden karara otomatik birleştirme için güvenilemedi; PR bir kişinin birleştirmesini bekliyor.",
1117
1117
  "no_assessment": "Birleştirici ayrıştırılabilir bir değerlendirme döndürmedi, bu yüzden PR bir kişinin birleştirmesini bekliyor.",
1118
1118
  "merge_failed": "Puanlar {preset} eşiklerinin içindeydi ancak otomatik birleştirme tamamlanamadı (örneğin dal koruması veya bir çakışma), bu yüzden PR bir kişinin birleştirmesini bekliyor.",
1119
- "merge_partial": "Görevin bazı pull request'leri birleştirildi ancak sonraki biri birleştirilemedi, bu yüzden değişiklik bir kişinin çoklu depo birleştirmesini tamamlamasını veya geri almasını bekliyor."
1119
+ "merge_partial": "Görevin bazı pull request'leri birleştirildi ancak sonraki biri birleştirilemedi, bu yüzden değişiklik bir kişinin çoklu depo birleştirmesini tamamlamasını veya geri almasını bekliyor.",
1120
+ "class_auto_merge": "Bu ön ayar bu değişiklik kategorisini her zaman otomatik birleştirir, bu yüzden puanlar karşılaştırılmadı.",
1121
+ "class_requires_review": "Bu ön ayar, puanlar ne olursa olsun bu değişiklik kategorisini her zaman bir kişiye gönderir."
1120
1122
  },
1121
1123
  "scores": "Puanlar",
1122
1124
  "axis": {
@@ -1721,7 +1723,8 @@
1721
1723
  "fork_decision_pending": "Okundu olarak işaretle",
1722
1724
  "pr_review_ready": "Okundu işaretle",
1723
1725
  "budget_paused": "Okundu işaretle",
1724
- "key_drift": "Eski kimlik bilgilerini kaldır"
1726
+ "key_drift": "Eski kimlik bilgilerini kaldır",
1727
+ "merge_tag_request": "Eforu kaydet"
1725
1728
  },
1726
1729
  "toast": {
1727
1730
  "acted": "İşlendi olarak işaretlendi",
@@ -2456,6 +2459,19 @@
2456
2459
  "run": "Yine de öner",
2457
2460
  "skip": "Atla"
2458
2461
  }
2462
+ },
2463
+ "classRules": {
2464
+ "heading": "Değişiklik kategorisi kuralları",
2465
+ "help": "Her pull request, değiştirdiği dosyalardan sınıflandırılır. Bir kategori her zaman otomatik birleştirilebilir, her zaman inceleme isteyebilir ya da yukarıdaki puan eşiklerine dönebilir. Sayılar o kategorinin şimdiye kadar neye ihtiyaç duyduğunu gösterir.",
2466
+ "autoMergeOffWarning": "Bu ön ayarda otomatik birleştirme kapalı, bu yüzden her pull request yine bir kişiye gider. Kategori kuralı bunu geçersiz kılamaz.",
2467
+ "noData": "Henüz geçmiş yok",
2468
+ "record": "{merged} birleştirildi, {autoShare} otomatik",
2469
+ "frictionless": "{share} hiç yorum gerektirmedi",
2470
+ "rule": {
2471
+ "thresholds": "Puan eşiklerini kullan",
2472
+ "always": "Her zaman otomatik birleştir",
2473
+ "never": "Her zaman inceleme iste"
2474
+ }
2459
2475
  }
2460
2476
  },
2461
2477
  "observabilityConnection": {
@@ -3268,7 +3284,8 @@
3268
3284
  "human_test_ready": "İnsan testine hazır",
3269
3285
  "visual_confirmation_ready": "Görsel onaya hazır",
3270
3286
  "pr_review_ready": "PR inceleme bulguları",
3271
- "initiative": "Girisim guncellemeleri"
3287
+ "initiative": "Girisim guncellemeleri",
3288
+ "merge_tag_request": "İnceleme eforu etiketi istendi"
3272
3289
  },
3273
3290
  "role": {
3274
3291
  "engineering": "Mühendislik",
@@ -5188,6 +5205,24 @@
5188
5205
  "unlinkSourceFailed": "Kaynağın bağlantısı kaldırılamadı"
5189
5206
  }
5190
5207
  },
5208
+ "merge": {
5209
+ "changeClass": {
5210
+ "docs": "Dokümantasyon ve metinler",
5211
+ "test": "Testler",
5212
+ "dependency": "Bağımlılık güncellemesi",
5213
+ "config": "Yapılandırma ve CI",
5214
+ "source": "Kaynak kodu",
5215
+ "schema": "Şema ve geçişler",
5216
+ "unknown": "Sınıflandırılmamış"
5217
+ },
5218
+ "effort": {
5219
+ "prompt": "İnceleme eforu",
5220
+ "none": "Yorum yok",
5221
+ "minor": "Küçük notlar",
5222
+ "major": "Ciddi yeniden çalışma",
5223
+ "classHistory": "Bu kategoride {merged} birleştirildi, {autoShare} otomatik"
5224
+ }
5225
+ },
5191
5226
  "vcs": {
5192
5227
  "panel": {
5193
5228
  "title": "Kaynak denetimi",
@@ -1116,7 +1116,9 @@
1116
1116
  "no_rationale": "Модуль злиття оцінив PR, але не надав обґрунтування, тому вердикту не можна було довіряти для автоматичного злиття; PR очікує на злиття людиною.",
1117
1117
  "no_assessment": "Модуль злиття не повернув придатну для обробки оцінку, тому PR очікує на злиття людиною.",
1118
1118
  "merge_failed": "Оцінки були в межах порогів {preset}, але автоматичне злиття не вдалося завершити (наприклад, захист гілки або конфлікт), тому PR очікує на злиття людиною.",
1119
- "merge_partial": "Частину пул-реквестів завдання злито, але наступний не вдалося, тому зміна очікує, поки людина завершить або скасує багаторепозиторне злиття."
1119
+ "merge_partial": "Частину пул-реквестів завдання злито, але наступний не вдалося, тому зміна очікує, поки людина завершить або скасує багаторепозиторне злиття.",
1120
+ "class_auto_merge": "Цей набір завжди зливає цю категорію змін автоматично, тому оцінки не порівнювалися.",
1121
+ "class_requires_review": "Цей набір завжди передає цю категорію змін людині, незалежно від оцінок."
1120
1122
  },
1121
1123
  "scores": "Оцінки",
1122
1124
  "axis": {
@@ -1721,7 +1723,8 @@
1721
1723
  "fork_decision_pending": "Позначити прочитаним",
1722
1724
  "pr_review_ready": "Позначити прочитаним",
1723
1725
  "budget_paused": "Позначити прочитаним",
1724
- "key_drift": "Видалити застарілі облікові дані"
1726
+ "key_drift": "Видалити застарілі облікові дані",
1727
+ "merge_tag_request": "Записати обсяг"
1725
1728
  },
1726
1729
  "toast": {
1727
1730
  "acted": "Позначено як опрацьоване",
@@ -2334,6 +2337,19 @@
2334
2337
  "run": "Пропонувати все одно",
2335
2338
  "skip": "Пропустити"
2336
2339
  }
2340
+ },
2341
+ "classRules": {
2342
+ "heading": "Правила за категорією змін",
2343
+ "help": "Кожен pull request класифікується за зміненими файлами. Категорія може завжди зливатися автоматично, завжди вимагати рецензування або спиратися на порогові оцінки вище. Числа показують, чого ця категорія потребувала досі.",
2344
+ "autoMergeOffWarning": "Для цього набору автоматичне зливання вимкнено, тому кожен pull request усе одно потрапляє до людини. Правило категорії цього не змінює.",
2345
+ "noData": "Історії ще немає",
2346
+ "record": "Злито {merged}, {autoShare} автоматично",
2347
+ "frictionless": "{share} без жодних зауважень",
2348
+ "rule": {
2349
+ "thresholds": "За пороговими оцінками",
2350
+ "always": "Завжди зливати автоматично",
2351
+ "never": "Завжди вимагати рецензування"
2352
+ }
2337
2353
  }
2338
2354
  },
2339
2355
  "observabilityConnection": {
@@ -3256,7 +3272,8 @@
3256
3272
  "human_test_ready": "Готово до тестування людиною",
3257
3273
  "visual_confirmation_ready": "Готово до візуального підтвердження",
3258
3274
  "pr_review_ready": "Зауваження огляду PR",
3259
- "initiative": "Оновлення ініціативи"
3275
+ "initiative": "Оновлення ініціативи",
3276
+ "merge_tag_request": "Запит обсягу рецензування"
3260
3277
  },
3261
3278
  "role": {
3262
3279
  "engineering": "Інженерія",
@@ -5176,6 +5193,24 @@
5176
5193
  "unlinkSourceFailed": "Не вдалося від'єднати джерело"
5177
5194
  }
5178
5195
  },
5196
+ "merge": {
5197
+ "changeClass": {
5198
+ "docs": "Документація та тексти",
5199
+ "test": "Тести",
5200
+ "dependency": "Оновлення залежностей",
5201
+ "config": "Конфігурація та CI",
5202
+ "source": "Вихідний код",
5203
+ "schema": "Схема та міграції",
5204
+ "unknown": "Не класифіковано"
5205
+ },
5206
+ "effort": {
5207
+ "prompt": "Обсяг рецензування",
5208
+ "none": "Без зауважень",
5209
+ "minor": "Незначні зауваження",
5210
+ "major": "Суттєве перероблення",
5211
+ "classHistory": "У цій категорії злито {merged}, {autoShare} автоматично"
5212
+ }
5213
+ },
5179
5214
  "vcs": {
5180
5215
  "panel": {
5181
5216
  "title": "Керування кодом",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.157.0",
3
+ "version": "0.158.0",
4
4
  "description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,7 +40,7 @@
40
40
  "valibot": "^1.4.2",
41
41
  "vue": "3.5.40",
42
42
  "wretch": "^3.0.9",
43
- "@cat-factory/contracts": "0.166.0"
43
+ "@cat-factory/contracts": "0.167.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@toad-contracts/testing": "0.3.2",