@cat-factory/app 0.213.1 → 0.215.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 (50) hide show
  1. package/README.md +107 -13
  2. package/app/components/observability/StepMetricsBar.vue +11 -0
  3. package/app/components/panels/AgentStepDetail.vue +14 -0
  4. package/app/components/panels/MergerResultView.vue +20 -2
  5. package/app/components/panels/ObservabilityPanel.vue +57 -0
  6. package/app/components/panels/ResultWindowShell.vue +77 -0
  7. package/app/components/panels/StepReproductionReport.vue +167 -0
  8. package/app/components/pipeline/BinaryOutputStepPicker.vue +25 -0
  9. package/app/components/tutorial/TutorialCatalogue.vue +14 -1
  10. package/app/components/tutorial/TutorialNudge.vue +107 -0
  11. package/app/components/tutorial/TutorialOverlay.vue +92 -11
  12. package/app/composables/api/execution.ts +5 -2
  13. package/app/composables/api/tutorial.ts +25 -0
  14. package/app/composables/useApi.ts +2 -0
  15. package/app/composables/usePipelineErrorToast.ts +4 -0
  16. package/app/composables/useTutorialNudge.ts +77 -0
  17. package/app/composables/useTutorialSync.ts +141 -0
  18. package/app/modular/external-tools.spec.ts +1 -0
  19. package/app/modular/nav-contributions.spec.ts +2 -0
  20. package/app/modular/nav-contributions.ts +11 -0
  21. package/app/modular/nav-gates.ts +10 -0
  22. package/app/modular/registry.spec.ts +1 -0
  23. package/app/modular/tutorial-tours.spec.ts +55 -4
  24. package/app/modular/tutorial-tours.ts +231 -9
  25. package/app/pages/index.vue +20 -1
  26. package/app/stores/tutorial.prompt.ts +59 -0
  27. package/app/stores/tutorial.record.ts +191 -0
  28. package/app/stores/tutorial.spec.ts +207 -0
  29. package/app/stores/tutorial.ts +78 -91
  30. package/app/stores/workspace/hydrate.ts +5 -0
  31. package/app/types/domain.ts +3 -0
  32. package/app/types/reproduction.ts +11 -0
  33. package/app/utils/binaryOutput.spec.ts +56 -2
  34. package/app/utils/binaryOutput.ts +55 -32
  35. package/app/utils/observability.spec.ts +44 -1
  36. package/app/utils/observability.ts +50 -0
  37. package/app/utils/reproduction.ts +51 -0
  38. package/app/utils/tutorial.spec.ts +255 -0
  39. package/app/utils/tutorial.ts +173 -0
  40. package/i18n/locales/de.json +148 -6
  41. package/i18n/locales/en.json +153 -6
  42. package/i18n/locales/es.json +148 -6
  43. package/i18n/locales/fr.json +148 -6
  44. package/i18n/locales/he.json +148 -6
  45. package/i18n/locales/it.json +148 -6
  46. package/i18n/locales/ja.json +148 -6
  47. package/i18n/locales/pl.json +148 -6
  48. package/i18n/locales/tr.json +148 -6
  49. package/i18n/locales/uk.json +148 -6
  50. package/package.json +2 -2
@@ -1703,7 +1703,9 @@
1703
1703
  "merge_failed": "Die Bewertungen lagen innerhalb der {preset}-Schwellenwerte, aber der automatische Merge konnte nicht abgeschlossen werden (zum Beispiel Branch-Schutz oder ein Konflikt), daher wartet der PR darauf, dass ein Mensch mergt.",
1704
1704
  "merge_partial": "Einige der Pull Requests der Aufgabe wurden gemergt, aber ein späterer nicht, daher wartet die Änderung darauf, dass ein Mensch den Multi-Repo-Merge abschließt oder zurückrollt.",
1705
1705
  "class_auto_merge": "Diese Vorlage führt diese Änderungskategorie immer automatisch zusammen, daher wurden die Bewertungen nicht verglichen.",
1706
- "class_requires_review": "Diese Vorlage gibt diese Änderungskategorie unabhängig von den Bewertungen immer an einen Menschen."
1706
+ "class_requires_review": "Diese Vorlage gibt diese Änderungskategorie unabhängig von den Bewertungen immer an einen Menschen.",
1707
+ "role_requires_review": "Diese Vorgabe lässt Läufe, die ein {role} startet, für diese Art von Änderung unabhängig von den Bewertungen immer von einem Menschen prüfen. Ein Teammitglied mit höherer Berechtigung kann diesen PR unverändert zusammenführen.",
1708
+ "dry_run": "Dies war ein Probelauf, daher blieb der Pull Request für einen Menschen offen und die Bewertungen wurden nicht verglichen. Starte die Aufgabe erneut als echten Lauf, um einen Pull Request zu erzeugen, den dieser Arbeitsbereich zusammenführt."
1707
1709
  },
1708
1710
  "scores": "Bewertungen",
