@cat-factory/app 0.266.1 → 0.268.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.
Files changed (35) hide show
  1. package/app/components/board/AddTaskModal.vue +3 -0
  2. package/app/components/board/nodes/TaskCard.vue +7 -1
  3. package/app/components/layout/AccountRiskPolicySettings.vue +120 -0
  4. package/app/components/pipeline/PipelineBuilder.vue +62 -39
  5. package/app/components/requirements/RequirementsReviewWindow.logic.spec.ts +52 -10
  6. package/app/components/requirements/RequirementsReviewWindow.logic.ts +44 -6
  7. package/app/components/requirements/RequirementsReviewWindow.vue +114 -17
  8. package/app/components/settings/AccountSettingsPanel.vue +17 -2
  9. package/app/components/settings/RiskPolicyCreateForm.vue +164 -0
  10. package/app/components/settings/RiskPolicyEditorRow.vue +315 -0
  11. package/app/components/settings/RiskPolicyInheritedRow.vue +69 -0
  12. package/app/components/settings/RiskPolicyPanel.vue +176 -576
  13. package/app/composables/api/presets.ts +50 -13
  14. package/app/composables/usePipelineErrorToast.ts +11 -0
  15. package/app/composables/usePipelineLibraryActions.ts +82 -0
  16. package/app/composables/useRiskPolicyHealth.ts +14 -1
  17. package/app/composables/useRunStart.spec.ts +9 -5
  18. package/app/stores/pipelines/persistence.ts +32 -2
  19. package/app/stores/pipelines.ts +25 -1
  20. package/app/stores/riskPolicies.ts +123 -13
  21. package/app/types/merge.ts +5 -0
  22. package/app/utils/riskPolicy.spec.ts +28 -0
  23. package/app/utils/riskPolicy.ts +24 -1
  24. package/app/utils/riskPolicyDraft.ts +203 -0
  25. package/i18n/locales/de.json +71 -5
  26. package/i18n/locales/en.json +71 -5
  27. package/i18n/locales/es.json +71 -5
  28. package/i18n/locales/fr.json +71 -5
  29. package/i18n/locales/he.json +71 -5
  30. package/i18n/locales/it.json +71 -5
  31. package/i18n/locales/ja.json +71 -5
  32. package/i18n/locales/pl.json +71 -5
  33. package/i18n/locales/tr.json +71 -5
  34. package/i18n/locales/uk.json +71 -5
  35. package/package.json +2 -2
@@ -595,7 +595,9 @@
595
595
  "document_already_linked": "Document déjà joint",
596
596
  "dry_run_not_mergeable": "Une exécution à blanc ne peut pas être fusionnée",
597
597
  "submission_not_allowed": "Fusion non autorisée pour cette exécution",
598
- "webhook_limit_reached": "Limite de webhooks atteinte"
598
+ "webhook_limit_reached": "Limite de webhooks atteinte",
599
+ "risk_policy_inherited": "Cette politique appartient au compte",
600
+ "risk_policy_not_inherited": "Cette politique appartient à ce tableau"
599
601
  },
600
602
  "description": {
601
603
  "dependencies_unmet": "Cette tâche dépend d'autres qui ne sont pas encore terminées. Terminez-les ou débloquez-les, puis relancez-la.",
@@ -634,7 +636,9 @@
634
636
  "document_already_linked": "Ce document est joint à une autre tâche. Détachez-le d'abord, ou joignez-en une copie distincte.",
635
637
  "dry_run_not_mergeable": "Cette pull request provient d'une exécution à blanc et ne peut pas être fusionnée ici. Relancez la tâche en exécution réelle pour produire une pull request que cet espace de travail fusionnera.",
636
638
  "submission_not_allowed": "La politique de fusion de cette tâche n'autorise pas le rôle qui a lancé cette exécution à fusionner ce type de changement. Un coéquipier dont le rôle le permet peut le faire, ou un admin peut élargir la politique dans le préréglage de fusion.",
637
- "webhook_limit_reached": "Cet espace de travail a déjà enregistré le nombre maximal de webhooks sortants. Supprimez-en un dont vous n’avez plus besoin, puis enregistrez celui-ci à nouveau."
639
+ "webhook_limit_reached": "Cet espace de travail a déjà enregistré le nombre maximal de webhooks sortants. Supprimez-en un dont vous n’avez plus besoin, puis enregistrez celui-ci à nouveau.",
640
+ "risk_policy_inherited": "Elle est partagée par tous les tableaux du compte et ne peut donc pas être modifiée ici. Clonez-la vers ce tableau et modifiez la copie.",
641
+ "risk_policy_not_inherited": "C'est déjà la politique propre à ce tableau : modifiez-la directement, ou supprimez-la si vous ne voulez plus qu'elle soit proposée."
638
642
  },
639
643
  "action": {
640
644
  "connectGitHub": "Connecter GitHub",
@@ -2596,6 +2600,12 @@
2596
2600
  "load": "Le journal d’audit n’a pas pu être chargé.",
2597
2601
  "loadMore": "Impossible de charger les entrées plus anciennes"
2598
2602
  }
2603
+ },
2604
+ "accountRiskPolicies": {
2605
+ "intro": "Postures de fusion partagées par tous les tableaux de ce compte. Chaque tableau en hérite en lecture seule et peut en cloner une pour modifier une copie, ou la masquer. La politique qui régit une tâche sans choix se définit par tableau.",
2606
+ "empty": "Aucune politique de risque du compte pour l'instant. Les tableaux utilisent leurs propres bibliothèques jusqu'à ce que vous en ajoutiez une.",
2607
+ "loadFailed": "Impossible de charger les politiques de risque du compte",
2608
+ "confirmDelete": "« {name} » sera retirée de tous les tableaux de ce compte. Les tâches qui l'avaient choisie repasseront à la politique par défaut de leur tableau."
2599
2609
  }
