@cat-factory/app 0.294.0 → 0.295.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.
@@ -1,5 +1,6 @@
1
1
  import { describe, expect, it } from 'vitest'
2
2
  import {
3
+ defaultBootstrapDelivery,
3
4
  serviceDirectoryLeaf,
4
5
  serviceDirectoryParent,
5
6
  } from '~/components/bootstrap/BootstrapModal.logic'
@@ -41,3 +42,13 @@ describe('serviceDirectoryParent', () => {
41
42
  expect(serviceDirectoryParent('')).toBe('')
42
43
  })
43
44
  })
45
+
46
+ describe('defaultBootstrapDelivery', () => {
47
+ it('reviews a monorepo and pushes a repository being created', () => {
48
+ // The form has to SHOW the default it is about to send, and the two targets want opposite
49
+ // ones, so a constant would render the wrong answer for one of them and ask the person to
50
+ // correct a choice they never made. Same rule the backend applies to a request naming none.
51
+ expect(defaultBootstrapDelivery(true)).toBe('pull_request')
52
+ expect(defaultBootstrapDelivery(false)).toBe('direct_push')
53
+ })
54
+ })
@@ -1,3 +1,4 @@
1
+ import type { BootstrapDelivery } from '~/types/domain'
1
2
  import { repoPathSegments } from '~/utils/repoPath'
2
3
 
3
4
  // The pure half of the bootstrap launch form's monorepo service-directory field. That field
@@ -26,3 +27,18 @@ export function serviceDirectoryLeaf(directory: string, serviceName: string): st
26
27
  export function serviceDirectoryParent(directory: string): string {
27
28
  return repoPathSegments(directory).slice(0, -1).join('/')
28
29
  }
30
+
31
+ /**
32
+ * The delivery a target takes when nobody has answered the question.
33
+ *
34
+ * The backend applies the same rule for a request that names none, and it is stated on both
35
+ * sides deliberately: the form has to SHOW the default it is about to send, and a control
36
+ * rendering the wrong one asks the person to correct something they never chose. The two targets
37
+ * want opposite answers, which is why it is a function of the target rather than a constant.
38
+ *
39
+ * Also what the form RESETS to after a launch: an explicit choice binds the run it was made for,
40
+ * never every later one, so the reset restores the default for whatever target is still selected.
41
+ */
42
+ export function defaultBootstrapDelivery(intoMonorepo: boolean): BootstrapDelivery {
43
+ return intoMonorepo ? 'pull_request' : 'direct_push'
44
+ }
@@ -4,8 +4,14 @@
4
4
  // adapt it (in a sandbox container) — either by cloning a chosen reference
5
5
  // architecture, or from scratch following a freeform prompt. The modal pairs the
6
6
  // launch form with the managed base list.
7
- import type { BootstrapStatus, FrameRepoType, ReferenceArchitecture } from '~/types/domain'
7
+ import type {
8
+ BootstrapDelivery,
9
+ BootstrapStatus,
10
+ FrameRepoType,
11
+ ReferenceArchitecture,
12
+ } from '~/types/domain'
8
13
  import {
14
+ defaultBootstrapDelivery,
9
15
  serviceDirectoryLeaf,
10
16
  serviceDirectoryParent,
11
17
  } from '~/components/bootstrap/BootstrapModal.logic'
@@ -105,6 +111,42 @@ const targetItems = computed(() => [
105
111
  ])
106
112
  const intoMonorepo = computed(() => target.value === 'monorepo')
107
113
 
114
+ // ---- how the work LANDS ----------------------------------------------------
115
+ // A third axis, orthogonal to both of the above: the same service, written the same way, either
116
+ // arrives as a pull request somebody reviews or straight on the default branch. The two targets
117
+ // want opposite defaults (a repository being created has nobody to review its first commit; a
118
+ // monorepo's default branch is the branch every other service builds from), which is exactly why
119
+ // this is a control and not a constant.
120
+ const delivery = ref<BootstrapDelivery>(defaultBootstrapDelivery(false))
121
+ // Whether the person has answered this question themselves. Until they have, switching target
122
+ // re-defaults; once they have, their answer stands, because re-defaulting over an explicit
123
+ // choice is how a run they asked to review lands unreviewed. Cleared after a launch, so the
124
+ // answer binds the run it was given for rather than every later one (see `launch`).
125
+ const deliveryTouched = ref(false)
126
+ watch(intoMonorepo, (into) => {
127
+ if (!deliveryTouched.value) delivery.value = defaultBootstrapDelivery(into)
128
+ })
129
+ function chooseDelivery(value: BootstrapDelivery) {
130
+ deliveryTouched.value = true
131
+ delivery.value = value
132
+ }
133
+ const deliveryItems = computed(() => [
134
+ {
135
+ label: t('bootstrap.delivery.pullRequest.label'),
136
+ value: 'pull_request' as const,
137
+ description: intoMonorepo.value
138
+ ? t('bootstrap.delivery.pullRequest.descMonorepo')
139
+ : t('bootstrap.delivery.pullRequest.descNewRepo'),
140
+ },
141
+ {
142
+ label: t('bootstrap.delivery.directPush.label'),
143
+ value: 'direct_push' as const,
144
+ description: intoMonorepo.value
145
+ ? t('bootstrap.delivery.directPush.descMonorepo')
146
+ : t('bootstrap.delivery.directPush.descNewRepo'),
147
+ },
148
+ ])
149
+
108
150
  /** The projected repo the new service lands in, by numeric id. */