1709
1711
  "axis": {
@@ -1862,6 +1864,33 @@
1862
1864
  "failedSummary": "{failed} von {total} Prüfungen schlugen nach {attempts} von {maxAttempts} Versuchen weiterhin fehl, daher wurde kein Pull Request geöffnet.",
1863
1865
  "exitCode": "Exit-Code {code}",
1864
1866
  "timedOut": "Zeitüberschreitung"
1867
+ },
1868
+ "reproduction": {
1869
+ "heading": "Reproduktionsnachweis",
1870
+ "status": {
1871
+ "reproduced": "Reproduziert",
1872
+ "inconclusive": "Unbelegt",
1873
+ "declared_infeasible": "Nicht reproduzierbar"
1874
+ },
1875
+ "verdict": {
1876
+ "reproduced": "Die deklarierte Prüfung schlug im Stand vor dem Fix fehl und besteht in diesem Stand.",
1877
+ "inconclusive": "Die Prüfung hat den Defekt über den Fix hinweg nicht nachgewiesen, der Fix ist also nicht belegt.",
1878
+ "declared_infeasible": "Der Agent hat erklärt, dass sich dieser Fehler nicht in einem Test reproduzieren lässt, und angegeben, was er stattdessen geprüft hat."
1879
+ },
1880
+ "tree": {
1881
+ "base": "Stand vor dem Fix",
1882
+ "final": "Endgültiger Stand"
1883
+ },
1884
+ "command": "Befehl",
1885
+ "reason": "Warum nicht reproduzierbar",
1886
+ "alternative": "Stattdessen geprüft",
1887
+ "passed": "bestanden",
1888
+ "exitCode": "Exit-Code {code}",
1889
+ "timedOut": "Zeitüberschreitung",
1890
+ "setupFailed": "Setup fehlgeschlagen",
1891
+ "notRun": "nicht ausgeführt",
1892
+ "attempts": "Versuch {attempts} von {maxAttempts}",
1893
+ "omittedTestPaths": "{count} deklarierte Testdatei wurde vor dem Nachweis verworfen, daher wurde der Stand vor dem Fix aus einer unvollständigen Reproduktion aufgebaut. | {count} deklarierte Testdateien wurden vor dem Nachweis verworfen, daher wurde der Stand vor dem Fix aus einer unvollständigen Reproduktion aufgebaut."
1865
1894
  }
1866
1895
  },