2600
2610
  },
2601
2611
  "mcpAuthorize": {
@@ -2715,7 +2725,8 @@
2715
2725
  "team": "Équipe et accès",
2716
2726
  "fragments": "Fragments de contexte",
2717
2727
  "skills": "Compétences",
2718
- "foundational": "Services fondamentaux"
2728
+ "foundational": "Services fondamentaux",
2729
+ "riskPolicies": "Politiques de risque"
2719
2730
  }
2720
2731
  },
2721
2732
  "providerConnection": {
@@ -3010,7 +3021,11 @@
3010
3021
  "created": "Politique créée",
3011
3022
  "createFailed": "Impossible de créer la politique",
3012
3023
  "defaultFailed": "Impossible de définir par défaut",
3013
- "deleteFailed": "Impossible de supprimer la politique"
3024
+ "deleteFailed": "Impossible de supprimer la politique",
3025
+ "cloned": "Politique clonée vers ce tableau",
3026
+ "cloneFailed": "Impossible de cloner la politique",
3027
+ "hideFailed": "Impossible de masquer la politique",
3028
+ "unhideFailed": "Impossible de rétablir la politique"
3014
3029
  },
3015
3030
  "autoMergeOnHint": "Fusionner automatiquement si dans les limites de la politique.",
3016
3031
  "autoMergeOffHint": "Toujours envoyer la PR en revue humaine.",
@@ -3068,6 +3083,36 @@
3068
3083
  "label": "Terminer les exécutions sans surveillance sans attendre une personne",
3069
3084
  "unattendedHint": "Quand une boucle automatique abandonne (un companion à sa limite de reprises, une revue à sa limite de passes, des suivis non triés), l'exécution continue en le consignant au lieu de s'arrêter. Les points de contrôle demandés par le pipeline, comme le test humain, la revue et l'approbation, arrêtent toujours l'exécution.",
3070
3085
  "attendedHint": "Quand une boucle automatique abandonne, l'exécution s'arrête et attend un choix. Adapté à un tableau que quelqu'un surveille ; une exécution lancée via l'API attend indéfiniment."
3086
+ },
3087
+ "autoAnswer": {
3088
+ "label": "Confiance minimale pour une réponse automatique (%)",
3089
+ "hint": "Le degré de certitude que le Requirement Writer doit atteindre pour qu'un run sans surveillance conserve sa réponse suggérée au lieu de s'arrêter. Seuls les constats jugés traitables sans product owner sont éligibles."
3090
+ },
3091
+ "tier": {
3092
+ "account": "Du compte",
3093
+ "accountHint": "Définie pour tout le compte. Chaque tableau en hérite ; seule une administration du compte peut la modifier."
3094
+ },
3095
+ "own": {
3096
+ "heading": "Politiques de ce tableau"
3097
+ },
3098
+ "inherited": {
3099
+ "heading": "Héritées du compte",
3100
+ "hint": "Partagées par tous les tableaux de ce compte. Clonez-en une pour en modifier une copie ici, ou masquez-la afin qu'aucune tâche de ce tableau ne puisse la choisir.",
3101
+ "clone": "Cloner vers le tableau",
3102
+ "cloneHint": "Copier cette politique dans le tableau, où vous pourrez modifier ses limites.",
3103
+ "copyName": "{name} (copie)",
3104
+ "hide": "Masquer",
3105
+ "hideHint": "Ne plus proposer cette politique sur ce tableau. Vous pourrez la rétablir plus tard."
3106
+ },
3107
+ "hidden": {
3108
+ "heading": "Politiques du compte masquées",
3109
+ "restore": "Rétablir",
3110
+ "withdrawn": "Plus définie par le compte",
3111
+ "loadFailed": "Cette liste n'a pas pu être chargée : une politique peut donc être masquée sans figurer ici."
3112
+ },
3113
+ "confirmHide": {
3114
+ "title": "Masquer cette politique ?",
3115
+ "body": "« {name} » ne sera plus proposée sur ce tableau et les tâches qui l'avaient choisie repasseront à la politique par défaut du tableau. Vous pourrez la rétablir plus tard."
3071
3116
  }
3072
3117
  },
3073
3118
  "observabilityConnection": {
@@ -4948,7 +4993,17 @@
4948
4993
  "binaryComparison": "Comparer les candidats avant livraison",
4949
4994
  "binaryPerGenerator": "Candidats par intégration",
4950
4995
  "binaryMultiSelect": "Autoriser à en conserver plusieurs",
4951
- "binaryComparisonUnreachable": "Cette étape ne peut produire qu’un candidat par sujet : il n’y aurait rien à comparer et le seul serait conservé sans être présenté. Sélectionnez une deuxième intégration ou augmentez le nombre de candidats par intégration."
4996
+ "binaryComparisonUnreachable": "Cette étape ne peut produire qu’un candidat par sujet : il n’y aurait rien à comparer et le seul serait conservé sans être présenté. Sélectionnez une deuxième intégration ou augmentez le nombre de candidats par intégration.",
4997
+ "scopeDefault": {
4998
+ "interactive": "Défaut dans l'application",
4999
+ "interactiveHint": "Ce qu'exécute une tâche lancée depuis le tableau lorsqu'elle ne fixe aucun pipeline.",
5000
+ "unattended": "Défaut sans surveillance",
5001
+ "unattendedHint": "Ce qu'exécute un run que personne ne surveille (API, ticket, planification) quand la tâche ne fixe aucun pipeline.",
5002
+ "claimInteractive": "Définir comme défaut dans l'application",
5003
+ "releaseInteractive": "Ne plus être le défaut dans l'application",
5004
+ "claimUnattended": "Définir comme défaut sans surveillance",
5005
+ "releaseUnattended": "Ne plus être le défaut sans surveillance"
5006
+ }
4952
5007
  },
