@cat-factory/app 0.282.2 → 0.284.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.
- package/README.md +19 -0
- package/app/components/board/BoardCanvas.logic.spec.ts +71 -0
- package/app/components/board/BoardCanvas.logic.ts +92 -0
- package/app/components/board/BoardCanvas.vue +14 -27
- package/app/components/board/nodes/TaskPipelineMini.vue +2 -1
- package/app/components/panels/AgentStepDetail.vue +27 -1
- package/app/components/panels/ResultWindowShell.vue +19 -0
- package/app/components/panels/RunDetailLoadState.vue +41 -0
- package/app/components/panels/inspector/TaskEstimateBadge.vue +63 -7
- package/app/components/panels/inspector/TaskExecution.vue +3 -3
- package/app/components/pipeline/PipelineProgress.vue +7 -3
- package/app/composables/api/execution.ts +12 -0
- package/app/composables/useBlockDrag.ts +51 -5
- package/app/composables/usePipelineDraftWarnings.ts +6 -4
- package/app/composables/usePipelineHealth.spec.ts +13 -1
- package/app/composables/usePipelineHealth.ts +8 -9
- package/app/composables/useSingleFlight.spec.ts +42 -0
- package/app/composables/useSingleFlight.ts +37 -0
- package/app/composables/useStepApproval.ts +19 -0
- package/app/composables/useStepTimer.ts +70 -14
- package/app/composables/useUpsertList.spec.ts +73 -0
- package/app/composables/useUpsertList.ts +52 -6
- package/app/composables/useViewport.ts +13 -3
- package/app/stores/consensus.ts +8 -1
- package/app/stores/docInterview.ts +10 -1
- package/app/stores/execution/reconcile.ts +182 -0
- package/app/stores/execution/wholeRunReads.ts +139 -0
- package/app/stores/execution.spec.ts +297 -1
- package/app/stores/execution.ts +57 -110
- package/app/stores/kaizen.spec.ts +77 -14
- package/app/stores/kaizen.ts +75 -17
- package/app/stores/notifications.spec.ts +65 -0
- package/app/stores/notifications.ts +29 -0
- package/app/stores/observability/agentContext.ts +128 -0
- package/app/stores/observability/toolCalls.ts +30 -2
- package/app/stores/observability.spec.ts +98 -0
- package/app/stores/observability.ts +51 -79
- package/app/stores/requirements/settlement.ts +55 -0
- package/app/stores/requirements.ts +25 -23
- package/app/stores/workspace/hydrate.ts +11 -0
- package/app/stores/workspace/refreshFunnel.spec.ts +15 -1
- package/app/utils/catalog.spec.ts +1 -0
- package/app/utils/catalog.ts +18 -0
- package/app/utils/estimateGating.spec.ts +22 -0
- package/app/utils/estimateGating.ts +32 -0
- package/app/utils/pipelineRender.ts +2 -0
- package/i18n/locales/de.json +14 -2
- package/i18n/locales/en.json +14 -2
- package/i18n/locales/es.json +14 -2
- package/i18n/locales/fr.json +14 -2
- package/i18n/locales/he.json +14 -2
- package/i18n/locales/it.json +14 -2
- package/i18n/locales/ja.json +14 -2
- package/i18n/locales/pl.json +14 -2
- package/i18n/locales/tr.json +14 -2
- package/i18n/locales/uk.json +14 -2
- package/package.json +2 -2
package/app/utils/catalog.ts
CHANGED
|
@@ -126,6 +126,24 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
|
|
|
126
126
|
description:
|
|
127
127
|
'Triages the task after requirements are clarified — rates Complexity, Risk and Impact (0..1). Used to gate consensus and conditional companion steps, and shown as ratings on the task.',
|
|
128
128
|
},
|
|
129
|
+
{
|
|
130
|
+
// The estimator's retrospective twin: it reads the change that actually landed (read-only, in a
|
|
131
|
+
// container, on the run's pull request) and re-scores the same three axes. `advanced` rather
|
|
132
|
+
// than `intermediate`: an extra container run per task is not part of the everyday delivery
|
|
133
|
+
// loop, and the everyday reader wants the forecast, not the calibration.
|
|
134
|
+
kind: 'task-reassessor',
|
|
135
|
+
tier: 'advanced',
|
|
136
|
+
label: 'Task Reassessor',
|
|
137
|
+
icon: 'i-lucide-gauge-circle',
|
|
138
|
+
color: '#f59e0b',
|
|
139
|
+
category: 'review',
|
|
140
|
+
// Reads the pull request the run opened, so it only belongs where a pipeline ships code. A
|
|
141
|
+
// document, research, planning or review pipeline opens none, and the step would be offered
|
|
142
|
+
// only to be skipped for want of a change to measure.
|
|
143
|
+
purposes: ['build'],
|
|
144
|
+
description:
|
|
145
|
+
'Re-rates Complexity, Risk and Impact after the implementation lands, from the change that was actually made. Place it after the coder: it corrects the estimator’s forecast, or produces the ratings for the first time in a pipeline that has no estimator.',
|
|
146
|
+
},
|
|
129
147
|
{
|
|
130
148
|
kind: 'requirements-brainstorm',
|
|
131
149
|
tier: 'intermediate',
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
ESTIMATE_AXIS_FIELD,
|
|
5
5
|
ESTIMATE_AXIS_HINT_KEYS,
|
|
6
6
|
ESTIMATE_AXIS_LABEL_KEYS,
|
|
7
|
+
estimateBasisLabelKey,
|
|
7
8
|
parseAxisThreshold,
|
|
8
9
|
} from './estimateGating'
|
|
9
10
|
|
|
@@ -42,3 +43,24 @@ describe('estimate axis vocabulary', () => {
|
|
|
42
43
|
expect(new Set(hints).size).toBe(ESTIMATE_AXES.length)
|
|
43
44
|
})
|
|
44
45
|
})
|
|
46
|
+
|
|
47
|
+
describe('estimate basis labels', () => {
|
|
48
|
+
it('labels a stored basis this build knows', () => {
|
|
49
|
+
expect(estimateBasisLabelKey('predicted')).toBe('inspector.estimate.basis.predicted')
|
|
50
|
+
expect(estimateBasisLabelKey('observed')).toBe('inspector.estimate.basis.observed')
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('reads an ABSENT basis as the forecast it was', () => {
|
|
54
|
+
// Every estimate written before the vocabulary existed came from the estimator, and those rows
|
|
55
|
+
// are read back with a plain `JSON.parse`, so the field is genuinely missing rather than
|
|
56
|
+
// defaulted on the way in.
|
|
57
|
+
expect(estimateBasisLabelKey(undefined)).toBe('inspector.estimate.basis.predicted')
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it('says so for a basis this bundle cannot name, instead of guessing', () => {
|
|
61
|
+
// A browser holds a bundle older than the member it reads. Guessing onto a current member would
|
|
62
|
+
// relabel a measurement as a forecast with nothing on screen to say so.
|
|
63
|
+
expect(estimateBasisLabelKey('sampled')).toBe('inspector.estimate.basis.unknown')
|
|
64
|
+
expect(estimateBasisLabelKey('')).toBe('inspector.estimate.basis.unknown')
|
|
65
|
+
})
|
|
66
|
+
})
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { isTaskEstimateBasis, type TaskEstimateBasis } from '@cat-factory/contracts'
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* The three axes a `task-estimator` step scores a task on, and the presentation vocabulary every
|
|
3
5
|
* surface that lets a human gate work on them shares.
|
|
@@ -58,3 +60,33 @@ export function parseAxisThreshold(raw: string): number | undefined {
|
|
|
58
60
|
if (!Number.isFinite(parsed)) return undefined
|
|
59
61
|
return Math.min(1, Math.max(0, parsed))
|
|
60
62
|
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Basis → the label key saying what a stored estimate's scores were formed ON. Three cases, and
|
|
66
|
+
* they are three because each states a different fact:
|
|
67
|
+
*
|
|
68
|
+
* - ABSENT: a row written before the basis vocabulary existed. Every one of those came from the
|
|
69
|
+
* estimator, so calling it a forecast is a fact about the row rather than a default standing in
|
|
70
|
+
* for one. `null` is the same case: the field is optional on the schema, but the record travels
|
|
71
|
+
* as JSON and an absent value is routinely written back as `null`, so reading that as
|
|
72
|
+
* unrecognised would relabel an ordinary old forecast.
|
|
73
|
+
* - a member this bundle KNOWS: its own label.
|
|
74
|
+
* - anything else: said out loud. `basis` is persisted and read back with no schema pass, and a
|
|
75
|
+
* browser holds a bundle older than the member it reads, so guessing onto a current member would
|
|
76
|
+
* relabel a measurement as a forecast (or the reverse) with nothing on screen to say so.
|
|
77
|
+
*
|
|
78
|
+
* The keys are LITERAL so the typed-message-key check sees them, and the map is exhaustive over the
|
|
79
|
+
* contracts union, so a third basis fails the typecheck here rather than rendering a raw key.
|
|
80
|
+
*/
|
|
81
|
+
const ESTIMATE_BASIS_LABEL_KEYS: Record<TaskEstimateBasis, string> = {
|
|
82
|
+
predicted: 'inspector.estimate.basis.predicted',
|
|
83
|
+
observed: 'inspector.estimate.basis.observed',
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const ESTIMATE_BASIS_UNKNOWN_KEY = 'inspector.estimate.basis.unknown'
|
|
87
|
+
|
|
88
|
+
/** The label key for a stored basis: see {@link ESTIMATE_BASIS_LABEL_KEYS} for the three cases. */
|
|
89
|
+
export function estimateBasisLabelKey(basis: string | null | undefined): string {
|
|
90
|
+
if (basis === undefined || basis === null) return ESTIMATE_BASIS_LABEL_KEYS.predicted
|
|
91
|
+
return isTaskEstimateBasis(basis) ? ESTIMATE_BASIS_LABEL_KEYS[basis] : ESTIMATE_BASIS_UNKNOWN_KEY
|
|
92
|
+
}
|
|
@@ -319,6 +319,8 @@ export function stepSkipReasonKey(step: PipelineStep): string | null {
|
|
|
319
319
|
return 'pipeline.progress.skipped.producerSkipped'
|
|
320
320
|
case 'run_complete':
|
|
321
321
|
return 'pipeline.progress.skipped.runComplete'
|
|
322
|
+
case 'no_pull_request':
|
|
323
|
+
return 'pipeline.progress.skipped.noPullRequest'
|
|
322
324
|
case 'condition':
|
|
323
325
|
return step.stepOptions?.condition?.serviceScope === 'frontend'
|
|
324
326
|
? 'pipeline.progress.skipped.conditionFrontend'
|
package/i18n/locales/de.json
CHANGED
|
@@ -1724,10 +1724,17 @@
|
|
|
1724
1724
|
},
|
|
1725
1725
|
"estimate": {
|
|
1726
1726
|
"title": "Schätzung",
|
|
1727
|
-
"hint": "
|
|
1727
|
+
"hint": "Wie komplex, riskant und wirkungsvoll diese Aufgabe ist. Ein Task Estimator prognostiziert das vor Beginn der Arbeit, ein Task Reassessor misst es danach an der tatsächlich erfolgten Änderung. Wird verwendet, um zu entscheiden, ob Konsens-Schritte (Mehrfachläufe) und andere bedingte Schritte sich lohnen.",
|
|
1728
1728
|
"complexity": "Komplexität",
|
|
1729
1729
|
"risk": "Risiko",
|
|
1730
|
-
"impact": "Wirkung"
|
|
1730
|
+
"impact": "Wirkung",
|
|
1731
|
+
"basis": {
|
|
1732
|
+
"predicted": "Prognose vor Beginn der Arbeit",
|
|
1733
|
+
"observed": "Gemessen an der erfolgten Änderung",
|
|
1734
|
+
"unknown": "Von einer anderen App-Version erfasst"
|
|
1735
|
+
},
|
|
1736
|
+
"was": "vorher {value}",
|
|
1737
|
+
"supersededBasis": "Ersetzt: {basis}"
|
|
1731
1738
|
},
|
|
1732
1739
|
"reviewTarget": {
|
|
1733
1740
|
"title": "Geprüfter Pull Request",
|
|
@@ -2284,6 +2291,10 @@
|
|
|
2284
2291
|
"dryRun": "Probelauf: nichts zusammenführen",
|
|
2285
2292
|
"dryRunForced": "Probelauf: Läufe deiner Rolle werden hier nie zusammengeführt",
|
|
2286
2293
|
"dryRunHint": "Dieser Lauf öffnet einen Pull Request und führt nichts zusammen."
|
|
2294
|
+
},
|
|
2295
|
+
"runDetail": {
|
|
2296
|
+
"loading": "Vollständiger Lauf wird geladen…",
|
|
2297
|
+
"loadFailed": "Vollständiger Lauf konnte nicht geladen werden: {reason}"
|
|
2287
2298
|
}
|
|
2288
2299
|
},
|
|
2289
2300
|
"layout": {
|
|
@@ -4739,6 +4750,7 @@
|
|
|
4739
4750
|
"conditionBackend": "Übersprungen: Diese Aufgabe ändert nur einen Frontend-Dienst, es gibt also keine API dahinter zu prüfen.",
|
|
4740
4751
|
"producerSkipped": "Übersprungen: Der geprüfte Schritt wurde übersprungen, es gibt nichts zu bewerten.",
|
|
4741
4752
|
"runComplete": "Übersprungen: Der Lauf endete vor diesem Schritt, es blieb nichts zu tun.",
|
|
4753
|
+
"noPullRequest": "Übersprungen: Dieser Lauf hat keinen Pull Request eröffnet, also gibt es für diesen Schritt keine Änderung zu lesen.",
|
|
4742
4754
|
"unknown": "Übersprungen: Dieser Schritt wurde nicht ausgeführt."
|
|
4743
4755
|
}
|
|
4744
4756
|
},
|
package/i18n/locales/en.json
CHANGED
|
@@ -1231,10 +1231,17 @@
|
|
|
1231
1231
|
},
|
|
1232
1232
|
"estimate": {
|
|
1233
1233
|
"title": "Estimate",
|
|
1234
|
-
"hint": "
|
|
1234
|
+
"hint": "How complex, risky and impactful this task is. A Task Estimator forecasts it before the work starts; a Task Reassessor measures it afterwards from the change that landed. Used to decide whether consensus (multi-run) steps and other conditional steps are worth running.",
|
|
1235
1235
|
"complexity": "Complexity",
|
|
1236
1236
|
"risk": "Risk",
|
|
1237
|
-
"impact": "Impact"
|
|
1237
|
+
"impact": "Impact",
|
|
1238
|
+
"basis": {
|
|
1239
|
+
"predicted": "Forecast before the work started",
|
|
1240
|
+
"observed": "Measured from the change that landed",
|
|
1241
|
+
"unknown": "Recorded by another version of the app"
|
|
1242
|
+
},
|
|
1243
|
+
"was": "was {value}",
|
|
1244
|
+
"supersededBasis": "Replaces: {basis}"
|
|
1238
1245
|
},
|
|
1239
1246
|
"reviewTarget": {
|
|
1240
1247
|
"title": "Under review",
|
|
@@ -1802,6 +1809,10 @@
|
|
|
1802
1809
|
"dryRun": "Dry run: merge nothing",
|
|
1803
1810
|
"dryRunForced": "Dry run: your role's runs never merge here",
|
|
1804
1811
|
"dryRunHint": "This run opens a pull request and merges nothing."
|
|
1812
|
+
},
|
|
1813
|
+
"runDetail": {
|
|
1814
|
+
"loading": "Loading the full run…",
|
|
1815
|
+
"loadFailed": "Couldn't load the full run: {reason}"
|
|
1805
1816
|
}
|
|
1806
1817
|
},
|
|
1807
1818
|
"observability": {
|
|
@@ -5391,6 +5402,7 @@
|
|
|
5391
5402
|
"conditionBackend": "Skipped: this task changes only a frontend service, so there is no API behind it to exercise.",
|
|
5392
5403
|
"producerSkipped": "Skipped: the step it reviews was skipped, so there is nothing to grade.",
|
|
5393
5404
|
"runComplete": "Skipped: the run finished before this step, with nothing left to do.",
|
|
5405
|
+
"noPullRequest": "Skipped: this run opened no pull request, so there is no change for this step to read.",
|
|
5394
5406
|
"unknown": "Skipped: this step did not run."
|
|
5395
5407
|
}
|
|
5396
5408
|
},
|
package/i18n/locales/es.json
CHANGED
|
@@ -1138,10 +1138,17 @@
|
|
|
1138
1138
|
},
|
|
1139
1139
|
"estimate": {
|
|
1140
1140
|
"title": "Estimación",
|
|
1141
|
-
"hint": "
|
|
1141
|
+
"hint": "Lo compleja, arriesgada e impactante que es esta tarea. Un Task Estimator la pronostica antes de empezar el trabajo y un Task Reassessor la mide después a partir del cambio realizado. Se usa para decidir si merecen la pena los pasos de consenso (multiejecución) y otros pasos condicionales.",
|
|
1142
1142
|
"complexity": "Complejidad",
|
|
1143
1143
|
"risk": "Riesgo",
|
|
1144
|
-
"impact": "Impacto"
|
|
1144
|
+
"impact": "Impacto",
|
|
1145
|
+
"basis": {
|
|
1146
|
+
"predicted": "Pronóstico previo al inicio del trabajo",
|
|
1147
|
+
"observed": "Medido a partir del cambio realizado",
|
|
1148
|
+
"unknown": "Registrado por otra versión de la aplicación"
|
|
1149
|
+
},
|
|
1150
|
+
"was": "antes {value}",
|
|
1151
|
+
"supersededBasis": "Reemplaza: {basis}"
|
|
1145
1152
|
},
|
|
1146
1153
|
"reviewTarget": {
|
|
1147
1154
|
"title": "Pull request en revisión",
|
|
@@ -1698,6 +1705,10 @@
|
|
|
1698
1705
|
"dryRun": "Ejecución de prueba: no fusionar nada",
|
|
1699
1706
|
"dryRunForced": "Ejecución de prueba: las ejecuciones de tu rol nunca se fusionan aquí",
|
|
1700
1707
|
"dryRunHint": "Esta ejecución abre una pull request y no fusiona nada."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Cargando la ejecución completa…",
|
|
1711
|
+
"loadFailed": "No se pudo cargar la ejecución completa: {reason}"
|
|
1701
1712
|
}
|
|
1702
1713
|
},
|
|
1703
1714
|
"observability": {
|
|
@@ -5215,6 +5226,7 @@
|
|
|
5215
5226
|
"conditionBackend": "Omitido: esta tarea solo modifica un servicio de frontend, así que no hay API detrás que probar.",
|
|
5216
5227
|
"producerSkipped": "Omitido: el paso que revisa fue omitido, así que no hay nada que evaluar.",
|
|
5217
5228
|
"runComplete": "Omitido: la ejecución terminó antes de este paso y no quedaba nada que hacer.",
|
|
5229
|
+
"noPullRequest": "Omitido: esta ejecución no abrió ningún pull request, así que este paso no tiene ningún cambio que leer.",
|
|
5218
5230
|
"unknown": "Omitido: este paso no se ejecutó."
|
|
5219
5231
|
}
|
|
5220
5232
|
},
|
package/i18n/locales/fr.json
CHANGED
|
@@ -1138,10 +1138,17 @@
|
|
|
1138
1138
|
},
|
|
1139
1139
|
"estimate": {
|
|
1140
1140
|
"title": "Estimation",
|
|
1141
|
-
"hint": "
|
|
1141
|
+
"hint": "La complexité, le risque et l'impact de cette tâche. Un Task Estimator les prévoit avant le début du travail, un Task Reassessor les mesure ensuite d'après la modification réellement livrée. Sert à décider si les étapes de consensus (multi-exécutions) et les autres étapes conditionnelles en valent la peine.",
|
|
1142
1142
|
"complexity": "Complexité",
|
|
1143
1143
|
"risk": "Risque",
|
|
1144
|
-
"impact": "Impact"
|
|
1144
|
+
"impact": "Impact",
|
|
1145
|
+
"basis": {
|
|
1146
|
+
"predicted": "Prévision avant le début du travail",
|
|
1147
|
+
"observed": "Mesuré d'après la modification livrée",
|
|
1148
|
+
"unknown": "Enregistré par une autre version de l'application"
|
|
1149
|
+
},
|
|
1150
|
+
"was": "avant {value}",
|
|
1151
|
+
"supersededBasis": "Remplace : {basis}"
|
|
1145
1152
|
},
|
|
1146
1153
|
"reviewTarget": {
|
|
1147
1154
|
"title": "Pull request en revue",
|
|
@@ -1698,6 +1705,10 @@
|
|
|
1698
1705
|
"dryRun": "Exécution à blanc : ne rien fusionner",
|
|
1699
1706
|
"dryRunForced": "Exécution à blanc : les exécutions de votre rôle ne sont jamais fusionnées ici",
|
|
1700
1707
|
"dryRunHint": "Cette exécution ouvre une pull request et ne fusionne rien."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Chargement de l'exécution complète…",
|
|
1711
|
+
"loadFailed": "Impossible de charger l'exécution complète : {reason}"
|
|
1701
1712
|
}
|
|
1702
1713
|
},
|
|
1703
1714
|
"observability": {
|
|
@@ -5215,6 +5226,7 @@
|
|
|
5215
5226
|
"conditionBackend": "Étape ignorée : cette tâche ne modifie qu’un service frontend, il n’y a donc pas d’API derrière à tester.",
|
|
5216
5227
|
"producerSkipped": "Étape ignorée : l’étape qu’elle relit a été ignorée, il n’y a rien à évaluer.",
|
|
5217
5228
|
"runComplete": "Étape ignorée : l’exécution s’est terminée avant elle, sans rien à faire.",
|
|
5229
|
+
"noPullRequest": "Étape ignorée : cette exécution n’a ouvert aucune pull request, il n’y a donc aucune modification à lire.",
|
|
5218
5230
|
"unknown": "Étape ignorée : elle n’a pas été exécutée."
|
|
5219
5231
|
}
|
|
5220
5232
|
},
|
package/i18n/locales/he.json
CHANGED
|
@@ -1138,10 +1138,17 @@
|
|
|
1138
1138
|
},
|
|
1139
1139
|
"estimate": {
|
|
1140
1140
|
"title": "הערכה",
|
|
1141
|
-
"hint": "
|
|
1141
|
+
"hint": "עד כמה המשימה הזו מורכבת, מסוכנת ומשפיעה. מעריך משימות חוזה זאת לפני תחילת העבודה, וסוכן ההערכה מחדש מודד זאת לאחר מכן מהשינוי שבוצע בפועל. משמש להחלטה אם שלבי קונצנזוס (ריצות מרובות) ושלבים מותנים אחרים שווים את המחיר.",
|
|
1142
1142
|
"complexity": "מורכבות",
|
|
1143
1143
|
"risk": "סיכון",
|
|
1144
|
-
"impact": "השפעה"
|
|
1144
|
+
"impact": "השפעה",
|
|
1145
|
+
"basis": {
|
|
1146
|
+
"predicted": "תחזית לפני תחילת העבודה",
|
|
1147
|
+
"observed": "נמדד מהשינוי שבוצע",
|
|
1148
|
+
"unknown": "נרשם בגרסה אחרת של האפליקציה"
|
|
1149
|
+
},
|
|
1150
|
+
"was": "היה {value}",
|
|
1151
|
+
"supersededBasis": "מחליף: {basis}"
|
|
1145
1152
|
},
|
|
1146
1153
|
"reviewTarget": {
|
|
1147
1154
|
"title": "בקשת משיכה בסקירה",
|
|
@@ -1698,6 +1705,10 @@
|
|
|
1698
1705
|
"dryRun": "הרצת יבש: לא למזג דבר",
|
|
1699
1706
|
"dryRunForced": "הרצת יבש: הרצות של התפקיד שלך לעולם אינן ממוזגות כאן",
|
|
1700
1707
|
"dryRunHint": "ההרצה הזו פותחת בקשת משיכה ואינה ממזגת דבר."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "טוען את ההרצה המלאה…",
|
|
1711
|
+
"loadFailed": "לא ניתן לטעון את ההרצה המלאה: {reason}"
|
|
1701
1712
|
}
|
|
1702
1713
|
},
|
|
1703
1714
|
"observability": {
|
|
@@ -5215,6 +5226,7 @@
|
|
|
5215
5226
|
"conditionBackend": "דולג: המשימה משנה רק שירות צד-לקוח, לכן אין מאחוריו API לבדיקה.",
|
|
5216
5227
|
"producerSkipped": "דולג: השלב שהוא בודק דולג, לכן אין מה להעריך.",
|
|
5217
5228
|
"runComplete": "דולג: הריצה הסתיימה לפני השלב הזה, ולא נותר מה לעשות.",
|
|
5229
|
+
"noPullRequest": "דולג: הריצה הזו לא פתחה pull request, ולכן אין לשלב הזה שינוי לקרוא.",
|
|
5218
5230
|
"unknown": "דולג: השלב הזה לא רץ."
|
|
5219
5231
|
}
|
|
5220
5232
|
},
|
package/i18n/locales/it.json
CHANGED
|
@@ -1724,10 +1724,17 @@
|
|
|
1724
1724
|
},
|
|
1725
1725
|
"estimate": {
|
|
1726
1726
|
"title": "Stima",
|
|
1727
|
-
"hint": "
|
|
1727
|
+
"hint": "Quanto questa attivita' e' complessa, rischiosa e di impatto. Un Task Estimator la prevede prima che il lavoro inizi, un Task Reassessor la misura dopo, dalla modifica effettivamente realizzata. Usata per decidere se vale la pena eseguire i passaggi di consenso (multi-esecuzione) e gli altri passaggi condizionali.",
|
|
1728
1728
|
"complexity": "Complessita'",
|
|
1729
1729
|
"risk": "Rischio",
|
|
1730
|
-
"impact": "Impatto"
|
|
1730
|
+
"impact": "Impatto",
|
|
1731
|
+
"basis": {
|
|
1732
|
+
"predicted": "Previsione prima dell'inizio del lavoro",
|
|
1733
|
+
"observed": "Misurato dalla modifica realizzata",
|
|
1734
|
+
"unknown": "Registrato da un'altra versione dell'app"
|
|
1735
|
+
},
|
|
1736
|
+
"was": "prima {value}",
|
|
1737
|
+
"supersededBasis": "Sostituisce: {basis}"
|
|
1731
1738
|
},
|
|
1732
1739
|
"reviewTarget": {
|
|
1733
1740
|
"title": "Pull request in revisione",
|
|
@@ -2284,6 +2291,10 @@
|
|
|
2284
2291
|
"dryRun": "Prova: non unire nulla",
|
|
2285
2292
|
"dryRunForced": "Prova: le esecuzioni del tuo ruolo qui non vengono mai unite",
|
|
2286
2293
|
"dryRunHint": "Questa esecuzione apre una pull request e non unisce nulla."
|
|
2294
|
+
},
|
|
2295
|
+
"runDetail": {
|
|
2296
|
+
"loading": "Caricamento dell'esecuzione completa…",
|
|
2297
|
+
"loadFailed": "Impossibile caricare l'esecuzione completa: {reason}"
|
|
2287
2298
|
}
|
|
2288
2299
|
},
|
|
2289
2300
|
"layout": {
|
|
@@ -4739,6 +4750,7 @@
|
|
|
4739
4750
|
"conditionBackend": "Saltato: questa attività modifica solo un servizio frontend, quindi non c’è un’API dietro da provare.",
|
|
4740
4751
|
"producerSkipped": "Saltato: il passo che revisiona è stato saltato, quindi non c’è nulla da valutare.",
|
|
4741
4752
|
"runComplete": "Saltato: l’esecuzione è terminata prima di questo passo, senza altro da fare.",
|
|
4753
|
+
"noPullRequest": "Saltato: questa esecuzione non ha aperto alcuna pull request, quindi questo passo non ha modifiche da leggere.",
|
|
4742
4754
|
"unknown": "Saltato: questo passo non è stato eseguito."
|
|
4743
4755
|
}
|
|
4744
4756
|
},
|
package/i18n/locales/ja.json
CHANGED
|
@@ -1138,10 +1138,17 @@
|
|
|
1138
1138
|
},
|
|
1139
1139
|
"estimate": {
|
|
1140
1140
|
"title": "見積もり",
|
|
1141
|
-
"hint": "
|
|
1141
|
+
"hint": "このタスクの複雑さ・リスク・影響度です。Task Estimator が作業開始前に予測し、Task Reassessor が実際に入った変更から事後に測定します。コンセンサス(複数実行)ステップやその他の条件付きステップを実行する価値があるかの判断に使われます。",
|
|
1142
1142
|
"complexity": "複雑度",
|
|
1143
1143
|
"risk": "リスク",
|
|
1144
|
-
"impact": "影響度"
|
|
1144
|
+
"impact": "影響度",
|
|
1145
|
+
"basis": {
|
|
1146
|
+
"predicted": "作業開始前の予測",
|
|
1147
|
+
"observed": "実際に入った変更から測定",
|
|
1148
|
+
"unknown": "別のバージョンのアプリが記録"
|
|
1149
|
+
},
|
|
1150
|
+
"was": "以前は {value}",
|
|
1151
|
+
"supersededBasis": "置き換え:{basis}"
|
|
1145
1152
|
},
|
|
1146
1153
|
"reviewTarget": {
|
|
1147
1154
|
"title": "レビュー対象のプルリクエスト",
|
|
@@ -1698,6 +1705,10 @@
|
|
|
1698
1705
|
"dryRun": "ドライラン: マージしない",
|
|
1699
1706
|
"dryRunForced": "ドライラン: あなたのロールの実行はここではマージされません",
|
|
1700
1707
|
"dryRunHint": "この実行はプルリクエストを開きますが、マージは行いません。"
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "実行の全体を読み込んでいます…",
|
|
1711
|
+
"loadFailed": "実行の全体を読み込めませんでした: {reason}"
|
|
1701
1712
|
}
|
|
1702
1713
|
},
|
|
1703
1714
|
"observability": {
|
|
@@ -5215,6 +5226,7 @@
|
|
|
5215
5226
|
"conditionBackend": "スキップ:このタスクはフロントエンドサービスのみを変更するため、背後に検証するAPIがありません。",
|
|
5216
5227
|
"producerSkipped": "スキップ:レビュー対象のステップがスキップされたため、評価するものがありません。",
|
|
5217
5228
|
"runComplete": "スキップ:このステップの前に実行が終了し、行う作業が残っていませんでした。",
|
|
5229
|
+
"noPullRequest": "スキップ:この実行はプルリクエストを作成しなかったため、このステップが読み取る変更がありません。",
|
|
5218
5230
|
"unknown": "スキップ:このステップは実行されませんでした。"
|
|
5219
5231
|
}
|
|
5220
5232
|
},
|
package/i18n/locales/pl.json
CHANGED
|
@@ -1138,10 +1138,17 @@
|
|
|
1138
1138
|
},
|
|
1139
1139
|
"estimate": {
|
|
1140
1140
|
"title": "Szacunek",
|
|
1141
|
-
"hint": "
|
|
1141
|
+
"hint": "Jak złożone, ryzykowne i wpływowe jest to zadanie. Task Estimator prognozuje to przed rozpoczęciem pracy, a Task Reassessor mierzy to później na podstawie faktycznie wprowadzonej zmiany. Służy do decydowania, czy warto uruchamiać kroki konsensusu (wielokrotne przebiegi) i inne kroki warunkowe.",
|
|
1142
1142
|
"complexity": "Złożoność",
|
|
1143
1143
|
"risk": "Ryzyko",
|
|
1144
|
-
"impact": "Wpływ"
|
|
1144
|
+
"impact": "Wpływ",
|
|
1145
|
+
"basis": {
|
|
1146
|
+
"predicted": "Prognoza przed rozpoczęciem pracy",
|
|
1147
|
+
"observed": "Zmierzone na podstawie wprowadzonej zmiany",
|
|
1148
|
+
"unknown": "Zapisane przez inną wersję aplikacji"
|
|
1149
|
+
},
|
|
1150
|
+
"was": "wcześniej {value}",
|
|
1151
|
+
"supersededBasis": "Zastępuje: {basis}"
|
|
1145
1152
|
},
|
|
1146
1153
|
"reviewTarget": {
|
|
1147
1154
|
"title": "Przeglądany pull request",
|
|
@@ -1698,6 +1705,10 @@
|
|
|
1698
1705
|
"dryRun": "Uruchomienie próbne: nic nie scalaj",
|
|
1699
1706
|
"dryRunForced": "Uruchomienie próbne: uruchomienia twojej roli nigdy nie są tu scalane",
|
|
1700
1707
|
"dryRunHint": "To uruchomienie otwiera pull request i niczego nie scala."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Wczytywanie pełnego przebiegu…",
|
|
1711
|
+
"loadFailed": "Nie udało się wczytać pełnego przebiegu: {reason}"
|
|
1701
1712
|
}
|
|
1702
1713
|
},
|
|
1703
1714
|
"observability": {
|
|
@@ -5215,6 +5226,7 @@
|
|
|
5215
5226
|
"conditionBackend": "Pominięto: to zadanie zmienia tylko usługę frontendową, więc nie ma za nią API do sprawdzenia.",
|
|
5216
5227
|
"producerSkipped": "Pominięto: krok, który ocenia, został pominięty, więc nie ma czego oceniać.",
|
|
5217
5228
|
"runComplete": "Pominięto: przebieg zakończył się przed tym krokiem, nie było nic do zrobienia.",
|
|
5229
|
+
"noPullRequest": "Pominięto: ten przebieg nie otworzył żadnego pull requesta, więc ten krok nie ma zmiany do przeczytania.",
|
|
5218
5230
|
"unknown": "Pominięto: ten krok nie został wykonany."
|
|
5219
5231
|
}
|
|
5220
5232
|
},
|
package/i18n/locales/tr.json
CHANGED
|
@@ -1138,10 +1138,17 @@
|
|
|
1138
1138
|
},
|
|
1139
1139
|
"estimate": {
|
|
1140
1140
|
"title": "Tahmin",
|
|
1141
|
-
"hint": "
|
|
1141
|
+
"hint": "Bu görevin ne kadar karmaşık, riskli ve etkili olduğu. Görev Tahmincisi işe başlamadan önce öngörür, Görev Yeniden Değerlendiricisi ise sonrasında gerçekte yapılan değişiklikten ölçer. Uzlaşma (çok çalıştırmalı) adımlarının ve diğer koşullu adımların değip değmeyeceğine karar vermek için kullanılır.",
|
|
1142
1142
|
"complexity": "Karmaşıklık",
|
|
1143
1143
|
"risk": "Risk",
|
|
1144
|
-
"impact": "Etki"
|
|
1144
|
+
"impact": "Etki",
|
|
1145
|
+
"basis": {
|
|
1146
|
+
"predicted": "İşe başlamadan önceki tahmin",
|
|
1147
|
+
"observed": "Yapılan değişiklikten ölçüldü",
|
|
1148
|
+
"unknown": "Uygulamanın başka bir sürümü kaydetti"
|
|
1149
|
+
},
|
|
1150
|
+
"was": "önceki {value}",
|
|
1151
|
+
"supersededBasis": "Şunu değiştirir: {basis}"
|
|
1145
1152
|
},
|
|
1146
1153
|
"reviewTarget": {
|
|
1147
1154
|
"title": "İncelenen pull request",
|
|
@@ -1698,6 +1705,10 @@
|
|
|
1698
1705
|
"dryRun": "Prova çalışması: hiçbir şeyi birleştirme",
|
|
1699
1706
|
"dryRunForced": "Prova çalışması: rolünün başlattığı çalıştırmalar burada asla birleştirilmez",
|
|
1700
1707
|
"dryRunHint": "Bu çalıştırma bir pull request açar ve hiçbir şeyi birleştirmez."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Çalıştırmanın tamamı yükleniyor…",
|
|
1711
|
+
"loadFailed": "Çalıştırmanın tamamı yüklenemedi: {reason}"
|
|
1701
1712
|
}
|
|
1702
1713
|
},
|
|
1703
1714
|
"observability": {
|
|
@@ -5215,6 +5226,7 @@
|
|
|
5215
5226
|
"conditionBackend": "Atlandı: bu görev yalnızca bir frontend servisini değiştiriyor, dolayısıyla arkasında denenecek bir API yok.",
|
|
5216
5227
|
"producerSkipped": "Atlandı: incelediği adım atlandı, dolayısıyla değerlendirilecek bir şey yok.",
|
|
5217
5228
|
"runComplete": "Atlandı: çalışma bu adımdan önce sona erdi, yapılacak bir şey kalmadı.",
|
|
5229
|
+
"noPullRequest": "Atlandı: bu çalışma bir pull request açmadı, bu nedenle bu adımın okuyacağı bir değişiklik yok.",
|
|
5218
5230
|
"unknown": "Atlandı: bu adım çalışmadı."
|
|
5219
5231
|
}
|
|
5220
5232
|
},
|
package/i18n/locales/uk.json
CHANGED
|
@@ -1138,10 +1138,17 @@
|
|
|
1138
1138
|
},
|
|
1139
1139
|
"estimate": {
|
|
1140
1140
|
"title": "Оцінка",
|
|
1141
|
-
"hint": "
|
|
1141
|
+
"hint": "Наскільки складне, ризиковане та впливове це завдання. Task Estimator прогнозує це до початку роботи, а Task Reassessor вимірює це згодом за фактично внесеною зміною. Використовується, щоб вирішити, чи варті кроки консенсусу (кілька запусків) та інші умовні кроки.",
|
|
1142
1142
|
"complexity": "Складність",
|
|
1143
1143
|
"risk": "Ризик",
|
|
1144
|
-
"impact": "Вплив"
|
|
1144
|
+
"impact": "Вплив",
|
|
1145
|
+
"basis": {
|
|
1146
|
+
"predicted": "Прогноз до початку роботи",
|
|
1147
|
+
"observed": "Виміряно за внесеною зміною",
|
|
1148
|
+
"unknown": "Записано іншою версією застосунку"
|
|
1149
|
+
},
|
|
1150
|
+
"was": "було {value}",
|
|
1151
|
+
"supersededBasis": "Замінює: {basis}"
|
|
1145
1152
|
},
|
|
1146
1153
|
"reviewTarget": {
|
|
1147
1154
|
"title": "Pull request на огляді",
|
|
@@ -1698,6 +1705,10 @@
|
|
|
1698
1705
|
"dryRun": "Пробний запуск: нічого не зливати",
|
|
1699
1706
|
"dryRunForced": "Пробний запуск: запуски твоєї ролі тут ніколи не зливаються",
|
|
1700
1707
|
"dryRunHint": "Цей запуск відкриває pull request і нічого не зливає."
|
|
1708
|
+
},
|
|
1709
|
+
"runDetail": {
|
|
1710
|
+
"loading": "Завантаження повного запуску…",
|
|
1711
|
+
"loadFailed": "Не вдалося завантажити повний запуск: {reason}"
|
|
1701
1712
|
}
|
|
1702
1713
|
},
|
|
1703
1714
|
"observability": {
|
|
@@ -5215,6 +5226,7 @@
|
|
|
5215
5226
|
"conditionBackend": "Пропущено: це завдання змінює лише фронтенд-сервіс, тож за ним немає API для перевірки.",
|
|
5216
5227
|
"producerSkipped": "Пропущено: крок, який він перевіряє, був пропущений, тож немає чого оцінювати.",
|
|
5217
5228
|
"runComplete": "Пропущено: запуск завершився до цього кроку, робити було нічого.",
|
|
5229
|
+
"noPullRequest": "Пропущено: цей запуск не відкрив pull request, тож цьому кроку нічого читати.",
|
|
5218
5230
|
"unknown": "Пропущено: цей крок не виконувався."
|
|
5219
5231
|
}
|
|
5220
5232
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.284.0",
|
|
4
4
|
"description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"valibot": "^1.4.2",
|
|
41
41
|
"vue": "3.5.41",
|
|
42
42
|
"wretch": "^3.0.9",
|
|
43
|
-
"@cat-factory/contracts": "0.
|
|
43
|
+
"@cat-factory/contracts": "0.326.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@toad-contracts/testing": "0.3.2",
|