1867
1896
  "inspector": {
@@ -3232,6 +3261,9 @@
3232
3261
  "contextError": "Der bereitgestellte Kontext konnte nicht geladen werden.",
3233
3262
  "summary": {
3234
3263
  "calls": "Aufrufe",
3264
+ "cost": "Geschätzte Kosten",
3265
+ "costHint": "Zu Listenpreisen berechnet, jede Eingabeklasse mit ihrem eigenen Satz: Ein Cache-Lesevorgang kostet etwa ein Zehntel frischer Eingabe, ein Cache-Schreibvorgang etwa ein Viertel mehr. Ein Abonnementlauf zahlt nichts pro Token; dies ist also der Betrag, den dieselben Token nach Verbrauch gekostet hätten.",
3266
+ "costIncomplete": "Nicht angezeigt: Mindestens eine Phase lief auf einem Modell, für das diese Installation keinen Satz kennt, daher wäre eine Gesamtsumme unvollständig. Die berechneten Phasen sind unten aufgeführt.",
3235
3267
  "tokensInOut": "Tokens (ein / aus)",
3236
3268
  "transportOverhead": "Transport-Overhead",
3237
3269
  "modelExecution": "Modellausführung",
@@ -3251,8 +3283,10 @@
3251
3283
  "phase": "Phase",
3252
3284
  "turns": "Runden",
3253
3285
  "tokensInOut": "Tokens (ein / aus)",
3286
+ "cost": "Kosten",
3254
3287
  "carryCost": "Mitschleppkosten"
3255
3288
  },
3289
+ "costHint": "Geschätzte Kosten der Token dieser Phase zu Listenpreisen. Ein Strich bedeutet, dass diese Installation keinen Satz für das ausgeführte Modell kennt.",
3256
3290
  "carryCostHint": "Wie stark jede Phase die nachfolgenden Runden belastet hat: ihr Kontext einmal für jede spätere Runde gezählt, die ihn erneut senden musste. Vergleichen Sie die Phasen eines Laufs miteinander; für sich allein sagt die Zahl nichts aus. Eine spät laufende Phase schleppt wenig mit, wie viel sie auch verbraucht hat; lesen Sie diese Spalte daher zusammen mit den Tokens daneben.",
3257
3291
  "unattributed": "Nicht zugeordnet",
3258
3292
  "unattributedHint": "von einem Kanal erfasst, der keine Phase meldet"
@@ -3260,6 +3294,7 @@
3260
3294
  "metricsBar": {
3261
3295
  "calls": "{count} Aufruf | {count} Aufrufe",
3262
3296
  "inputCompletionTokens": "Eingabe- / Ausgabe-Tokens insgesamt. Die Eingabe zählt auch gecachte Tokens mit: Sie belegen weiterhin das Kontextfenster, genau wie es die Kontextanzeige von Claude Code zählt.",
3297
+ "costHint": "Geschätzte Kosten der Token dieses Schritts zu Listenpreisen, jede Eingabeklasse mit ihrem eigenen Satz. Ein Abonnementlauf zahlt nichts pro Token; dies ist also der Betrag, den dieselben Token nach Verbrauch gekostet hätten.",
3263
3298
  "fresh": "{tokens} frisch",
3264
3299
  "freshHint": "Eingabe, die von Grund auf verarbeitet wurde, ohne Anteil aus dem Cache",
3265
3300
  "cacheRead": "{tokens} aus dem Cache gelesen",
@@ -3896,6 +3931,7 @@
3896
3931
  "binaryOutputMediaTypeUnverifiable": "Keine ausgewählte Integration gibt {formats} an, aber eine von ihnen gibt überhaupt keine Formate an, daher konnte das nicht geprüft werden. Der Schritt startet trotzdem; prüfe in der API der Integration, ob sie das erzeugen kann.",
3897
3932
  "binaryOutputMediaTypeUnusable": "Nicht gespeichert, denn dies sind keine Medientypen: {entries}. Schreibe jeden als type/subtype.",
3898
3933
  "binaryOutputGeneratorMissing": "Diese Installation registriert diese generativen Integrationen nicht: {ids}. Sie werden im Code der Installation registriert, nicht in diesem Workspace.",
3934
+ "binaryOutputGeneratorOverlap": "Mehrere ausgewählte Integrationen erzeugen denselben Inhaltstyp ({overlaps}). Daran ist nichts falsch, aber der Inhaltstyp entscheidet nicht mehr, welche der Agent aufruft: Lege im Prompt dieses Schritts fest, welche wofür verwendet wird, sonst wählt er eine aus und bleibt dabei.",
3899
3935
  "binaryOutputModalityUncovered": "Keine ausgewählte Integration erzeugt {modalities}, was dieser Schritt liefern soll.",
3900
3936
  "binaryOutputModalityRetired": "{modality} (nicht mehr verfügbar — wähle die Inhaltstypen dieses Schritts neu)",
3901
3937
  "binaryOutputModality": {
@@ -5122,7 +5158,8 @@
5122
5158
  "binary_output_service_invalid": "Dienst für Binärausgaben nicht auflösbar",
5123
5159
  "binary_output_generator_invalid": "Generator für Binärausgaben nicht auflösbar",
5124
5160
  "foundational_service_not_inherited": "Dieses Board hat den Dienst registriert",
5125
- "ticket_already_linked": "Dieses Ticket hat bereits eine Aufgabe"
5161
+ "ticket_already_linked": "Dieses Ticket hat bereits eine Aufgabe",
5162
+ "dry_run_not_mergeable": "Probelauf kann nicht zusammengeführt werden"
5126
5163
  },
5127
5164
  "description": {
5128
5165
  "dependencies_unmet": "Diese Aufgabe hängt von anderen ab, die noch nicht abgeschlossen sind. Schließe sie ab oder gib sie frei und starte dann erneut.",
@@ -5155,7 +5192,8 @@
5155
5192
  "binary_output_service_invalid": "Ein Schritt, der Binärausgaben erzeugt, wählt einen Basisdienst aus, den der Katalog dieses Workspace nicht auflösen kann: Die ID ist unbekannt, oder der gewählte Speicherdienst trägt nicht die Fähigkeit asset-storage. Korrigieren Sie die Auswahl des Schritts oder registrieren Sie den Dienst und starten Sie erneut.",
5156
5193
  "binary_output_generator_invalid": "Ein Schritt, der Binärausgaben erzeugt, wählt eine generative Integration aus, die diese Installation nicht registriert, oder keine der gewählten Integrationen erzeugt einen Inhaltstyp, den der Schritt liefern muss. Generative Integrationen werden im Code der Installation registriert, nicht in diesem Workspace: registrieren Sie sie oder korrigieren Sie die Auswahl des Schritts und starten Sie erneut.",
5157
5194
  "foundational_service_not_inherited": "Abwählen gilt für einen vom Konto geerbten Dienst. Diese ID ist von diesem Board registriert, es gibt also nichts abzuwählen - lösche stattdessen den eigenen Eintrag des Boards.",
5158
- "ticket_already_linked": "Ein Ticket kann nur eine Aufgabe stützen. Es erneut zu verknüpfen würde der bestehenden Aufgabe genau den Kontext entziehen, mit dem sie angelegt wurde. Öffne stattdessen diese Aufgabe oder hebe die Verknüpfung des Tickets zuerst auf."
5195
+ "ticket_already_linked": "Ein Ticket kann nur eine Aufgabe stützen. Es erneut zu verknüpfen würde der bestehenden Aufgabe genau den Kontext entziehen, mit dem sie angelegt wurde. Öffne stattdessen diese Aufgabe oder hebe die Verknüpfung des Tickets zuerst auf.",
5196
+ "dry_run_not_mergeable": "Dieser Pull Request stammt aus einem Probelauf und kann hier nicht zusammengeführt werden. Starte die Aufgabe erneut als echten Lauf, um einen Pull Request zu erzeugen, den dieser Arbeitsbereich zusammenführt."
5159
5197
  },
5160
5198
  "action": {
5161
5199
  "connectGitHub": "GitHub verbinden",
@@ -6291,6 +6329,12 @@
6291
6329
  "minor": "Kleine Anmerkungen",
6292
6330
  "major": "Echte Nacharbeit",
6293
6331
  "classHistory": "{merged} in dieser Kategorie zusammengeführt, {autoShare} automatisch"
6332
+ },
6333
+ "role": {
6334
+ "admin": "Administrator",
6335
+ "member": "Mitglied",
6336
+ "viewer": "Betrachter",
6337
+ "unattributed": "ein automatischer Start"
6294
6338
  }
6295
6339
  },
6296
6340
  "vcs": {
@@ -6392,7 +6436,10 @@
6392
6436
  "finishedRun": "Ein erfolgreich abgeschlossener Lauf",
6393
6437
  "integrationsManage": "Berechtigung, Integrationen zu verwalten",
6394
6438
  "settingsManage": "Berechtigung, Workspace-Einstellungen zu verwalten",
6395
- "library": "Eine in diesem Deployment aktivierte Kontextfragment-Bibliothek"
6439
+ "library": "Eine in diesem Deployment aktivierte Kontextfragment-Bibliothek",
6440
+ "failedRun": "Ein fehlgeschlagener Lauf",
6441
+ "infrastructure": "Ein mit diesem Workspace verbundenes Ausführungs-Backend",
6442
+ "advancedTier": "Der erweiterte Oberflächenmodus"
6396
6443
  },
6397
6444
  "overlay": {
6398
6445
  "next": "Weiter",
@@ -6404,7 +6451,9 @@
6404
6451
  "announcement": "Schritt {current} von {total}. {title}. {body}",
6405
6452
  "abridged": "1 Schritt wurde übersprungen: dieses Element gehört nicht zu diesem Board. | {count} Schritte wurden übersprungen: diese Elemente gehören nicht zu diesem Board.",
6406
6453
  "searching": "Suche das hervorgehobene Element...",
6407
- "clickHint": "Klicke auf das hervorgehobene Element, um fortzufahren"
6454
+ "clickHint": "Klicke auf das hervorgehobene Element, um fortzufahren",
6455
+ "nextUp": "Als Nächstes",
6456
+ "takeNext": "Diese Tour starten"
6408
6457
  },
6409
6458
  "tours": {
6410
6459
  "boardBasics": {
@@ -6527,7 +6576,7 @@
6527
6576
  },
6528
6577
  "finish": {
6529
6578
  "title": "Das ist der Kreislauf",
6530
- "body": "Aufgabe planen, Pipeline wählen, starten, zusehen. Wenn ein Lauf etwas von dir braucht, hält er an und sagt es, was die nächste Tour behandelt."
6579
+ "body": "Aufgabe planen, Pipeline wählen, starten, zusehen. Die Touren nach dieser lesen einen echten Lauf, sie werden also frei, sobald du wirklich einen gestartet hast."
6531
6580
  }
6532
6581
  }
6533
6582
  },