4953
5008
  "progress": {
4954
5009
  "status": {
@@ -5396,6 +5451,17 @@
5396
5451
  "reReview": "Impossible de relire les exigences",
5397
5452
  "proceed": "Impossible de continuer",
5398
5453
  "resolveReview": "Impossible de résoudre la revue"
5454
+ },
5455
+ "findingClass": {
5456
+ "judgement": "Votre décision requise",
5457
+ "judgementHint": "Un choix métier, produit ou de domaine, ou une information que le relecteur n'avait pas. Vous seul pouvez trancher.",
5458
+ "practice": "Traitable par la pratique",
5459
+ "practiceHint": "Tranché par la pratique établie, la stack déjà utilisée ou le contexte fourni. Prérempli : gardez-le ou modifiez-le."
5460
+ },
5461
+ "confidence": {
5462
+ "high": "Confiance élevée",
5463
+ "medium": "Confiance moyenne",
5464
+ "low": "Confiance faible"
5399
5465
  }
5400
5466
  },
5401
5467
  "clarity": {
@@ -595,7 +595,9 @@
595
595
  "document_already_linked": "המסמך כבר מצורף",
596
596
  "dry_run_not_mergeable": "לא ניתן למזג הרצת יבש",
597
597
  "submission_not_allowed": "מיזוג אינו מותר עבור הרצה זו",
598
- "webhook_limit_reached": "הגעת למגבלת ה-Webhooks"
598
+ "webhook_limit_reached": "הגעת למגבלת ה-Webhooks",
599
+ "risk_policy_inherited": "המדיניות הזו שייכת לחשבון",
600
+ "risk_policy_not_inherited": "המדיניות הזו שייכת ללוח הזה"
599
601
  },
600
602
  "description": {
601
603
  "dependencies_unmet": "משימה זו תלויה במשימות אחרות שטרם הושלמו. השלם או שחרר אותן, ולאחר מכן הפעל אותה שוב.",
@@ -634,7 +636,9 @@
634
636
  "document_already_linked": "המסמך מצורף למשימה אחרת. נתקו אותו שם תחילה, או צרפו עותק נפרד.",
635
637
  "dry_run_not_mergeable": "בקשת המשיכה הזו הגיעה מהרצת יבש, ולכן לא ניתן למזג אותה מכאן. הפעילו את המשימה מחדש כהרצה רגילה כדי ליצור בקשת משיכה שסביבת העבודה הזו תמזג.",
636
638
  "submission_not_allowed": "מדיניות המיזוג של המשימה הזו אינה מתירה לתפקיד שהתחיל את ההרצה למזג שינוי מסוג זה. חבר צוות שתפקידו מתיר זאת יכול למזג, או שמנהל יכול להרחיב את המדיניות בהגדרת המיזוג.",
637
- "webhook_limit_reached": "במרחב העבודה הזה כבר רשום המספר המרבי של Webhooks יוצאים. הסירו אחד שאינכם צריכים עוד ולאחר מכן רשמו את זה שוב."
639
+ "webhook_limit_reached": "במרחב העבודה הזה כבר רשום המספר המרבי של Webhooks יוצאים. הסירו אחד שאינכם צריכים עוד ולאחר מכן רשמו את זה שוב.",
640
+ "risk_policy_inherited": "היא משותפת לכל הלוחות בחשבון, ולכן לא ניתן לשנות אותה מכאן. שכפלו אותה ללוח הזה וערכו את העותק.",
641
+ "risk_policy_not_inherited": "היא כבר המדיניות של הלוח הזה: ערכו אותה ישירות, או מחקו אותה אם אינכם רוצים שתוצע."
638
642
  },
639
643
  "action": {
640
644
  "connectGitHub": "חבר את GitHub",
@@ -2596,6 +2600,12 @@
2596
2600
  "load": "לא ניתן היה לטעון את יומן הביקורת.",
2597
2601
  "loadMore": "לא ניתן היה לטעון רשומות ישנות יותר"
2598
2602
  }
2603
+ },
2604
+ "accountRiskPolicies": {
2605
+ "intro": "עמדות מיזוג המשותפות לכל הלוחות בחשבון הזה. כל לוח יורש אותן לקריאה בלבד, ויכול לשכפל אחת כדי לערוך עותק או להסתיר אותה. איזו מדיניות חלה על משימה שלא בחרה אחת נקבע לכל לוח בנפרד.",
2606
+ "empty": "אין עדיין מדיניות סיכון בהיקף החשבון. עד שתוסיפו אחת, הלוחות פועלים לפי הספריות שלהם.",
2607
+ "loadFailed": "לא ניתן לטעון את מדיניות הסיכון של החשבון",
2608
+ "confirmDelete": "\"{name}\" תוסר מכל הלוחות בחשבון הזה. משימות שבחרו בה יחזרו למדיניות ברירת המחדל של הלוח שלהן."
2599
2609
  }