109
151
  const monorepoRepoId = ref<number | undefined>(undefined)
110
152
  const monorepoDirectory = ref('')
@@ -323,6 +365,7 @@ async function launch() {
323
365
  private: isPrivate.value,
324
366
  instructions: instructions.value.trim(),
325
367
  type: selectedType.value,
368
+ delivery: delivery.value,
326
369
  ...(intoMonorepo.value && monorepoRepoId.value
327
370
  ? {
328
371
  monorepo: {
@@ -363,6 +406,12 @@ async function launch() {
363
406
  browsingDirectory.value = false
364
407
  // Reset the repo role too, so a later bootstrap doesn't silently inherit this one's type.
365
408
  selectedType.value = 'service'
409
+ // And the delivery, which has to reset the ANSWERED flag with it: leaving that set disarms
410
+ // the per-target default for good, so a "push directly" picked deliberately for one
411
+ // monorepo would go on governing the next bootstrap, into a different repository, without
412
+ // the person having been asked about that one. Back to the current target's own default.
413
+ deliveryTouched.value = false
414
+ delivery.value = defaultBootstrapDelivery(intoMonorepo.value)
366
415
  // The provisional frame arrived (bootstrap() refreshed the board). Re-home it to
367
416
  // free space so it never overlaps an existing service — the backend places it on a
368
417
  // fixed diagonal stagger that can land on top of a large neighbour — then centre the
@@ -553,6 +602,17 @@ const statusLabel = computed<Record<BootstrapStatus, string>>(() => ({
553
602
  <URadioGroup v-model="target" :items="targetItems" />
554
603
  </UFormField>
555
604
 
605
+ <!-- Where the service goes and how it gets there are two questions, and the second
606
+ has no answer that is right for both targets. Its descriptions therefore change
607
+ with the target rather than the control being duplicated per target. -->
608
+ <UFormField :label="t('bootstrap.delivery.label')" required>
609
+ <URadioGroup
610
+ :model-value="delivery"
611
+ :items="deliveryItems"
612
+ @update:model-value="chooseDelivery($event as BootstrapDelivery)"
613
+ />
614
+ </UFormField>
615
+
556
616
  <!-- Landing in an existing monorepo: pick the repository and the subdirectory. The
557
617
  run surveys the monorepo's conventions against the template's and PARKS for a
558
618
  human adoption review before it writes anything. -->
@@ -800,6 +860,18 @@ const statusLabel = computed<Record<BootstrapStatus, string>>(() => ({
800
860
  >
801
861
  {{ t('bootstrap.recent.open') }}
802
862
  </ULink>
863
+ <!-- The deliverable of a `pull_request` run, and the only thing it produced that
864
+ the user still has to act on. A monorepo run has no `repoUrl` at all, so
865
+ without this the run's whole output is unreachable from the list that
866
+ offered the choice. -->
867
+ <ULink
868
+ v-if="job.prUrl"
869
+ :to="job.prUrl"
870
+ target="_blank"
871
+ class="text-[11px] text-indigo-400 hover:underline"
872
+ >
873
+ {{ t('bootstrap.recent.openPr') }}
874
+ </ULink>
803
875
  <UBadge :color="statusColor[job.status]" variant="subtle" size="sm">
804
876
  {{ statusLabel[job.status] }}
805
877
  </UBadge>
@@ -20,6 +20,7 @@ function job(id: string, over: Partial<BootstrapJob> = {}): BootstrapJob {
20
20
  failure: null,
21
21
  monorepo: null,
22
22
  phase: null,
23
+ delivery: 'direct_push',
23
24
  adoptionPlan: null,
24
25
  adoptionReview: null,
25
26
  prUrl: null,
@@ -18,6 +18,7 @@ export type {
18
18
  BootstrapFailure,
19
19
  BootstrapJob,
20
20
  BootstrapPhase,
21
+ BootstrapDelivery,
21
22
  BootstrapRepoInput,
22
23
  MonorepoBootstrapTarget,
23
24
  MonorepoBootstrapRef,
@@ -5086,7 +5086,8 @@
5086
5086
  "title": "Letzte Läufe",
5087
5087
  "fromArch": "aus {name}",
5088
5088
  "fromScratch": "von Grund auf",
5089
- "open": "Öffnen"
5089
+ "open": "Öffnen",
5090
+ "openPr": "Pull Request"
5090
5091
  },
5091
5092
  "status": {
5092
5093
  "pending": "ausstehend",
@@ -5134,11 +5135,24 @@
5134
5135
  "label": "Wo der Service entsteht",
5135
5136
  "newRepo": {
5136
5137
  "label": "Ein neues Repository",
5137
- "description": "Ein eigenes Repository anlegen und den Service als ersten Commit pushen."
5138
+ "description": "Ein eigenes Repository anlegen und den Service hineinschreiben."
5138
5139
  },
5139
5140
  "monorepo": {
5140
5141
  "label": "Ein Verzeichnis in einem bestehenden Monorepo",
5141
- "description": "Den Service einem vorhandenen Repository hinzufügen und einen Pull Request öffnen."
5142
+ "description": "Den Service einem Repository hinzufügen, das du bereits hast."
5143
+ }
5144
+ },
5145
+ "delivery": {
5146
+ "label": "Wie die Arbeit ankommt",
5147
+ "pullRequest": {
5148
+ "label": "Pull Request öffnen",
5149
+ "descNewRepo": "Einen Branch pushen und einen Pull Request gegen den ersten Commit des Repositories öffnen, damit jemand das Gerüst prüft, bevor es zum Default-Branch wird. Das Repository muss bereits einen Commit haben.",
5150
+ "descMonorepo": "Einen Branch pushen und einen Pull Request öffnen. Es wird nichts für dich gemergt."
5151
+ },
5152
+ "directPush": {
5153
+ "label": "Direkt pushen",
5154
+ "descNewRepo": "Den Service direkt als ersten Commit auf den Default-Branch schreiben.",
5155
+ "descMonorepo": "Während der Agent arbeitet, direkt auf den Default-Branch committen. Bei einem Fehlschlag bleibt liegen, was bereits geschrieben wurde."
5142
5156
  }
5143
5157
  },
5144
5158
  "serviceName": {
@@ -5146,7 +5160,7 @@
5146
5160
  "description": "Benennt den Service auf dem Board und schlägt sein Verzeichnis vor."
5147
5161
  },
5148
5162
  "monorepo": {
5149
- "intro": "Der Service wird in ein Verzeichnis eines bestehenden Repositories geschrieben und als Pull Request geliefert. Es wird nichts für dich gemergt und nichts außerhalb des neuen Verzeichnisses geändert.",
5163
+ "intro": "Der Service wird in ein Verzeichnis eines bestehenden Repositories geschrieben; außerhalb dieses Verzeichnisses wird nichts geändert.",
5150
5164
  "repo": {
5151
5165
  "label": "Monorepo",
5152
5166
  "description": "Das Repository, in dem der neue Service liegt. Es muss bereits mit diesem Workspace verknüpft sein.",
@@ -7276,7 +7276,8 @@
7276
7276
  "title": "Recent runs",
7277
7277
  "fromArch": "from {name}",
7278
7278
  "fromScratch": "from scratch",
7279
- "open": "Open"
7279
+ "open": "Open",
7280
+ "openPr": "Pull request"
7280
7281
  },
7281
7282
  "status": {
7282
7283
  "pending": "pending",
@@ -7324,11 +7325,24 @@
7324
7325
  "label": "Where the service goes",
7325
7326
  "newRepo": {
7326
7327
  "label": "A new repository",
7327
- "description": "Create a repository of its own and push the service as its first commit."
7328
+ "description": "Create a repository of its own and write the service into it."
7328
7329
  },
7329
7330
  "monorepo": {
7330
7331
  "label": "A directory in an existing monorepo",
7331
- "description": "Add the service to a repository you already have, and open a pull request."
7332
+ "description": "Add the service to a repository you already have."
7333
+ }
7334
+ },
7335
+ "delivery": {
7336
+ "label": "How the work lands",
7337
+ "pullRequest": {
7338
+ "label": "Open a pull request",
7339
+ "descNewRepo": "Push a branch and open a pull request against the repository's first commit, so someone reviews the scaffold before it becomes the default branch. The repository must already have a commit.",
7340
+ "descMonorepo": "Push a branch and open a pull request. Nothing is merged for you."
7341
+ },
7342
+ "directPush": {
7343
+ "label": "Push directly",
7344
+ "descNewRepo": "Write the service straight onto the default branch as the repository's first commit.",
7345
+ "descMonorepo": "Commit onto the default branch as the agent works. A run that fails leaves what it had already written behind."
7332
7346
  }
7333
7347
  },
7334
7348
  "serviceName": {
@@ -7336,7 +7350,7 @@
7336
7350
  "description": "Names the service on the board and seeds its directory."
7337
7351
  },
7338
7352
  "monorepo": {
7339
- "intro": "The service is written into a directory of an existing repository and delivered as a pull request. Nothing is merged for you, and nothing outside the new directory is changed.",
7353
+ "intro": "The service is written into a directory of an existing repository, and nothing outside that directory is changed.",
7340
7354
  "repo": {
7341
7355
  "label": "Monorepo",
7342
7356
  "description": "The repository the new service lives in. It must already be linked to this workspace.",
@@ -6952,7 +6952,8 @@
6952
6952
  "title": "Ejecuciones recientes",
6953
6953
  "fromArch": "desde {name}",
6954
6954
  "fromScratch": "desde cero",
6955
- "open": "Abrir"
6955
+ "open": "Abrir",
6956
+ "openPr": "Pull request"
6956
6957
  },
6957
6958
  "status": {
6958
6959
  "pending": "pendiente",
@@ -7004,11 +7005,24 @@
7004
7005
  "label": "Dónde va el servicio",
7005
7006
  "newRepo": {
7006
7007
  "label": "Un repositorio nuevo",
7007
- "description": "Crear un repositorio propio y subir el servicio como su primer commit."
7008
+ "description": "Crear un repositorio propio y escribir el servicio en él."
7008
7009
  },
7009
7010
  "monorepo": {
7010
7011
  "label": "Un directorio de un monorepo existente",
7011
- "description": "Añadir el servicio a un repositorio que ya tienes y abrir un pull request."
7012
+ "description": "Añadir el servicio a un repositorio que ya tienes."
7013
+ }
7014
+ },
7015
+ "delivery": {
7016
+ "label": "Cómo se entrega el trabajo",
7017
+ "pullRequest": {
7018
+ "label": "Abrir un pull request",
7019
+ "descNewRepo": "Subir una rama y abrir un pull request contra el primer commit del repositorio, para que alguien revise el andamiaje antes de que sea la rama principal. El repositorio ya debe tener un commit.",
7020
+ "descMonorepo": "Subir una rama y abrir un pull request. No se fusiona nada por ti."
7021
+ },
7022
+ "directPush": {
7023
+ "label": "Subir directamente",
7024
+ "descNewRepo": "Escribir el servicio directamente en la rama principal como primer commit del repositorio.",
7025
+ "descMonorepo": "Hacer commits en la rama principal mientras el agente trabaja. Si la ejecución falla, queda lo que ya se había escrito."
7012
7026
  }
7013
7027
  },
7014
7028
  "serviceName": {
@@ -7016,7 +7030,7 @@
7016
7030
  "description": "Nombra el servicio en el tablero y propone su directorio."
7017
7031
  },
7018
7032
  "monorepo": {
7019
- "intro": "El servicio se escribe en un directorio de un repositorio existente y se entrega como pull request. No se fusiona nada por ti ni se cambia nada fuera del nuevo directorio.",
7033
+ "intro": "El servicio se escribe en un directorio de un repositorio existente, y no se cambia nada fuera de ese directorio.",
7020
7034
  "repo": {
7021
7035
  "label": "Monorepo",
7022
7036
  "description": "El repositorio donde vivirá el nuevo servicio. Ya debe estar vinculado a este espacio de trabajo.",
@@ -6952,7 +6952,8 @@
6952
6952
  "title": "Exécutions récentes",
6953
6953
  "fromArch": "depuis {name}",
6954
6954
  "fromScratch": "à partir de zéro",
6955
- "open": "Ouvrir"
6955
+ "open": "Ouvrir",
6956
+ "openPr": "Pull request"
6956
6957
  },
6957
6958
  "status": {
6958
6959
  "pending": "en attente",
@@ -7004,11 +7005,24 @@
7004
7005
  "label": "Où va le service",
7005
7006
  "newRepo": {
7006
7007
  "label": "Un nouveau dépôt",
7007
- "description": "Créer un dépôt dédié et pousser le service comme premier commit."
7008
+ "description": "Créer un dépôt dédié et y écrire le service."
7008
7009
  },
7009
7010
  "monorepo": {
7010
7011
  "label": "Un répertoire d’un monorepo existant",
7011
- "description": "Ajouter le service à un dépôt que vous avez déjà et ouvrir une pull request."
7012
+ "description": "Ajouter le service à un dépôt que vous avez déjà."
7013
+ }
7014
+ },
7015
+ "delivery": {
7016
+ "label": "Comment le travail est livré",
7017
+ "pullRequest": {
7018
+ "label": "Ouvrir une pull request",
7019
+ "descNewRepo": "Pousser une branche et ouvrir une pull request sur le premier commit du dépôt, pour qu’une personne relise l’ossature avant qu’elle ne devienne la branche par défaut. Le dépôt doit déjà avoir un commit.",
7020
+ "descMonorepo": "Pousser une branche et ouvrir une pull request. Rien n’est fusionné à votre place."
7021
+ },
7022
+ "directPush": {
7023
+ "label": "Pousser directement",
7024
+ "descNewRepo": "Écrire le service directement sur la branche par défaut, comme premier commit du dépôt.",
7025
+ "descMonorepo": "Committer sur la branche par défaut pendant que l’agent travaille. Si l’exécution échoue, ce qui a déjà été écrit reste en place."
7012
7026
  }
7013
7027
  },
7014
7028
  "serviceName": {
@@ -7016,7 +7030,7 @@
7016
7030
  "description": "Nomme le service sur le tableau et propose son répertoire."
7017
7031
  },
7018
7032
  "monorepo": {
7019
- "intro": "Le service est écrit dans un répertoire d’un dépôt existant et livré sous forme de pull request. Rien n’est fusionné à votre place et rien n’est modifié hors du nouveau répertoire.",
7033
+ "intro": "Le service est écrit dans un répertoire d’un dépôt existant, et rien n’est modifié hors de ce répertoire.",
7020
7034
  "repo": {
7021
7035
  "label": "Monorepo",
7022
7036
  "description": "Le dépôt qui hébergera le nouveau service. Il doit déjà être lié à cet espace de travail.",
@@ -6952,7 +6952,8 @@
6952
6952
  "title": "הרצות אחרונות",
6953
6953
  "fromArch": "מתוך {name}",
6954
6954
  "fromScratch": "מאפס",
6955
- "open": "פתח"
6955
+ "open": "פתח",
6956
+ "openPr": "Pull request"
6956
6957
  },
6957
6958
  "status": {
6958
6959
  "pending": "ממתין",
@@ -7004,11 +7005,24 @@
7004
7005
  "label": "לאן השירות ילך",
7005
7006
  "newRepo": {
7006
7007
  "label": "מאגר חדש",
7007
- "description": "ליצור מאגר משלו ולדחוף את השירות כקומיט הראשון שלו."
7008
+ "description": "ליצור מאגר משלו ולכתוב אליו את השירות."
7008
7009
  },
7009
7010
  "monorepo": {
7010
7011
  "label": "תיקייה במונורפו קיים",
7011
- "description": "להוסיף את השירות למאגר שכבר יש לך ולפתוח בקשת משיכה."
7012
+ "description": "להוסיף את השירות למאגר שכבר יש לך."
7013
+ }
7014
+ },
7015
+ "delivery": {
7016
+ "label": "איך העבודה מגיעה",
7017
+ "pullRequest": {
7018
+ "label": "לפתוח pull request",
7019
+ "descNewRepo": "דוחף ענף ופותח pull request מול הקומיט הראשון של המאגר, כדי שמישהו יסקור את השלד לפני שהוא הופך לענף ברירת המחדל. למאגר חייב כבר להיות קומיט.",
7020
+ "descMonorepo": "דוחף ענף ופותח pull request. שום דבר לא ממוזג במקומך."
7021
+ },
7022
+ "directPush": {
7023
+ "label": "לדחוף ישירות",
7024
+ "descNewRepo": "כותב את השירות ישירות לענף ברירת המחדל, כקומיט הראשון של המאגר.",
7025
+ "descMonorepo": "מבצע קומיטים לענף ברירת המחדל בזמן שהסוכן עובד. ריצה שנכשלת משאירה את מה שכבר נכתב."
7012
7026
  }
7013
7027
  },
7014
7028
  "serviceName": {
@@ -7016,7 +7030,7 @@
7016
7030
  "description": "נותן שם לשירות בלוח ומציע את התיקייה שלו."
7017
7031
  },
7018
7032
  "monorepo": {
7019
- "intro": "השירות נכתב לתיקייה במאגר קיים ומסופק כבקשת משיכה. שום דבר לא ממוזג במקומך ושום דבר מחוץ לתיקייה החדשה לא משתנה.",
7033
+ "intro": "השירות נכתב לתיקייה של מאגר קיים, ושום דבר מחוץ לתיקייה הזו לא משתנה.",
7020
7034
  "repo": {
7021
7035
  "label": "מונורפו",
7022
7036
  "description": "המאגר שבו יחיה השירות החדש. הוא חייב להיות מקושר כבר למרחב העבודה הזה.",
@@ -5086,7 +5086,8 @@
5086
5086
  "title": "Esecuzioni recenti",
5087
5087
  "fromArch": "da {name}",
5088
5088
  "fromScratch": "da zero",
5089
- "open": "Apri"
5089
+ "open": "Apri",
5090
+ "openPr": "Pull request"
5090
5091
  },
5091
5092
  "status": {
5092
5093
  "pending": "in attesa",
@@ -5134,11 +5135,24 @@
5134
5135
  "label": "Dove va il servizio",
5135
5136
  "newRepo": {
5136
5137
  "label": "Un nuovo repository",
5137
- "description": "Creare un repository dedicato e caricare il servizio come primo commit."
5138
+ "description": "Crea un repository dedicato e ci scrive il servizio."
5138
5139
  },
5139
5140
  "monorepo": {
5140
5141
  "label": "Una cartella di un monorepo esistente",
5141
- "description": "Aggiungere il servizio a un repository che hai già e aprire una pull request."
5142
+ "description": "Aggiunge il servizio a un repository che hai già."
5143
+ }
5144
+ },
5145
+ "delivery": {
5146
+ "label": "Come viene consegnato il lavoro",
5147
+ "pullRequest": {
5148
+ "label": "Apri una pull request",
5149
+ "descNewRepo": "Pubblica un branch e apre una pull request sul primo commit del repository, così qualcuno rivede l’impalcatura prima che diventi il branch predefinito. Il repository deve già avere un commit.",
5150
+ "descMonorepo": "Pubblica un branch e apre una pull request. Non viene unito nulla al posto tuo."
5151
+ },
5152
+ "directPush": {
5153
+ "label": "Pubblica direttamente",
5154
+ "descNewRepo": "Scrive il servizio direttamente sul branch predefinito, come primo commit del repository.",
5155
+ "descMonorepo": "Fa commit sul branch predefinito mentre l’agente lavora. Se l’esecuzione fallisce, resta quanto era già stato scritto."
5142
5156
  }
5143
5157
  },
5144
5158
  "serviceName": {
@@ -5146,7 +5160,7 @@
5146
5160
  "description": "Dà il nome al servizio sulla lavagna e propone la sua cartella."
5147
5161
  },
5148
5162
  "monorepo": {
5149
- "intro": "Il servizio viene scritto in una cartella di un repository esistente e consegnato come pull request. Nulla viene unito al posto tuo e nulla viene modificato fuori dalla nuova cartella.",
5163
+ "intro": "Il servizio viene scritto in una directory di un repository esistente e nulla al di fuori di quella directory viene modificato.",
5150
5164
  "repo": {
5151
5165
  "label": "Monorepo",
5152
5166
  "description": "Il repository in cui vivrà il nuovo servizio. Deve essere già collegato a questo spazio di lavoro.",
@@ -6952,7 +6952,8 @@
6952
6952
  "title": "最近の実行",
6953
6953
  "fromArch": "{name} から",
6954
6954
  "fromScratch": "ゼロから",
6955
- "open": "開く"
6955
+ "open": "開く",
6956
+ "openPr": "プルリクエスト"
6956
6957
  },
6957
6958
  "status": {
6958
6959
  "pending": "保留中",
@@ -7004,11 +7005,24 @@
7004
7005
  "label": "サービスの配置先",
7005
7006
  "newRepo": {
7006
7007
  "label": "新しいリポジトリ",
7007
- "description": "専用のリポジトリを作成し、サービスを最初のコミットとしてプッシュします。"
7008
+ "description": "専用のリポジトリを作成し、そこにサービスを書き込みます。"
7008
7009
  },
7009
7010
  "monorepo": {
7010
7011
  "label": "既存モノレポ内のディレクトリ",
7011
- "description": "すでにあるリポジトリにサービスを追加し、プルリクエストを開きます。"
7012
+ "description": "すでにあるリポジトリにサービスを追加します。"
7013
+ }
7014
+ },
7015
+ "delivery": {
7016
+ "label": "成果物の届け方",
7017
+ "pullRequest": {
7018
+ "label": "プルリクエストを開く",
7019
+ "descNewRepo": "ブランチをプッシュし、リポジトリの最初のコミットに対してプルリクエストを開きます。既定ブランチになる前に足場を人がレビューできます。リポジトリにはすでにコミットが必要です。",
7020
+ "descMonorepo": "ブランチをプッシュしてプルリクエストを開きます。マージは代わりに行いません。"
7021
+ },
7022
+ "directPush": {
7023
+ "label": "直接プッシュ",
7024
+ "descNewRepo": "サービスをリポジトリの最初のコミットとして既定ブランチに直接書き込みます。",
7025
+ "descMonorepo": "エージェントの作業中に既定ブランチへコミットします。失敗した実行は、そこまでに書いた内容を残します。"
7012
7026
  }
7013
7027
  },
7014
7028
  "serviceName": {
@@ -7016,7 +7030,7 @@
7016
7030
  "description": "ボード上のサービス名になり、ディレクトリの初期値にもなります。"
7017
7031
  },
7018
7032
  "monorepo": {
7019
- "intro": "サービスは既存リポジトリのディレクトリに書き込まれ、プルリクエストとして届きます。代わりにマージすることはなく、新しいディレクトリの外は変更しません。",
7033
+ "intro": "サービスは既存リポジトリのディレクトリに書き込まれ、そのディレクトリの外は変更されません。",
7020
7034
  "repo": {
7021
7035
  "label": "モノレポ",
7022
7036
  "description": "新しいサービスを置くリポジトリ。このワークスペースにすでにリンクされている必要があります。",
@@ -6952,7 +6952,8 @@
6952
6952
  "title": "Ostatnie uruchomienia",
6953
6953
  "fromArch": "z {name}",
6954
6954
  "fromScratch": "od zera",
6955
- "open": "Otwórz"
6955
+ "open": "Otwórz",
6956
+ "openPr": "Pull request"
6956
6957
  },
6957
6958
  "status": {
6958
6959
  "pending": "oczekuje",
@@ -7004,11 +7005,24 @@
7004
7005
  "label": "Gdzie trafi usługa",
7005
7006
  "newRepo": {
7006
7007
  "label": "Nowe repozytorium",
7007
- "description": "Utwórz osobne repozytorium i wypchnij usługę jako jego pierwszy commit."
7008
+ "description": "Utwórz osobne repozytorium i zapisz w nim usługę."
7008
7009
  },
7009
7010
  "monorepo": {
7010
7011
  "label": "Katalog w istniejącym monorepo",
7011
- "description": "Dodaj usługę do repozytorium, które już masz, i otwórz pull request."
7012
+ "description": "Dodaj usługę do repozytorium, które już masz."
7013
+ }
7014
+ },
7015
+ "delivery": {
7016
+ "label": "Jak trafia praca",
7017
+ "pullRequest": {
7018
+ "label": "Otwórz pull request",
7019
+ "descNewRepo": "Wypchnij gałąź i otwórz pull request wobec pierwszego commita repozytorium, żeby ktoś przejrzał szkielet, zanim stanie się gałęzią domyślną. Repozytorium musi już mieć commit.",
7020
+ "descMonorepo": "Wypchnij gałąź i otwórz pull request. Nic nie zostanie scalone za ciebie."
7021
+ },
7022
+ "directPush": {
7023
+ "label": "Wypchnij bezpośrednio",
7024
+ "descNewRepo": "Zapisz usługę prosto na gałęzi domyślnej, jako pierwszy commit repozytorium.",
7025
+ "descMonorepo": "Commituj na gałąź domyślną w trakcie pracy agenta. Nieudany przebieg zostawia to, co zdążył zapisać."
7012
7026
  }
7013
7027
  },
7014
7028
  "serviceName": {
@@ -7016,7 +7030,7 @@
7016
7030
  "description": "Nazywa usługę na tablicy i podpowiada jej katalog."
7017
7031
  },
7018
7032
  "monorepo": {
7019
- "intro": "Usługa jest zapisywana w katalogu istniejącego repozytorium i dostarczana jako pull request. Nic nie jest za Ciebie scalane ani zmieniane poza nowym katalogiem.",
7033
+ "intro": "Usługa jest zapisywana w katalogu istniejącego repozytorium; poza tym katalogiem nic się nie zmienia.",
7020
7034
  "repo": {
7021
7035
  "label": "Monorepo",
7022
7036
  "description": "Repozytorium, w którym zamieszka nowa usługa. Musi być już powiązane z tą przestrzenią roboczą.",
@@ -6952,7 +6952,8 @@
6952
6952
  "title": "Son çalıştırmalar",
6953
6953
  "fromArch": "{name} kaynağından",
6954
6954
  "fromScratch": "sıfırdan",
6955
- "open": "Aç"
6955
+ "open": "Aç",
6956
+ "openPr": "Pull request"
6956
6957
  },
6957
6958
  "status": {
6958
6959
  "pending": "beklemede",
@@ -7004,11 +7005,24 @@
7004
7005
  "label": "Servis nereye gidecek",
7005
7006
  "newRepo": {
7006
7007
  "label": "Yeni bir depo",
7007
- "description": "Kendine ait bir depo oluştur ve servisi ilk commit olarak gönder."
7008
+ "description": "Kendine ait bir depo oluşturur ve servisi içine yazar."
7008
7009
  },
7009
7010
  "monorepo": {
7010
7011
  "label": "Mevcut bir monorepo içindeki dizin",
7011
- "description": "Servisi hâlihazırda sahip olduğun bir depoya ekle ve pull request aç."
7012
+ "description": "Servisi hâlihazırda sahip olduğun bir depoya ekler."
7013
+ }
7014
+ },
7015
+ "delivery": {
7016
+ "label": "İş nasıl teslim edilsin",
7017
+ "pullRequest": {
7018
+ "label": "Pull request aç",
7019
+ "descNewRepo": "Bir dal gönderir ve deponun ilk commit’ine karşı pull request açar; böylece iskelet varsayılan dal olmadan önce biri inceler. Deponun zaten bir commit’i olmalıdır.",
7020
+ "descMonorepo": "Bir dal gönderir ve pull request açar. Senin yerine hiçbir şey birleştirilmez."
7021
+ },
7022
+ "directPush": {
7023
+ "label": "Doğrudan gönder",
7024
+ "descNewRepo": "Servisi doğrudan varsayılan dala, deponun ilk commit’i olarak yazar.",
7025
+ "descMonorepo": "Ajan çalışırken varsayılan dala commit atar. Başarısız bir çalıştırma, o ana kadar yazdıklarını geride bırakır."
7012
7026
  }
7013
7027
  },
7014
7028
  "serviceName": {
@@ -7016,7 +7030,7 @@
7016
7030
  "description": "Servisi panoda adlandırır ve dizinini önerir."
7017
7031
  },
7018
7032
  "monorepo": {
7019
- "intro": "Servis mevcut bir deponun dizinine yazılır ve pull request olarak teslim edilir. Senin yerine hiçbir şey birleştirilmez ve yeni dizinin dışında hiçbir şey değişmez.",
7033
+ "intro": "Servis mevcut bir deponun bir dizinine yazılır ve o dizinin dışında hiçbir şey değiştirilmez.",
7020
7034
  "repo": {
7021
7035
  "label": "Monorepo",
7022
7036
  "description": "Yeni servisin yaşayacağı depo. Bu çalışma alanına önceden bağlanmış olmalı.",
@@ -6952,7 +6952,8 @@
6952
6952
  "title": "Нещодавні запуски",
6953
6953
  "fromArch": "з {name}",
6954
6954
  "fromScratch": "з нуля",
6955
- "open": "Відкрити"
6955
+ "open": "Відкрити",
6956
+ "openPr": "Pull request"
6956
6957
  },
6957
6958
  "status": {
6958
6959
  "pending": "очікує",
@@ -7004,11 +7005,24 @@
7004
7005
  "label": "Куди піде сервіс",
7005
7006
  "newRepo": {
7006
7007
  "label": "Новий репозиторій",
7007
- "description": "Створити окремий репозиторій і надіслати сервіс як його перший коміт."
7008
+ "description": "Створити окремий репозиторій і записати сервіс у нього."
7008
7009
  },
7009
7010
  "monorepo": {
7010
7011
  "label": "Каталог у наявному монорепозиторії",
7011
- "description": "Додати сервіс до репозиторію, який у вас уже є, і відкрити pull request."
7012
+ "description": "Додати сервіс до репозиторію, який ви вже маєте."
7013
+ }
7014
+ },
7015
+ "delivery": {
7016
+ "label": "Як потрапляє робота",
7017
+ "pullRequest": {
7018
+ "label": "Відкрити pull request",
7019
+ "descNewRepo": "Надіслати гілку й відкрити pull request щодо першого коміту репозиторію, щоб хтось переглянув каркас, перш ніж він стане типовою гілкою. Репозиторій уже має містити коміт.",
7020
+ "descMonorepo": "Надіслати гілку й відкрити pull request. Нічого не зливається за вас."
7021
+ },
7022
+ "directPush": {
7023
+ "label": "Надіслати напряму",
7024
+ "descNewRepo": "Записати сервіс одразу в типову гілку як перший коміт репозиторію.",
7025
+ "descMonorepo": "Комітити в типову гілку, поки агент працює. Невдалий запуск лишає те, що вже було записано."
7012
7026
  }
7013
7027
  },
7014
7028
  "serviceName": {
@@ -7016,7 +7030,7 @@
7016
7030
  "description": "Називає сервіс на дошці та підказує його каталог."
7017
7031
  },
7018
7032
  "monorepo": {
7019
- "intro": "Сервіс записується в каталог наявного репозиторію та постачається як pull request. Нічого не зливається за вас і нічого поза новим каталогом не змінюється.",
7033
+ "intro": "Сервіс записується в каталог наявного репозиторію, і поза цим каталогом нічого не змінюється.",
7020
7034
  "repo": {
7021
7035
  "label": "Монорепозиторій",
7022
7036
  "description": "Репозиторій, у якому житиме новий сервіс. Він має бути вже пов’язаний із цим робочим простором.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.294.0",
3
+ "version": "0.295.0",
4
4
  "description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,7 +18,7 @@
18
18
  "access": "public"
19
19
  },
20
20
  "dependencies": {
21
- "@cat-factory/contracts": "0.344.0",
21
+ "@cat-factory/contracts": "0.345.0",
22
22
  "@modular-frontend/core": "0.6.0",
23
23
  "@modular-vue/core": "^1.5.0",
24
24
  "@modular-vue/journeys": "^1.4.0",