@@ -6682,7 +6731,100 @@
6682
6731
  "body": "Manche Einträge gehören dir und nicht dem Board, etwa ein persönliches Zugriffstoken oder ein persönlicher Plan, und werden nur für Läufe genutzt, die du startest. Der Hub markiert, was was ist, und Meine Einrichtung sammelt das, was dir gehört."
6683
6732
  }
6684
6733
  }
6734
+ },
6735
+ "diagnoseFailure": {
6736
+ "title": "Einen Fehler lesen",
6737
+ "description": "Ein Lauf ist mit einem Fehler stehen geblieben. Finde heraus, was kaputt ist und was dagegen zu tun ist.",
6738
+ "steps": {
6739
+ "intro": {
6740
+ "title": "Läufe scheitern, das ist normal",
6741
+ "body": "Ein fehlgeschlagener Lauf ist keine Sackgasse. Das Board behält den Fehler, die Ursache ist meist eine Zeile, und die meisten Ursachen behebt eine Einstellung und nicht eine neu geschriebene Aufgabe."
6742
+ },
6743
+ "banner": {
6744
+ "title": "Was schiefgegangen ist",
6745
+ "body": "Die Karte tauscht ihren Fortschrittsbalken gegen dieses Banner. Es nennt die Ursache, die Details enthalten die Rohausgabe, und manche Ursachen bieten einen Knopf direkt zu der Einstellung, die sie behebt."
6746
+ },
6747
+ "retry": {
6748
+ "title": "Noch einmal ausführen",
6749
+ "body": "Wiederholen führt die Arbeit erneut aus. Frühere Fehler bleiben unter „Frühere Fehler“ an der Aufgabe, du kannst Versuche also vergleichen, statt die Spur zu verlieren."
6750
+ },
6751
+ "finish": {
6752
+ "title": "Ein Fehler ist eine Information",
6753
+ "body": "Ursache beheben, wiederholen, vergleichen. Wenn derselbe Fehler immer wiederkommt, sind die Details das, was du der Person zeigst, die eine Berechtigung erweitern oder das Fehlende verbinden kann."
6754
+ }
6755
+ }
6756
+ },
6757
+ "prepareInfrastructure": {
6758
+ "title": "Wo Läufe stattfinden",
6759
+ "description": "Die Maschinen, auf denen Agenten laufen, die Umgebungen, in denen sie testen, und die Zugangsdaten, die sie nutzen dürfen.",
6760
+ "steps": {
6761
+ "intro": {
6762
+ "title": "Agenten brauchen einen Ort zum Laufen",
6763
+ "body": "Jeder Container-Schritt läuft auf einem Ausführungs-Backend, Tests kommen in einer Umgebung hoch, und manche Fähigkeiten brauchen Zugangsdaten. Alle drei werden in einem Fenster konfiguriert."
6764
+ },
6765
+ "open": {
6766
+ "title": "Infrastruktur öffnen",
6767
+ "body": "Alles darüber, wo und wie Läufe ausgeführt werden, steht hier."
6768
+ },
6769
+ "tabs": {
6770
+ "title": "Ein Tab pro Thema",
6771
+ "body": "Agent-Container ist der Ort, an dem die Arbeit ausgeführt wird. Testumgebungen ist das, woraus ein Service hochgefahren wird. Die Liste der Zugangsdaten zeigt, welche Schlüssel die Fähigkeiten deiner Agenten tatsächlich auflösen können und welche noch fehlen."
6772
+ },
6773
+ "finish": {
6774
+ "title": "Fehler verweisen hierher",
6775
+ "body": "Wenn ein Lauf beim Bereitstellen scheitert, ist das das Fenster, das sein Banner dich zu öffnen bittet. Besser vorher zu wissen als danach."
6776
+ }
6777
+ }
6778
+ },
6779
+ "panelReviews": {
6780
+ "title": "Review durch ein Gremium",
6781
+ "description": "Lass mehrere Modelle dieselbe Arbeit prüfen statt nur eines, bei den Aufgaben, die es wert sind.",
6782
+ "steps": {
6783
+ "intro": {
6784
+ "title": "Ein Reviewer oder mehrere",
6785
+ "body": "Ein Review-Schritt führt normalerweise einen Agenten aus. Er kann stattdessen ein Gremium mehrerer Modelle ausführen und ihre Aussagen vergleichen, was bei schwererer Arbeit findet, was ein einzelner Reviewer übersieht."
6786
+ },
6787
+ "open": {
6788
+ "title": "Modellkonfiguration öffnen",
6789
+ "body": "Gremien bestehen aus Modellen, also werden sie direkt daneben eingerichtet."
6790
+ },
6791
+ "groups": {
6792
+ "title": "Ein Gremium definieren",
6793
+ "body": "Eine Gruppe nennt die Modelle im Gremium und wie anspruchsvoll eine Aufgabe sein muss, bevor es eingesetzt wird. Ein Schritt wählt dann eine Gruppe, statt Modelle einzeln zu nennen."
6794
+ },
6795
+ "finish": {
6796
+ "title": "Kosten folgen dem Aufwand",
6797
+ "body": "Ein Gremium kostet so viele Modellaufrufe, wie es Mitglieder hat. Deshalb kann eine Gruppe auf die Aufgaben begrenzt werden, deren Schätzung ihre Schwelle erreicht. Kleine Arbeit behält einen einzelnen Reviewer."
6798
+ }
6799
+ }
6800
+ },
6801
+ "shareServices": {
6802
+ "title": "Die Services, die du schon betreibst",
6803
+ "description": "Sag den Agenten, welche gemeinsam genutzten Systeme es gibt und wie ihre APIs aussehen.",
6804
+ "steps": {
6805
+ "intro": {
6806
+ "title": "Baue nicht neu, was du hast",
6807
+ "body": "Agenten entwerfen im Dunkeln, solange sie nicht wissen, was deine Organisation schon betreibt. Dieser Katalog nennt diese Systeme und trägt ihre API-Kontrakte."
6808
+ },
6809
+ "open": {
6810
+ "title": "Grundlegende Services öffnen",
6811
+ "body": "Der Katalog gemeinsamer Fähigkeiten, der jedem Board in diesem Workspace zur Verfügung steht."
6812
+ },
6813
+ "catalog": {
6814
+ "title": "Registrieren, hochladen oder synchronisieren",
6815
+ "body": "Füge einen Service von Hand hinzu, lade seine API-Dokumente hoch, oder verknüpfe ein Repository und lass sie synchronisieren. Entwürfe verweisen dann auf das hier Registrierte, statt eine Schnittstelle zu erfinden."
6816
+ },
6817
+ "finish": {
6818
+ "title": "Entwurfsschritte lesen das",
6819
+ "body": "Ein Entwurf, der angibt, welche davon er nutzt, bekommt im nächsten Schritt ihre vollen Kontrakte. Einer, der nichts angibt, bekommt nichts: dass das hier aktuell bleibt, ist also die Bedingung dafür, dass es funktioniert."
6820
+ }
6821
+ }
6685
6822
  }