2600
2610
  },
2601
2611
  "mcpAuthorize": {
@@ -2715,7 +2725,8 @@
2715
2725
  "team": "צוות וגישה",
2716
2726
  "fragments": "מקטעי הקשר",
2717
2727
  "skills": "כישורים",
2718
- "foundational": "שירותי תשתית"
2728
+ "foundational": "שירותי תשתית",
2729
+ "riskPolicies": "מדיניות סיכון"
2719
2730
  }
2720
2731
  },
2721
2732
  "infrastructure": {
@@ -3152,7 +3163,11 @@
3152
3163
  "created": "המדיניות נוצרה",
3153
3164
  "createFailed": "לא ניתן היה ליצור מדיניות",
3154
3165
  "defaultFailed": "לא ניתן היה להגדיר ברירת מחדל",
3155
- "deleteFailed": "לא ניתן היה למחוק את המדיניות"
3166
+ "deleteFailed": "לא ניתן היה למחוק את המדיניות",
3167
+ "cloned": "המדיניות שוכפלה ללוח הזה",
3168
+ "cloneFailed": "לא ניתן לשכפל את המדיניות",
3169
+ "hideFailed": "לא ניתן להסתיר את המדיניות",
3170
+ "unhideFailed": "לא ניתן לשחזר את המדיניות"
3156
3171
  },
3157
3172
  "autoMergeOnHint": "מזג אוטומטית כשבתוך גבולות המדיניות.",
3158
3173
  "autoMergeOffHint": "נתב תמיד את ה-PR לבדיקה אנושית.",
@@ -3210,6 +3225,36 @@
3210
3225
  "label": "לסיים הרצות ללא השגחה בלי להמתין לאדם",
3211
3226
  "unattendedHint": "כשלולאה אוטומטית מוותרת (קומפניון שמיצה את מכסת התיקונים, סקירה שמיצתה את מכסת המעברים, פריטי המשך שלא מוינו), ההרצה ממשיכה תוך תיעוד במקום לעצור. שערים שהצינור ביקש, כגון בדיקה אנושית, סקירה ואישור, עדיין עוצרים את ההרצה.",
3212
3227
  "attendedHint": "כשלולאה אוטומטית מוותרת, ההרצה נעצרת וממתינה שמישהו יחליט. מתאים ללוח שמישהו צופה בו; הרצה שהופעלה דרך ה-API תמתין ללא הגבלת זמן."
3228
+ },
3229
+ "autoAnswer": {
3230
+ "label": "רף ביטחון לתשובה אוטומטית (%)",
3231
+ "hint": "עד כמה Requirement Writer צריך להיות בטוח כדי שריצה בלי השגחה תשמור על התשובה המוצעת במקום לעצור לאדם. רק ממצאים שהמבקר סימן כניתנים למענה בלי בעל מוצר נכללים."
3232
+ },
3233
+ "tier": {
3234
+ "account": "מהחשבון",
3235
+ "accountHint": "מוגדרת לכל החשבון. כל לוח יורש אותה; רק הנהלת החשבון יכולה לשנות אותה."
3236
+ },
3237
+ "own": {
3238
+ "heading": "המדיניות של הלוח הזה"
3239
+ },
3240
+ "inherited": {
3241
+ "heading": "בירושה מהחשבון",
3242
+ "hint": "משותפות לכל הלוחות בחשבון הזה. שכפלו מדיניות כדי לערוך עותק כאן, או הסתירו אותה כדי שאף משימה בלוח הזה לא תוכל לבחור בה.",
3243
+ "clone": "שכפול ללוח",
3244
+ "cloneHint": "העתקת המדיניות ללוח, שם ניתן לערוך את המגבלות שלה.",
3245
+ "copyName": "{name} (עותק)",
3246
+ "hide": "הסתרה",
3247
+ "hideHint": "להפסיק להציע את המדיניות בלוח הזה. אפשר לשחזר אותה אחר כך."
3248
+ },
3249
+ "hidden": {
3250
+ "heading": "מדיניות חשבון מוסתרת",
3251
+ "restore": "שחזור",
3252
+ "withdrawn": "החשבון אינו מגדיר אותה עוד",
3253
+ "loadFailed": "לא ניתן לטעון את הרשימה הזו, כך שייתכן שמדיניות מוסתרת אינה מופיעה כאן."
3254
+ },
3255
+ "confirmHide": {
3256
+ "title": "להסתיר את המדיניות הזו?",
3257
+ "body": "\"{name}\" לא תוצע בלוח הזה, ומשימות שבחרו בה יחזרו למדיניות ברירת המחדל של הלוח. אפשר לשחזר אותה אחר כך."
3213
3258
  }
3214
3259
  },
