diff --git a/src/app/(dashboard)/dashboard/batch/BatchListTab.tsx b/src/app/(dashboard)/dashboard/batch/BatchListTab.tsx
index f2906ca8f..7479a85c5 100644
--- a/src/app/(dashboard)/dashboard/batch/BatchListTab.tsx
+++ b/src/app/(dashboard)/dashboard/batch/BatchListTab.tsx
@@ -453,7 +453,7 @@ export default function BatchListTab({
{batch.model ?? "—"}
|
- {/* Progress — ProgressBarBicolor from F3; spinner when validating (G2) */}
+ {/* Progress — ProgressBarBicolor from F3; spinner when validating (G2); (partial) suffix when expired with failures (G-AUD3) */}
{batch.status === "validating" ? (
@@ -461,19 +461,31 @@ export default function BatchListTab({
Validating…
) : total > 0 ? (
-
+
+
+ {effectiveStatus(batch) === "expired_with_failures" && (
+
+ {t("batchListProgressPartial")}
+
+ )}
+
) : (
—
)}
|
- {/* Cost column — heuristic estimate (D8) */}
-
- {estimatedCost}
+ {/* Cost column — heuristic estimate (D8) with -50% badge per wireframe §3 (G-AUD2) */}
+ |
+ {estimatedCost}
+ {estimatedCost !== "—" && (
+
+ -50%
+
+ )}
|
{relativeTime(batch.createdAt)}
diff --git a/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx b/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx
index f61d4767c..f47f52db5 100644
--- a/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx
+++ b/src/app/(dashboard)/dashboard/batch/FilesListTab.tsx
@@ -249,31 +249,44 @@ export default function FilesListTab({
|
{formatBytes(file.bytes)}
|
- {/* "Used by" column (D12) */}
+ {/* "Used by" column (D12) — shows batch id + role (input/output/error) per plan §4 */}
{related.length === 0 ? (
{t("filesListUsedByNone")}
) : (
- b.id).join(", ")}
- >
- {related.slice(0, 2).map((b) => (
- {
+ const roleFor = (b: BatchRecord): string =>
+ b.inputFileId === file.id
+ ? t("filesListUsedByRoleInput")
+ : b.outputFileId === file.id
+ ? t("filesListUsedByRoleOutput")
+ : t("filesListUsedByRoleError");
+ return (
+ `${b.id} (${roleFor(b)})`).join(", ")}
>
- {b.id.slice(0, 16)}…
-
- ))}
- {related.length > 2 && (
-
- +{related.length - 2}
-
- )}
-
+ {related.slice(0, 2).map((b) => (
+
+ {b.id.slice(0, 12)}…{" "}
+
+ ({roleFor(b)})
+
+
+ ))}
+ {related.length > 2 && (
+
+ +{related.length - 2}
+
+ )}
+
+ );
+ })()
)}
|
diff --git a/src/app/(dashboard)/dashboard/batch/components/ExpirationBadge.tsx b/src/app/(dashboard)/dashboard/batch/components/ExpirationBadge.tsx
index 0fe1b5539..bf415283e 100644
--- a/src/app/(dashboard)/dashboard/batch/components/ExpirationBadge.tsx
+++ b/src/app/(dashboard)/dashboard/batch/components/ExpirationBadge.tsx
@@ -34,6 +34,10 @@ export default function ExpirationBadge({ expiresAt, variant = "default" }: Prop
);
}
+ // D11 tiers: <1h critical (red) · <6h warning (yellow) · else normal (green).
+ // Plan specifies "<24h normal" — in practice batches always expire ≤24h (OpenAI window),
+ // so "else" maps to that case. If a provider (e.g. Gemini 48h) yields remaining >24h,
+ // we still render normal — graceful, no separate tier needed.
let tone = "bg-emerald-500/15 text-emerald-400 border-emerald-500/25";
let label = t("expirationBadgeNormal");
if (remaining < 3600) {
diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json
index c088884b1..c78363136 100644
--- a/src/i18n/messages/ar.json
+++ b/src/i18n/messages/ar.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "الصفحة الرئيسية",
diff --git a/src/i18n/messages/az.json b/src/i18n/messages/az.json
index 0e7a7eda5..adca85959 100644
--- a/src/i18n/messages/az.json
+++ b/src/i18n/messages/az.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json
index 60d5650f1..aa4fd677d 100644
--- a/src/i18n/messages/bg.json
+++ b/src/i18n/messages/bg.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Начало",
diff --git a/src/i18n/messages/bn.json b/src/i18n/messages/bn.json
index 82a63e3ea..3a9a0d972 100644
--- a/src/i18n/messages/bn.json
+++ b/src/i18n/messages/bn.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json
index 1a44bef00..700aff4d2 100644
--- a/src/i18n/messages/cs.json
+++ b/src/i18n/messages/cs.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Domov",
diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json
index c45a6a465..95b40bcb3 100644
--- a/src/i18n/messages/da.json
+++ b/src/i18n/messages/da.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Hjem",
diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json
index 2a261ae66..734f3de98 100644
--- a/src/i18n/messages/de.json
+++ b/src/i18n/messages/de.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Zuhause",
diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json
index 24f1296ea..5ae1e6bde 100644
--- a/src/i18n/messages/en.json
+++ b/src/i18n/messages/en.json
@@ -773,6 +773,10 @@
"filesListUploadButton": "Upload",
"filesListUsedByColumn": "Used by",
"filesListUsedByNone": "None",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)",
"filesListDelete": "Delete",
"filesListDownload": "Download",
"batchDetailActionCancel": "Cancel batch",
diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json
index dfaba6b71..c3e2d0899 100644
--- a/src/i18n/messages/es.json
+++ b/src/i18n/messages/es.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Inicio",
diff --git a/src/i18n/messages/fa.json b/src/i18n/messages/fa.json
index c5a8ca347..6a0e5351c 100644
--- a/src/i18n/messages/fa.json
+++ b/src/i18n/messages/fa.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json
index b7cc1a955..e58fd5f9d 100644
--- a/src/i18n/messages/fi.json
+++ b/src/i18n/messages/fi.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Kotiin",
diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json
index 5012e02d4..e9d74cb6a 100644
--- a/src/i18n/messages/fr.json
+++ b/src/i18n/messages/fr.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Accueil",
diff --git a/src/i18n/messages/gu.json b/src/i18n/messages/gu.json
index 45e1939d7..ddff5abd1 100644
--- a/src/i18n/messages/gu.json
+++ b/src/i18n/messages/gu.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json
index 9bb52646f..bb7a55dcb 100644
--- a/src/i18n/messages/he.json
+++ b/src/i18n/messages/he.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "בית",
diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json
index ba1a6ab43..3ec96291c 100644
--- a/src/i18n/messages/hi.json
+++ b/src/i18n/messages/hi.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "घर",
diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json
index c1d9b3fc4..be85237ed 100644
--- a/src/i18n/messages/hu.json
+++ b/src/i18n/messages/hu.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Otthon",
diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json
index 90206d7ff..3136251c3 100644
--- a/src/i18n/messages/id.json
+++ b/src/i18n/messages/id.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Rumah",
diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json
index 059323cd6..c878b2f98 100644
--- a/src/i18n/messages/in.json
+++ b/src/i18n/messages/in.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json
index ec8e1612f..971d4ebf2 100644
--- a/src/i18n/messages/it.json
+++ b/src/i18n/messages/it.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Casa",
diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json
index 5c9ffc496..bdbf6dd66 100644
--- a/src/i18n/messages/ja.json
+++ b/src/i18n/messages/ja.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "ホーム",
diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json
index 48bbedf14..0b7153ca8 100644
--- a/src/i18n/messages/ko.json
+++ b/src/i18n/messages/ko.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "홈",
diff --git a/src/i18n/messages/mr.json b/src/i18n/messages/mr.json
index e8ed9d61a..d1288680c 100644
--- a/src/i18n/messages/mr.json
+++ b/src/i18n/messages/mr.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json
index c70817158..b3b915393 100644
--- a/src/i18n/messages/ms.json
+++ b/src/i18n/messages/ms.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Rumah",
diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json
index 5ad2d2357..1e2769f49 100644
--- a/src/i18n/messages/nl.json
+++ b/src/i18n/messages/nl.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Thuis",
diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json
index 2cec2f5af..dd3f16a0a 100644
--- a/src/i18n/messages/no.json
+++ b/src/i18n/messages/no.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Hjem",
diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json
index 8921ad9f1..ca722513d 100644
--- a/src/i18n/messages/phi.json
+++ b/src/i18n/messages/phi.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Bahay",
diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json
index 51d8f04de..76b1958fe 100644
--- a/src/i18n/messages/pl.json
+++ b/src/i18n/messages/pl.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Dom",
diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json
index 4dd0b1e1d..7f3417c56 100644
--- a/src/i18n/messages/pt-BR.json
+++ b/src/i18n/messages/pt-BR.json
@@ -773,6 +773,10 @@
"filesListUploadButton": "Enviar",
"filesListUsedByColumn": "Usado por",
"filesListUsedByNone": "Nenhum",
+ "filesListUsedByRoleInput": "entrada",
+ "filesListUsedByRoleOutput": "saída",
+ "filesListUsedByRoleError": "erro",
+ "batchListProgressPartial": "(parcial)",
"filesListDelete": "Excluir",
"filesListDownload": "Baixar",
"batchDetailActionCancel": "Cancelar batch",
diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json
index 5d24bca48..d691a98f4 100644
--- a/src/i18n/messages/pt.json
+++ b/src/i18n/messages/pt.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Página inicial",
diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json
index 4dee59288..04a5c4f87 100644
--- a/src/i18n/messages/ro.json
+++ b/src/i18n/messages/ro.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Acasă",
diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json
index db0a1c42b..ccfc48a6f 100644
--- a/src/i18n/messages/ru.json
+++ b/src/i18n/messages/ru.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Главная",
diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json
index 5433d3372..e65b868bd 100644
--- a/src/i18n/messages/sk.json
+++ b/src/i18n/messages/sk.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Domov",
diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json
index 1ef5d385f..7ecfb2327 100644
--- a/src/i18n/messages/sv.json
+++ b/src/i18n/messages/sv.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Hem",
diff --git a/src/i18n/messages/sw.json b/src/i18n/messages/sw.json
index fcbb28987..e91af7ec5 100644
--- a/src/i18n/messages/sw.json
+++ b/src/i18n/messages/sw.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/ta.json b/src/i18n/messages/ta.json
index 037dc9a55..12d339274 100644
--- a/src/i18n/messages/ta.json
+++ b/src/i18n/messages/ta.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/te.json b/src/i18n/messages/te.json
index 7acdd3f00..630df51c0 100644
--- a/src/i18n/messages/te.json
+++ b/src/i18n/messages/te.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json
index 8c174c4eb..d9610121c 100644
--- a/src/i18n/messages/th.json
+++ b/src/i18n/messages/th.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "บ้าน",
diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json
index bd6d1f5d3..92f9f83f5 100644
--- a/src/i18n/messages/tr.json
+++ b/src/i18n/messages/tr.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Ana Sayfa",
diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json
index f053fb99f..be0f1ef8e 100644
--- a/src/i18n/messages/uk-UA.json
+++ b/src/i18n/messages/uk-UA.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "додому",
diff --git a/src/i18n/messages/ur.json b/src/i18n/messages/ur.json
index 696accf94..667855586 100644
--- a/src/i18n/messages/ur.json
+++ b/src/i18n/messages/ur.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Home",
diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json
index d2b8d9bc2..46503f4e3 100644
--- a/src/i18n/messages/vi.json
+++ b/src/i18n/messages/vi.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "Trang chủ",
diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json
index 866d6dd73..f9fa3e5a5 100644
--- a/src/i18n/messages/zh-CN.json
+++ b/src/i18n/messages/zh-CN.json
@@ -782,7 +782,11 @@
"batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
"batchActionCancelError": "Failed to cancel batch. Try again.",
"batchActionRetryError": "Failed to retry failed requests. Try again.",
- "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)"
+ "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
+ "filesListUsedByRoleInput": "input",
+ "filesListUsedByRoleOutput": "output",
+ "filesListUsedByRoleError": "error",
+ "batchListProgressPartial": "(partial)"
},
"sidebar": {
"home": "首页",
diff --git a/tests/unit/dashboard/batch/list-regression.test.tsx b/tests/unit/dashboard/batch/list-regression.test.tsx
index 59d4bb966..cce3fbddf 100644
--- a/tests/unit/dashboard/batch/list-regression.test.tsx
+++ b/tests/unit/dashboard/batch/list-regression.test.tsx
@@ -341,7 +341,7 @@ describe("FilesListTab — rendering", () => {
expect(el.textContent).toContain("filesListUsedByColumn");
});
- it("13. files with related batches (via inputFileId) show batch ID in used-by column", () => {
+ it("13. files with related batches (via inputFileId) show batch ID + role in used-by column", () => {
const file = makeFile({ id: "file-used", purpose: "batch" });
const batches = [
{
@@ -357,7 +357,14 @@ describe("FilesListTab — rendering", () => {
const el = render(
);
- expect(el.textContent).toContain("batch-using-file");
+ // Truncated id prefix (12 chars) appears inline
+ expect(el.textContent).toContain("batch-using-");
+ // Role label is rendered next to the id (G-AUD1 — plan §4 "b1 (input)")
+ expect(el.textContent).toContain("filesListUsedByRoleInput");
+ // Tooltip carries the full id + role
+ const cell = el.querySelector("[title*='batch-using-file']");
+ expect(cell).not.toBeNull();
+ expect(cell?.getAttribute("title")).toContain("filesListUsedByRoleInput");
});
it("14. loading state shows spinner", () => {
|