6823
+ },
6824
+ "nudge": {
6825
+ "label": "Neue Tour verfügbar",
6826
+ "start": "Zeig mir",
6827
+ "dismiss": "Ausblenden"
6686
6828
  }
6687
6829
  },
6688
6830
  "externalTools": {
@@ -623,7 +623,8 @@
623
623
  "binary_output_service_invalid": "Binary output service can't be resolved",
624
624
  "binary_output_generator_invalid": "Binary output generator can't be resolved",
625
625
  "foundational_service_not_inherited": "This board registered that service",
626
- "ticket_already_linked": "This issue already has a task"
626
+ "ticket_already_linked": "This issue already has a task",
627
+ "dry_run_not_mergeable": "Dry run cannot be merged"
627
628
  },
628
629
  "description": {
629
630
  "dependencies_unmet": "This task depends on others that aren't finished yet. Complete or unblock them, then start it again.",
@@ -659,7 +660,8 @@
659
660
  "binary_output_service_invalid": "A step that generates binary outputs selects a foundational service this workspace's catalog can't resolve: the id is unknown, or the chosen storage service doesn't carry the asset-storage capability. Fix the step's selection or register the service, then start again.",
660
661
  "binary_output_generator_invalid": "A step that generates binary outputs selects a generative integration this deployment doesn't register, or none of the selected integrations produces a content type the step must deliver. Generative integrations are registered in the deployment's code, not in this workspace: register it or fix the step's selection, then start again.",
661
662
  "foundational_service_not_inherited": "Opting out applies to a service inherited from the account. This id is registered by this board, so there is nothing to opt out of - delete the board's own entry instead.",
662
- "ticket_already_linked": "An issue can back only one task, so linking it again would strip the existing task of the context it was created with. Open that task instead, or unlink the issue first."
663
+ "ticket_already_linked": "An issue can back only one task, so linking it again would strip the existing task of the context it was created with. Open that task instead, or unlink the issue first.",
664
+ "dry_run_not_mergeable": "This pull request came from a dry run, so it can't be merged from here. Start the task again as a live run to produce a pull request this workspace will merge."
663
665
  },