3215
3260
  "observabilityConnection": {
@@ -4948,7 +4993,17 @@
4948
4993
  "binaryComparison": "להשוות מועמדים לפני מסירה",
4949
4994
  "binaryPerGenerator": "מועמדים לכל אינטגרציה",
4950
4995
  "binaryMultiSelect": "לאפשר לשמור יותר מאחד",
4951
- "binaryComparisonUnreachable": "השלב הזה יכול להפיק רק מועמד אחד לכל נושא, כך שלא יהיה מה להשוות והיחיד יישמר בלי לשאול. בחרו אינטגרציה נוספת או העלו את מספר המועמדים לכל אינטגרציה."
4996
+ "binaryComparisonUnreachable": "השלב הזה יכול להפיק רק מועמד אחד לכל נושא, כך שלא יהיה מה להשוות והיחיד יישמר בלי לשאול. בחרו אינטגרציה נוספת או העלו את מספר המועמדים לכל אינטגרציה.",
4997
+ "scopeDefault": {
4998
+ "interactive": "ברירת מחדל באפליקציה",
4999
+ "interactiveHint": "מה שמריצה משימה שהופעלה מהלוח כשלא נקבע לה תהליך משלה.",
5000
+ "unattended": "ברירת מחדל ללא השגחה",
5001
+ "unattendedHint": "מה שמריץ ריצה שאף אחד לא צופה בה (ה-API, כרטיס, תזמון) כשלמשימה אין תהליך קבוע.",
5002
+ "claimInteractive": "הפוך לברירת המחדל באפליקציה",
5003
+ "releaseInteractive": "בטל כברירת מחדל באפליקציה",
5004
+ "claimUnattended": "הפוך לברירת המחדל ללא השגחה",
5005
+ "releaseUnattended": "בטל כברירת מחדל ללא השגחה"
5006
+ }
4952
5007
  },
4953
5008
  "progress": {
4954
5009
  "status": {
@@ -5396,6 +5451,17 @@
5396
5451
  "reReview": "לא ניתן לסקור מחדש את הדרישות",
5397
5452
  "proceed": "לא ניתן להמשיך",
5398
5453
  "resolveReview": "לא ניתן לפתור את הסקירה"
5454
+ },
5455
+ "findingClass": {
5456
+ "judgement": "דורש את ההחלטה שלך",
5457
+ "judgementHint": "הכרעה עסקית, מוצרית או תחומית, או מידע שלא נמסר למבקר. רק את/ה יכול/ה להכריע.",
5458
+ "practice": "ניתן לענות לפי פרקטיקה מקובלת",
5459
+ "practiceHint": "נקבע לפי פרקטיקה מקובלת, הסטאק שכבר בשימוש או ההקשר שנמסר. מולא מראש — אפשר לאשר או לשנות."
5460
+ },
5461
+ "confidence": {
5462
+ "high": "ביטחון גבוה",
5463
+ "medium": "ביטחון בינוני",
5464
+ "low": "ביטחון נמוך"
5399
5465
  }
5400
5466
  },
5401
5467
  "clarity": {
@@ -116,7 +116,8 @@
116
116
  "team": "Team e accesso",
117
117
  "fragments": "Frammenti di contesto",
118
118
  "skills": "Competenze",
119
- "foundational": "Servizi fondamentali"
119
+ "foundational": "Servizi fondamentali",
120
+ "riskPolicies": "Criteri di rischio"
120
121
  }
121
122
  },
122
123
  "infrastructure": {
@@ -559,7 +560,11 @@
559
560
  "created": "Criterio creato",
560
561
  "createFailed": "Impossibile creare il criterio",
561
562
  "defaultFailed": "Impossibile impostare il predefinito",
562
- "deleteFailed": "Impossibile eliminare il criterio"
563
+ "deleteFailed": "Impossibile eliminare il criterio",
564
+ "cloned": "Criterio clonato in questa bacheca",
565
+ "cloneFailed": "Impossibile clonare il criterio",
566
+ "hideFailed": "Impossibile nascondere il criterio",
567
+ "unhideFailed": "Impossibile ripristinare il criterio"
563
568
  },
564
569
  "forkDecision": {
565
570
  "label": "Decisione di biforcazione dell'implementazione",
@@ -611,6 +616,36 @@
611
616
  "label": "Completare le esecuzioni non presidiate senza attendere una persona",
612
617
  "unattendedHint": "Quando un ciclo automatico si arrende (un companion al suo limite di rilavorazioni, una revisione al suo limite di passaggi, follow-up non smistati), l'esecuzione prosegue lasciandone traccia invece di fermarsi. I varchi richiesti dalla pipeline, come test manuale, revisione e approvazione, fermano comunque l'esecuzione.",
613
618
  "attendedHint": "Quando un ciclo automatico si arrende, l'esecuzione si ferma e attende una scelta. Adatto a una board che qualcuno sta guardando; un'esecuzione avviata via API attende all'infinito."
619
+ },
620
+ "autoAnswer": {
621
+ "label": "Confidenza minima per la risposta automatica (%)",
622
+ "hint": "Quanto deve essere sicuro il Requirement Writer perché un run non presidiato mantenga la risposta suggerita invece di fermarsi per una persona. Sono ammessi solo i rilievi che il revisore ha giudicato risolvibili senza un product owner."
623
+ },
624
+ "tier": {
625
+ "account": "Dall'account",
626
+ "accountHint": "Definita per tutto l'account. Ogni bacheca la eredita; solo un'amministrazione dell'account può modificarla."
627
+ },
628
+ "own": {
629
+ "heading": "Criteri di questa bacheca"
630
+ },
631
+ "inherited": {
632
+ "heading": "Ereditati dall'account",
633
+ "hint": "Condivisi con tutte le bacheche di questo account. Clona un criterio per modificarne una copia qui, oppure nascondilo così nessuna attività di questa bacheca potrà scegliolo.",
634
+ "clone": "Clona nella bacheca",
635
+ "cloneHint": "Copia questo criterio nella bacheca, dove puoi modificarne i limiti.",
636
+ "copyName": "{name} (copia)",
637
+ "hide": "Nascondi",
638
+ "hideHint": "Non offrire più questo criterio in questa bacheca. Potrai ripristinarlo più tardi."
639
+ },
640
+ "hidden": {
641
+ "heading": "Criteri dell'account nascosti",
642
+ "restore": "Ripristina",
643
+ "withdrawn": "Non più definito dall'account",
644
+ "loadFailed": "Non è stato possibile caricare questo elenco, quindi un criterio potrebbe essere nascosto senza comparire qui."
645
+ },
646
+ "confirmHide": {
647
+ "title": "Nascondere questo criterio?",
648
+ "body": "«{name}» non verrà più offerto in questa bacheca e le attività che lo avevano scelto torneranno al criterio predefinito della bacheca. Potrai ripristinarlo più tardi."
614
649
  }
615
650
  },
616
651
  "observabilityConnection": {
@@ -2843,6 +2878,12 @@
2843
2878
  "load": "Impossibile caricare il registro di controllo.",
2844
2879
  "loadMore": "Impossibile caricare le voci precedenti"
2845
2880
  }
2881
+ },
2882
+ "accountRiskPolicies": {
2883
+ "intro": "Posture di merge condivise da tutte le bacheche di questo account. Ogni bacheca le eredita in sola lettura e può clonarne una per modificarne una copia oppure nasconderla. Quale criterio governa un'attività che non ne ha scelto nessuno si imposta per bacheca.",
2884
+ "empty": "Ancora nessun criterio di rischio dell'account. Le bacheche usano le proprie librerie finché non ne aggiungi uno.",
2885
+ "loadFailed": "Impossibile caricare i criteri di rischio dell'account",
2886
+ "confirmDelete": "«{name}» verrà ritirato da tutte le bacheche di questo account. Le attività che lo avevano scelto torneranno al criterio predefinito della loro bacheca."
2846
2887
  }
2847
2888
  },
2848
2889
  "board": {
@@ -4509,7 +4550,17 @@
4509
4550
  "binaryComparison": "Confronta i candidati prima di consegnare",
4510
4551
  "binaryPerGenerator": "Candidati per integrazione",
4511
4552
  "binaryMultiSelect": "Consenti di tenerne più di uno",
4512
- "binaryComparisonUnreachable": "Questo passo può produrre un solo candidato per soggetto, quindi non ci sarebbe nulla da confrontare e l’unico verrebbe tenuto senza chiedere. Seleziona una seconda integrazione oppure aumenta il numero di candidati per integrazione."
4553
+ "binaryComparisonUnreachable": "Questo passo può produrre un solo candidato per soggetto, quindi non ci sarebbe nulla da confrontare e l’unico verrebbe tenuto senza chiedere. Seleziona una seconda integrazione oppure aumenta il numero di candidati per integrazione.",
4554
+ "scopeDefault": {
4555
+ "interactive": "Predefinita nell'app",
4556
+ "interactiveHint": "Cosa esegue un task avviato dalla board quando non fissa una pipeline propria.",
4557
+ "unattended": "Predefinita non presidiata",
4558
+ "unattendedHint": "Cosa esegue un run che nessuno sta guardando (API, ticket, pianificazione) quando il task non fissa una pipeline.",
4559
+ "claimInteractive": "Rendi predefinita nell'app",
4560
+ "releaseInteractive": "Non più predefinita nell'app",
4561
+ "claimUnattended": "Rendi predefinita non presidiata",
4562
+ "releaseUnattended": "Non più predefinita non presidiata"
4563
+ }
4513
4564
  },
4514
4565
  "progress": {
4515
4566
  "status": {
@@ -4794,6 +4845,17 @@
4794
4845
  "reReview": "Impossibile rivedere di nuovo i requisiti",
4795
4846
  "proceed": "Impossibile procedere",
4796
4847
  "resolveReview": "Impossibile risolvere la revisione"
4848
+ },
4849
+ "findingClass": {
4850
+ "judgement": "Serve una tua decisione",
4851
+ "judgementHint": "Una scelta di business, prodotto o dominio, o qualcosa che il revisore non sapeva. Solo tu puoi deciderlo.",
4852
+ "practice": "Risolvibile con la prassi",
4853
+ "practiceHint": "Risolto dalla prassi consolidata, dallo stack già in uso o dal contesto fornito. Precompilato: confermalo o modificalo."
4854
+ },
4855
+ "confidence": {
4856
+ "high": "Confidenza alta",
4857
+ "medium": "Confidenza media",
4858
+ "low": "Confidenza bassa"
4797
4859
  }
4798
4860
  },
4799
4861
  "bootstrap": {
@@ -5755,7 +5817,9 @@
5755
5817
  "document_already_linked": "Documento già allegato",
5756
5818
  "dry_run_not_mergeable": "Una prova non può essere unita",
5757
5819
  "submission_not_allowed": "Unione non consentita per questa esecuzione",
5758
- "webhook_limit_reached": "Limite di webhook raggiunto"
5820
+ "webhook_limit_reached": "Limite di webhook raggiunto",
5821
+ "risk_policy_inherited": "Questo criterio appartiene all'account",
5822
+ "risk_policy_not_inherited": "Questo criterio appartiene a questa bacheca"
5759
5823
  },