664
666
  "action": {
665
667
  "connectGitHub": "Connect GitHub",
@@ -1319,7 +1321,9 @@
1319
1321
  "merge_failed": "The scores were within the {preset} thresholds, but the automatic merge could not complete (for example branch protection or a conflict), so the PR is waiting for a human to merge.",
1320
1322
  "merge_partial": "Some of the task's pull requests merged, but a later one could not, so the change is waiting for a human to finish or revert the multi-repo merge.",
1321
1323
  "class_auto_merge": "This preset always auto-merges this class of change, so the scores were not compared.",
1322
- "class_requires_review": "This preset always sends this class of change to a human, whatever the scores."
1324
+ "class_requires_review": "This preset always sends this class of change to a human, whatever the scores.",
1325
+ "role_requires_review": "This preset holds runs started by a {role} to human review for this class of change, whatever the scores. A teammate on a higher tier can merge this PR as it stands.",
1326
+ "dry_run": "This was a dry run, so the pull request was left open for a human and the scores were not compared. Start the task again as a live run to produce a pull request this workspace will merge."
1323
1327
  },
1324
1328
  "scores": "Scores",
1325
1329
  "axis": {
@@ -1478,6 +1482,37 @@
1478
1482
  "failedSummary": "{failed} of {total} checks were still failing after {attempts} of {maxAttempts} attempts, so no pull request was opened.",
1479
1483
  "exitCode": "exit {code}",
1480
1484
  "timedOut": "timed out"
1485
+ },
1486
+ "reproduction": {
1487
+ "heading": "Reproduction proof",
1488
+ "status": {
1489
+ "reproduced": "Reproduced",
1490
+ "inconclusive": "Unproven",
1491
+ "declared_infeasible": "Not reproducible"
1492
+ },
1493
+ "verdict": {
1494
+ "reproduced": "The declared check failed on the pre-fix tree and passes on this one.",
1495
+ "inconclusive": "The check did not demonstrate the defect across the fix, so the fix is not evidenced.",
1496
+ "declared_infeasible": "The agent declared this bug cannot be reproduced in a test, and stated what it verified instead."
1497
+ },
1498
+ "@verdict": "One sentence explaining each reproduction verdict; shown beside the status chip. 'pre-fix tree' means the code as it stood before the change.",
1499
+ "tree": {
1500
+ "base": "Pre-fix tree",
1501
+ "final": "Final tree"
1502
+ },
1503
+ "@tree": "Labels for the two checkouts the same command was run against: the code before the change, and the code after it.",
1504
+ "command": "Command",
1505
+ "reason": "Why it cannot be reproduced",
1506
+ "alternative": "Verified instead",
1507
+ "passed": "passed",
1508
+ "exitCode": "exit {code}",
1509
+ "timedOut": "timed out",
1510
+ "setupFailed": "setup failed",
1511
+ "@setupFailed": "The tree's setup command (a dependency install) failed, so the check never ran there.",
1512
+ "notRun": "not run",
1513
+ "attempts": "Attempt {attempts} of {maxAttempts}",
1514
+ "omittedTestPaths": "{count} declared test file was dropped before the proof ran, so the pre-fix tree was rebuilt from an incomplete reproduction. | {count} declared test files were dropped before the proof ran, so the pre-fix tree was rebuilt from an incomplete reproduction.",
1515
+ "@omittedTestPaths": "Plural form required. A dropped file can leave the pre-fix tree without the reproduction, which makes the check pass there and wrongly reads as 'the test does not capture the defect'."
1481
1516
  }
1482
1517
  },