5760
5824
  "description": {
5761
5825
  "dependencies_unmet": "Questa attività dipende da altre non ancora completate. Completale o sbloccale, poi avviala di nuovo.",
@@ -5794,7 +5858,9 @@
5794
5858
  "document_already_linked": "Quel documento è allegato a un'altra attività. Scollegalo prima da lì oppure allega una copia separata.",
5795
5859
  "dry_run_not_mergeable": "Questa pull request proviene da una prova, quindi non può essere unita da qui. Riavvia l’attività come esecuzione reale per produrre una pull request che questo spazio di lavoro unirà.",
5796
5860
  "submission_not_allowed": "La politica di unione di questa attività non consente al ruolo che ha avviato l'esecuzione di unire questo tipo di modifica. Un collega il cui ruolo lo consente può farlo, oppure un amministratore può ampliare la politica nel preset di unione.",
5797
- "webhook_limit_reached": "Questo spazio di lavoro ha già registrato il numero massimo di webhook in uscita. Rimuovine uno che non ti serve più, poi registra di nuovo questo."
5861
+ "webhook_limit_reached": "Questo spazio di lavoro ha già registrato il numero massimo di webhook in uscita. Rimuovine uno che non ti serve più, poi registra di nuovo questo.",
5862
+ "risk_policy_inherited": "È condiviso con tutte le bacheche dell'account, quindi non può essere modificato da qui. Clonalo in questa bacheca e modifica la copia.",
5863
+ "risk_policy_not_inherited": "È già il criterio proprio di questa bacheca: modificalo direttamente, oppure eliminalo se non vuoi più che venga offerto."
5798
5864
  },
5799
5865
  "action": {
5800
5866
  "connectGitHub": "Collega GitHub",
@@ -595,7 +595,9 @@
595
595
  "document_already_linked": "ドキュメントは既に添付されています",
596
596
  "dry_run_not_mergeable": "ドライランはマージできません",
597
597
  "submission_not_allowed": "この実行ではマージできません",
598
- "webhook_limit_reached": "Webhook の上限に達しました"
598
+ "webhook_limit_reached": "Webhook の上限に達しました",
599
+ "risk_policy_inherited": "このポリシーはアカウントのものです",
600
+ "risk_policy_not_inherited": "このポリシーはこのボードのものです"
599
601
  },
600
602
  "description": {
601
603
  "dependencies_unmet": "このタスクは、まだ完了していない他のタスクに依存しています。それらを完了または解除してから、もう一度開始してください。",
@@ -634,7 +636,9 @@
634
636
  "document_already_linked": "そのドキュメントは別のタスクに添付されています。先にそちらで添付を解除するか、別のコピーを添付してください。",
635
637
  "dry_run_not_mergeable": "このプルリクエストはドライランによるものなので、ここからはマージできません。このワークスペースがマージするプルリクエストを作るには、タスクを通常の実行として開始し直してください。",
636
638
  "submission_not_allowed": "このタスクのマージポリシーでは、実行を開始したロールがこの種類の変更をマージすることを許可していません。マージできるロールのメンバーが対応するか、管理者がマージプリセットでポリシーを広げてください。",
637
- "webhook_limit_reached": "このワークスペースには送信 Webhook がすでに上限数まで登録されています。不要なものを削除してから、もう一度登録してください。"
639
+ "webhook_limit_reached": "このワークスペースには送信 Webhook がすでに上限数まで登録されています。不要なものを削除してから、もう一度登録してください。",
640
+ "risk_policy_inherited": "アカウント内のすべてのボードで共有されているため、ここからは変更できません。このボードに複製してコピーを編集してください。",
641
+ "risk_policy_not_inherited": "すでにこのボード自身のポリシーです。直接編集するか、提示したくない場合は削除してください。"
638
642
  },
639
643
  "action": {
640
644
  "connectGitHub": "GitHub に接続",
@@ -2596,6 +2600,12 @@
2596
2600
  "load": "監査ログを読み込めませんでした。",
2597
2601
  "loadMore": "以前の記録を読み込めませんでした"
2598
2602
  }
2603
+ },
2604
+ "accountRiskPolicies": {
2605
+ "intro": "このアカウントのすべてのボードで共有されるマージ方針です。各ボードは読み取り専用で継承し、複製してコピーを編集するか、非表示にできます。ポリシーを選んでいないタスクにどれを適用するかはボードごとに設定します。",
2606
+ "empty": "アカウント全体のリスクポリシーはまだありません。追加するまで各ボードは自分のライブラリで動作します。",
2607
+ "loadFailed": "アカウントのリスクポリシーを読み込めませんでした",
2608
+ "confirmDelete": "「{name}」はこのアカウントのすべてのボードから取り下げられます。これを選択していたタスクは各ボードの既定に戻ります。"
2599
2609
  }
2600
2610
  },
2601
2611
  "mcpAuthorize": {
@@ -2715,7 +2725,8 @@
2715
2725
  "team": "チームとアクセス",
2716
2726
  "fragments": "コンテキストフラグメント",
2717
2727
  "skills": "スキル",
2718
- "foundational": "基盤サービス"
2728
+ "foundational": "基盤サービス",
2729
+ "riskPolicies": "リスクポリシー"
2719
2730
  }
2720
2731
  },
2721
2732
  "infrastructure": {
@@ -3152,7 +3163,11 @@
3152
3163
  "created": "ポリシーを作成しました",
3153
3164
  "createFailed": "ポリシーを作成できませんでした",
3154
3165
  "defaultFailed": "デフォルトを設定できませんでした",
3155
- "deleteFailed": "ポリシーを削除できませんでした"
3166
+ "deleteFailed": "ポリシーを削除できませんでした",
3167
+ "cloned": "ポリシーをこのボードに複製しました",
3168
+ "cloneFailed": "ポリシーを複製できませんでした",
3169
+ "hideFailed": "ポリシーを非表示にできませんでした",
3170
+ "unhideFailed": "ポリシーを元に戻せませんでした"
3156
3171
  },
3157
3172
  "autoMergeOnHint": "ポリシーの範囲内なら自動的にマージします。",
3158
3173
  "autoMergeOffHint": "常にPRを人間のレビューに回します。",
@@ -3210,6 +3225,36 @@
3210
3225
  "label": "無人実行を人の判断を待たずに完了させる",
3211
3226
  "unattendedHint": "自動ループが打ち切られたとき(コンパニオンの手戻り上限、レビューのパス上限、未仕分けのフォローアップ)、実行は停止せず記録を残して先に進みます。パイプラインが要求したゲート、たとえば人手テスト・レビュー・承認は、これまでどおり実行を止めます。",
3212
3227
  "attendedHint": "自動ループが打ち切られると、実行は停止して人の判断を待ちます。誰かが見ているボードには適していますが、API から開始した実行は無期限に待ち続けます。"
3228
+ },
3229
+ "autoAnswer": {
3230
+ "label": "自動回答の確信度しきい値 (%)",
3231
+ "hint": "無人の実行が人を待たずに提案された回答を採用するために、Requirement Writer に必要な確信度です。対象はレビュアーがプロダクトオーナー不要と判断した指摘のみです。"
3232
+ },
3233
+ "tier": {
3234
+ "account": "アカウント由来",
3235
+ "accountHint": "アカウント全体に定義されています。すべてのボードが継承し、変更できるのはアカウント管理者のみです。"
3236
+ },
3237
+ "own": {
3238
+ "heading": "このボードのポリシー"
3239
+ },
3240
+ "inherited": {
3241
+ "heading": "アカウントから継承",
3242
+ "hint": "このアカウントのすべてのボードで共有されます。複製すればここでコピーを編集でき、非表示にすればこのボードのタスクは選択できなくなります。",
3243
+ "clone": "ボードに複製",
3244
+ "cloneHint": "このポリシーをボードにコピーし、上限値を編集できるようにします。",
3245
+ "copyName": "{name}(コピー)",
3246
+ "hide": "非表示",
3247
+ "hideHint": "このボードでこのポリシーを提示しなくなります。後で戻せます。"
3248
+ },
3249
+ "hidden": {
3250
+ "heading": "非表示のアカウントポリシー",
3251
+ "restore": "元に戻す",
3252
+ "withdrawn": "アカウントで定義されていません",
3253
+ "loadFailed": "この一覧を読み込めませんでした。ここに表示されないまま非表示になっているポリシーがある可能性があります。"
3254
+ },
3255
+ "confirmHide": {
3256
+ "title": "このポリシーを非表示にしますか?",
3257
+ "body": "「{name}」はこのボードで提示されなくなり、これを選択していたタスクはボードの既定ポリシーに戻ります。後で元に戻せます。"
3213
3258
  }
3214
3259
  },
3215
3260
  "observabilityConnection": {
@@ -4948,7 +4993,17 @@
4948
4993
  "binaryComparison": "納品前に候補を比較する",
4949
4994
  "binaryPerGenerator": "連携ごとの候補数",
4950
4995
  "binaryMultiSelect": "複数を残せるようにする",
4951
- "binaryComparisonUnreachable": "このステップは対象ごとに候補を1つしか作れないため、比較するものがなく、その1つが確認なしで採用されます。2つ目の連携を選ぶか、連携ごとの候補数を増やしてください。"
4996
+ "binaryComparisonUnreachable": "このステップは対象ごとに候補を1つしか作れないため、比較するものがなく、その1つが確認なしで採用されます。2つ目の連携を選ぶか、連携ごとの候補数を増やしてください。",
4997
+ "scopeDefault": {
4998
+ "interactive": "アプリ内の既定",
4999
+ "interactiveHint": "ボードから開始したタスクが自身のパイプラインを指定していないときに実行するもの。",
5000
+ "unattended": "無人実行の既定",
5001
+ "unattendedHint": "誰も見ていない実行(API・チケット・スケジュール)でタスクがパイプラインを指定していないときに実行するもの。",
5002
+ "claimInteractive": "アプリ内の既定にする",
5003
+ "releaseInteractive": "アプリ内の既定を解除",
5004
+ "claimUnattended": "無人実行の既定にする",
5005
+ "releaseUnattended": "無人実行の既定を解除"
5006
+ }
4952
5007
  },
4953
5008
  "progress": {
4954
5009
  "status": {
@@ -5396,6 +5451,17 @@
5396
5451
  "reReview": "要件を再レビューできませんでした",
5397
5452
  "proceed": "続行できませんでした",
5398
5453
  "resolveReview": "レビューを解決できませんでした"
5454
+ },
5455
+ "findingClass": {
5456
+ "judgement": "あなたの判断が必要",
5457
+ "judgementHint": "ビジネス・プロダクト・ドメインの判断、またはレビュアーが知らされていない情報です。あなたしか決められません。",
5458
+ "practice": "一般的な実践で回答可能",
5459
+ "practiceHint": "確立された実践、すでに使っている技術スタック、提供済みの文脈で決まります。あらかじめ入力済みで、そのままでも変更しても構いません。"
5460
+ },
5461
+ "confidence": {
5462
+ "high": "確信度: 高",
5463
+ "medium": "確信度: 中",
5464
+ "low": "確信度: 低"
5399
5465
  }
5400
5466
  },
5401
5467
  "clarity": {