1483
1518
  "inspector": {
@@ -1557,6 +1592,9 @@
1557
1592
  "contextError": "Could not load the provided context.",
1558
1593
  "summary": {
1559
1594
  "calls": "Calls",
1595
+ "cost": "Estimated cost",
1596
+ "costHint": "Priced at list rates, each input class at its own: a cache read costs about a tenth of fresh input, a cache write about a quarter more. A subscription run pays nothing per token, so this is what the same tokens would have cost metered.",
1597
+ "costIncomplete": "Not shown: at least one phase ran on a model this deployment has no rate for, so a run total would be incomplete. The priced phases are listed below.",
1560
1598
  "tokensInOut": "Tokens (in / out)",
1561
1599
  "transportOverhead": "Transport overhead",
1562
1600
  "modelExecution": "Model execution",
@@ -1576,8 +1614,10 @@
1576
1614
  "phase": "Phase",
1577
1615
  "turns": "Turns",
1578
1616
  "tokensInOut": "Tokens (in / out)",
1617
+ "cost": "Cost",
1579
1618
  "carryCost": "Carry cost"
1580
1619
  },
1620
+ "costHint": "Estimated cost of this phase's tokens at list rates. A dash means this deployment has no rate for the model that ran.",
1581
1621
  "carryCostHint": "How much each phase burdened the turns that came after it: its context counted once for every later turn that had to re-send it. Compare a run's phases with each other; on its own the number means nothing. A phase that runs late carries little however much it spent, so read this column alongside the tokens beside it.",
1582
1622
  "unattributed": "Unattributed",
1583
1623
  "unattributedHint": "recorded by a channel that reports no phase"
@@ -1585,6 +1625,7 @@
1585
1625
  "metricsBar": {
1586
1626
  "calls": "{count} call | {count} calls",
1587
1627
  "inputCompletionTokens": "Total input / completion tokens. Input counts cached tokens too: they still occupy the context window, exactly as Claude Code's own context gauge counts them.",
1628
+ "costHint": "Estimated cost of this step's tokens at list rates, each input class priced at its own. A subscription run pays nothing per token, so this is what the same tokens would have cost metered.",
1588
1629
  "fresh": "{tokens} fresh",
1589
1630
  "freshHint": "Input processed from scratch, with nothing served from the cache",
1590
1631
  "cacheRead": "{tokens} cache read",
@@ -4383,6 +4424,8 @@
4383
4424
  "binaryOutputMediaTypeUnverifiable": "No selected integration declares {formats}, but one of them declares no formats at all, so this could not be checked. The step still starts; confirm from the integration's API that it can emit this.",
4384
4425
  "binaryOutputMediaTypeUnusable": "Not saved, because these are not media types: {entries}. Write each one as type/subtype.",
4385
4426
  "binaryOutputGeneratorMissing": "This deployment does not register these generative integrations: {ids}. They are registered in the deployment's code, not in this workspace.",
4427
+ "binaryOutputGeneratorOverlap": "More than one selected integration produces the same content type ({overlaps}). Nothing is wrong with that, but the content type no longer decides which one the agent calls: say in this step's prompt which to use for what, or it will pick one and keep picking it.",
4428
+ "@binaryOutputGeneratorOverlap": "{overlaps} is assembled by the app, not prose: a semicolon-separated list of 'content type: id, id' (e.g. 'Images: flux, retro-diffusion'). The ids are raw machine values and must not be translated; only the content-type label before each colon is translated, and it comes from its own key. This is advice, not an error: the step saves and runs either way, so keep the tone neutral.",
4386
4429
  "binaryOutputModalityUncovered": "No selected integration produces {modalities}, which this step is set to deliver.",
4387
4430
  "binaryOutputModalityRetired": "{modality} (no longer offered — re-pick this step's content types)",
4388
4431
  "@binaryOutputModalityRetired": "A content type saved on a step that this build no longer defines. {modality} is a raw machine value (e.g. 3d) and must not be translated. Appears inside the binaryOutputModalityUncovered sentence, so keep it a short noun phrase, not a sentence.",
@@ -6496,6 +6539,12 @@
6496
6539
  "@classHistory": {
6497
6540
  "description": "'{autoShare}' is already a formatted percentage; do not add a % sign."
6498
6541
  }
6542
+ },
6543
+ "role": {
6544
+ "admin": "admin",
6545
+ "member": "member",
6546
+ "viewer": "viewer",
6547
+ "unattributed": "an automated start"
6499
6548
  }
6500
6549
  },
6501
6550
  "vcs": {
@@ -6606,7 +6655,10 @@
6606
6655
  "finishedRun": "A run that finished successfully",
6607
6656
  "integrationsManage": "Permission to manage integrations",
6608
6657
  "settingsManage": "Permission to manage workspace settings",
6609
- "library": "The context fragment library enabled on this deployment"
6658
+ "library": "The context fragment library enabled on this deployment",
6659
+ "failedRun": "A run that failed",
6660
+ "infrastructure": "An execution backend connected to this workspace",
6661
+ "advancedTier": "The advanced interface mode"
6610
6662
  },
6611
6663
  "overlay": {
6612
6664
  "next": "Next",
@@ -6624,7 +6676,9 @@
6624
6676
  "description": "Shown on a tour's final card when steps were skipped. Needs the plural forms of the target language (pl/uk take three: one | few | many); {count} is the number of skipped steps."
6625
6677
  },
6626
6678
  "searching": "Looking for the highlighted control...",
6627
- "clickHint": "Click the highlighted control to continue"
6679
+ "clickHint": "Click the highlighted control to continue",
6680
+ "nextUp": "Next up",
6681
+ "takeNext": "Take this one"
6628
6682
  },
6629
6683
  "tours": {
6630
6684
  "boardBasics": {
@@ -6750,7 +6804,7 @@
6750
6804
  },
6751
6805
  "finish": {
6752
6806
  "title": "That is the loop",
6753
- "body": "Plan a task, pick a pipeline, start it, watch it. When a run needs something from you it pauses and says so, which the next tour covers."
6807
+ "body": "Plan a task, pick a pipeline, start it, watch it. The walkthroughs after this one read a real run, so they unlock once you have actually started one."
6754
6808
  }
6755
6809
  }
6756
6810
  },
@@ -6905,7 +6959,100 @@
6905
6959
  "body": "Some entries belong to you rather than to the board, such as a personal access token or plan, and are used only for runs you start. The hub marks which is which, and My setup collects the ones that are yours."
6906
6960
  }
6907
6961
  }
6962
+ },
6963
+ "diagnoseFailure": {
6964
+ "title": "Read a failure",
6965
+ "description": "A run stopped with an error. Find out what broke, and what to do about it.",
6966
+ "steps": {
6967
+ "intro": {
6968
+ "title": "Runs fail, and that is normal",
6969
+ "body": "A failed run is not a dead end. The board keeps the error, the cause is usually one line, and most causes are fixed by a setting rather than by rewriting the task."
6970
+ },
6971
+ "banner": {
6972
+ "title": "What went wrong",
6973
+ "body": "The card swaps its progress bar for this banner. It names the cause, the details hold the raw output, and some causes offer a button straight to the setting that fixes them."
6974
+ },
6975
+ "retry": {
6976
+ "title": "Run it again",
6977
+ "body": "Retry re-runs the work. Earlier errors stay on the task under Previous errors, so you can compare attempts instead of losing the trail."
6978
+ },
6979
+ "finish": {
6980
+ "title": "A failure is information",
6981
+ "body": "Fix the cause, retry, compare. If the same error keeps coming back, the details are what to bring to whoever can widen a permission or connect what is missing."
6982
+ }
6983
+ }
6984
+ },
6985
+ "prepareInfrastructure": {
6986
+ "title": "Where runs happen",
6987
+ "description": "The machines agents run on, the environments they test in, and the credentials they may use.",
6988
+ "steps": {
6989
+ "intro": {
6990
+ "title": "Agents need somewhere to run",
6991
+ "body": "Every container step runs on an execution backend, tests come up in an environment, and some capabilities need a credential. All three are configured in one window."
6992
+ },
6993
+ "open": {
6994
+ "title": "Open Infrastructure",
6995
+ "body": "Everything about where and how runs execute lives here."
6996
+ },
6997
+ "tabs": {
6998
+ "title": "One tab per concern",
6999
+ "body": "Agent containers is where runs execute. Test environments is what a service is brought up from. The credential list shows which keys the capabilities your agents use can actually resolve, and which are still missing."
7000
+ },
7001
+ "finish": {
7002
+ "title": "Failures point back here",
7003
+ "body": "When a run fails while provisioning, this is the window its banner is asking you to open. Worth knowing before that happens rather than after."
7004
+ }
7005
+ }
7006
+ },
7007
+ "panelReviews": {
7008
+ "title": "Review by panel",
7009
+ "description": "Have several models review the same work instead of one, on the tasks that warrant it.",
7010
+ "steps": {
7011
+ "intro": {
7012
+ "title": "One reviewer, or several",
7013
+ "body": "A review step normally runs one agent. It can instead run a panel of several models and compare what they say, which catches what a single reviewer misses on heavier work."
7014
+ },
7015
+ "open": {
7016
+ "title": "Open Model configuration",
7017
+ "body": "Panels are made of models, so they are set up beside them."
7018
+ },
7019
+ "groups": {
7020
+ "title": "Define a panel",
7021
+ "body": "A group names the models on the panel and how demanding a task has to be before it is used. A step then selects a group instead of naming models one by one."
7022
+ },
7023
+ "finish": {
7024
+ "title": "Cost follows effort",
7025
+ "body": "A panel costs as many model calls as it has members, which is why a group can be limited to the tasks whose estimate clears its bar. Small work keeps a single reviewer."
7026
+ }
7027
+ }
7028
+ },
7029
+ "shareServices": {
7030
+ "title": "The services you already run",
7031
+ "description": "Tell the agents which shared systems exist, and what their APIs look like.",
7032
+ "steps": {
7033
+ "intro": {
7034
+ "title": "Do not rebuild what you have",
7035
+ "body": "Agents design in the dark unless they know what your organisation already runs. This catalog names those systems and carries their API contracts."
7036
+ },
7037
+ "open": {
7038
+ "title": "Open Foundational services",
7039
+ "body": "The catalog of shared capabilities available to every board in this workspace."
7040
+ },
7041
+ "catalog": {
7042
+ "title": "Register, upload, or sync",
7043
+ "body": "Add a service by hand, upload its API documents, or link a repository and let them sync. Designs then reference what is registered here instead of inventing an interface."
7044
+ },
7045
+ "finish": {
7046
+ "title": "Design steps read this",
7047
+ "body": "A design that declares which of these it uses gets their full contracts in the next step. One that declares nothing gets nothing, so keeping this current is what makes it work."
7048
+ }
7049
+ }
6908
7050
  }
7051
+ },
7052
+ "nudge": {
7053
+ "label": "New walkthrough available",
7054
+ "start": "Show me",
7055
+ "dismiss": "Dismiss"
6909
7056
  }
6910
7057
  },
6911
7058
  "externalTools": {