@cat-factory/app 0.195.0 → 0.195.2
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/app/components/board/nodes/BlockNode.vue +23 -4
- package/app/components/initiative/InitiativePlanDecision.vue +134 -0
- package/app/components/initiative/InitiativePlanNotice.vue +69 -0
- package/app/components/initiative/InitiativePlanReview.vue +278 -254
- package/app/components/initiative/InitiativeTrackerWindow.vue +72 -25
- package/app/components/judge/JudgeResultView.vue +5 -1
- package/app/components/merge/MergeEffortChips.vue +5 -1
- package/app/components/panels/ReportsPanel.vue +5 -2
- package/app/components/panels/ReportsSpendBreakdown.vue +5 -1
- package/app/components/panels/StepEffortReport.vue +11 -2
- package/app/components/panels/StepFragmentAdherence.vue +7 -2
- package/app/components/panels/StepMetadataCard.vue +4 -1
- package/app/components/pipeline/EstimateThresholdFields.vue +74 -0
- package/app/components/pipeline/OutputBudgetInput.vue +1 -0
- package/app/components/pipeline/PipelineBuilder.vue +48 -96
- package/app/components/settings/ConsensusGroupsSection.vue +12 -3
- package/app/utils/estimateGating.spec.ts +44 -0
- package/app/utils/estimateGating.ts +60 -0
- package/app/utils/initiative.spec.ts +43 -0
- package/app/utils/initiative.ts +23 -0
- package/i18n/locales/de.json +28 -4
- package/i18n/locales/en.json +28 -4
- package/i18n/locales/es.json +28 -4
- package/i18n/locales/fr.json +28 -4
- package/i18n/locales/he.json +28 -4
- package/i18n/locales/it.json +28 -4
- package/i18n/locales/ja.json +28 -4
- package/i18n/locales/pl.json +28 -4
- package/i18n/locales/tr.json +28 -4
- package/i18n/locales/uk.json +28 -4
- package/package.json +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The three axes a `task-estimator` step scores a task on, and the presentation vocabulary every
|
|
3
|
+
* surface that lets a human gate work on them shares.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately NOT `RISK_POLICY_AXES`: those are the axes a `merger` scores a finished pull
|
|
6
|
+
* request on, and although the three names coincide, the two are produced by different agents at
|
|
7
|
+
* different points in a run and mean different things to a reader. Folding them together would
|
|
8
|
+
* make a rename in one silently retitle the other.
|
|
9
|
+
*/
|
|
10
|
+
export const ESTIMATE_AXES = ['complexity', 'risk', 'impact'] as const
|
|
11
|
+
|
|
12
|
+
export type EstimateAxis = (typeof ESTIMATE_AXES)[number]
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Axis → label key. Exhaustive over the union with LITERAL catalog keys, so the typed-message-key
|
|
16
|
+
* check sees them and a new axis fails the typecheck rather than rendering a raw key.
|
|
17
|
+
*/
|
|
18
|
+
export const ESTIMATE_AXIS_LABEL_KEYS: Record<EstimateAxis, string> = {
|
|
19
|
+
complexity: 'pipeline.builder.complexityThreshold',
|
|
20
|
+
risk: 'pipeline.builder.riskThreshold',
|
|
21
|
+
impact: 'pipeline.builder.impactThreshold',
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Axis → the `StepGating`/`ConsensusGating` field carrying its floor. Both schemas spell the
|
|
26
|
+
* three the same way, which is what lets one editor serve every gate in the builder.
|
|
27
|
+
*/
|
|
28
|
+
export const ESTIMATE_AXIS_FIELD: Record<EstimateAxis, 'minComplexity' | 'minRisk' | 'minImpact'> =
|
|
29
|
+
{
|
|
30
|
+
complexity: 'minComplexity',
|
|
31
|
+
risk: 'minRisk',
|
|
32
|
+
impact: 'minImpact',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Axis → the tooltip explaining what the axis measures and on what scale. Same discipline. */
|
|
36
|
+
export const ESTIMATE_AXIS_HINT_KEYS: Record<EstimateAxis, string> = {
|
|
37
|
+
complexity: 'pipeline.builder.complexityThresholdHint',
|
|
38
|
+
risk: 'pipeline.builder.riskThresholdHint',
|
|
39
|
+
impact: 'pipeline.builder.impactThresholdHint',
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Read one axis threshold field back into a stored floor.
|
|
44
|
+
*
|
|
45
|
+
* An emptied or unparseable field CLEARS the axis rather than storing `0`, which is the whole
|
|
46
|
+
* reason this is a function: the two are opposites. An unset axis is not considered at all,
|
|
47
|
+
* where a floor of `0` is cleared by every estimate there is — so a user who deletes the number
|
|
48
|
+
* to stop gating on risk would, under a `?? 0`, have gated on it permanently instead.
|
|
49
|
+
*
|
|
50
|
+
* The scale is the estimator's 0..1, and a value outside it is CLAMPED rather than rejected, so
|
|
51
|
+
* a fat-fingered `10` lands on the ceiling instead of silently failing the pipeline save with a
|
|
52
|
+
* 422 from the contract's score bounds.
|
|
53
|
+
*/
|
|
54
|
+
export function parseAxisThreshold(raw: string): number | undefined {
|
|
55
|
+
const trimmed = raw.trim()
|
|
56
|
+
if (trimmed === '') return undefined
|
|
57
|
+
const parsed = Number.parseFloat(trimmed)
|
|
58
|
+
if (!Number.isFinite(parsed)) return undefined
|
|
59
|
+
return Math.min(1, Math.max(0, parsed))
|
|
60
|
+
}
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
isPendingQuestion,
|
|
10
10
|
orderInterviewQuestions,
|
|
11
11
|
pendingCheckpointPhase,
|
|
12
|
+
planReviewDocument,
|
|
12
13
|
selectPlanApproval,
|
|
13
14
|
} from './initiative'
|
|
14
15
|
|
|
@@ -205,6 +206,48 @@ describe('selectPlanApproval', () => {
|
|
|
205
206
|
})
|
|
206
207
|
})
|
|
207
208
|
|
|
209
|
+
// Which shape the plan gate takes in the tracker window: a document review that OWNS the window, or
|
|
210
|
+
// the compact notice above the tracker's own sections. Both the window's layout and the review
|
|
211
|
+
// surface read this one value, so these pin the cases where "there is a plan to read" is not the
|
|
212
|
+
// same as "the proposal is non-empty".
|
|
213
|
+
|
|
214
|
+
describe('planReviewDocument', () => {
|
|
215
|
+
const gate = (proposal: string | null | undefined, outputIsRendered: boolean) => ({
|
|
216
|
+
approval: { proposal },
|
|
217
|
+
outputIsRendered,
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
it('is the proposal when the step says it IS the plan rendering', () => {
|
|
221
|
+
expect(planReviewDocument(gate('# Initiative plan\n\n## Goal', true))).toBe(
|
|
222
|
+
'# Initiative plan\n\n## Goal',
|
|
223
|
+
)
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
it('returns the proposal verbatim, so comment anchors stay on the lines they quote', () => {
|
|
227
|
+
// Anchoring is by SOURCE LINE, so trimming a leading newline would shift every anchor up one.
|
|
228
|
+
expect(planReviewDocument(gate('\n# Initiative plan\n', true))).toBe('\n# Initiative plan\n')
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
it('reads an un-rendered proposal as no document, however substantial it looks', () => {
|
|
232
|
+
// The planner's transcript summary: a perfectly non-empty string that is not the plan. Showing
|
|
233
|
+
// it under a table of contents is the failure the rendered review exists to end.
|
|
234
|
+
expect(
|
|
235
|
+
planReviewDocument(gate('I drafted a three-phase plan and stopped for review.', false)),
|
|
236
|
+
).toBe('')
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
it('reads a rendered but blank proposal as no document', () => {
|
|
240
|
+
expect(planReviewDocument(gate(' \n ', true))).toBe('')
|
|
241
|
+
expect(planReviewDocument(gate(null, true))).toBe('')
|
|
242
|
+
expect(planReviewDocument(gate(undefined, true))).toBe('')
|
|
243
|
+
})
|
|
244
|
+
|
|
245
|
+
it('has no document when nothing is parked', () => {
|
|
246
|
+
expect(planReviewDocument(null)).toBe('')
|
|
247
|
+
expect(planReviewDocument(undefined)).toBe('')
|
|
248
|
+
})
|
|
249
|
+
})
|
|
250
|
+
|
|
208
251
|
/**
|
|
209
252
|
* These tables are the reason the initiative card and the inspector word one park identically,
|
|
210
253
|
* and they are exactly the shape both i18n drift guards are blind to: the typed-key check and
|
package/app/utils/initiative.ts
CHANGED
|
@@ -103,6 +103,29 @@ export function selectPlanApproval<A extends { agentKind: string }>(
|
|
|
103
103
|
return approvals.find((a) => resultViewOf(a.agentKind) !== INTERVIEW_GATE_RESULT_VIEW)
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
/**
|
|
107
|
+
* The plan DOCUMENT a parked gate offers for review — its proposal, but only once the step says
|
|
108
|
+
* that proposal IS the plan rendering (`outputIsRendered`); `''` otherwise.
|
|
109
|
+
*
|
|
110
|
+
* A step that rendered nothing parks on the planner's transcript SUMMARY, which is a perfectly
|
|
111
|
+
* non-empty string, so an emptiness check alone would present one sentence under a table of
|
|
112
|
+
* contents as though it were the plan. `''` is what routes such a gate to the compact notice
|
|
113
|
+
* instead — and the SAME value decides the tracker window's layout (a document review takes the
|
|
114
|
+
* whole window; a notice sits above the tracker's own sections), so the surface and its host can
|
|
115
|
+
* never disagree about which shape is on screen.
|
|
116
|
+
*
|
|
117
|
+
* Rendered-but-blank counts as no document. The proposal comes back VERBATIM, never trimmed: the
|
|
118
|
+
* review anchors comments to source LINE numbers, so dropping a leading newline would shift every
|
|
119
|
+
* anchor off the block it quotes.
|
|
120
|
+
*/
|
|
121
|
+
export function planReviewDocument(
|
|
122
|
+
gate: { approval: { proposal?: string | null }; outputIsRendered: boolean } | null | undefined,
|
|
123
|
+
): string {
|
|
124
|
+
if (!gate?.outputIsRendered) return ''
|
|
125
|
+
const proposal = gate.approval.proposal ?? ''
|
|
126
|
+
return proposal.trim() ? proposal : ''
|
|
127
|
+
}
|
|
128
|
+
|
|
106
129
|
/** Follow-up triage status → i18n label key. Exhaustive so a new status fails the build. */
|
|
107
130
|
export const INITIATIVE_FOLLOWUP_STATUS_LABEL_KEYS: Record<InitiativeFollowUp['status'], string> = {
|
|
108
131
|
open: 'initiative.followUpStatus.open',
|
package/i18n/locales/de.json
CHANGED
|
@@ -1629,6 +1629,7 @@
|
|
|
1629
1629
|
},
|
|
1630
1630
|
"subtasks": "Teilaufgaben · {completed}/{total}",
|
|
1631
1631
|
"standardsApplied": "Angewendete Standards",
|
|
1632
|
+
"standardsAppliedHint": "Die Best-Practice-Standards, die in den System-Prompt dieses Schritts eingefügt wurden. Ein umsetzender Agent erhält von jedem eine gekürzte Fassung; Reviewer und Planer bekommen den vollen Text.",
|
|
1632
1633
|
"decision": "Entscheidung",
|
|
1633
1634
|
"awaitingChoice": "Wartet auf eine menschliche Wahl",
|
|
1634
1635
|
"approvalGate": "Freigabe-Gate",
|
|
@@ -1696,13 +1697,16 @@
|
|
|
1696
1697
|
"effort": {
|
|
1697
1698
|
"heading": "Agenten-Aufwand",
|
|
1698
1699
|
"difficulty": "Schwierigkeit",
|
|
1700
|
+
"difficultyHint": "Die eigene Einschätzung des Agenten, wie schwer dieser Schritt war, von zehn. Selbst angegeben, nicht gemessen.",
|
|
1699
1701
|
"outOfTen": "{value}/10",
|
|
1700
1702
|
"reduced": "Was die Effektivität verringert hat",
|
|
1701
1703
|
"obstacles": "Wichtigste Hindernisse"
|
|
1702
1704
|
},
|
|
1703
1705
|
"adherence": {
|
|
1704
1706
|
"heading": "Einhaltung der Best Practices",
|
|
1707
|
+
"headingHint": "Die Best-Practice-Standards, die in den Prompt dieses Reviewers eingefügt wurden, und wie genau die Änderung ihnen nach seinem Urteil folgt.",
|
|
1705
1708
|
"outOfTen": "{value}/10",
|
|
1709
|
+
"ratingHint": "Die eigene Bewertung des Reviewers, wie genau die Änderung diesem Standard folgt, von zehn. Selbst angegeben, nicht gemessen.",
|
|
1706
1710
|
"relatedFindings": "Zugehörige Befunde",
|
|
1707
1711
|
"unnamed": "Standard"
|
|
1708
1712
|
},
|
|
@@ -2558,6 +2562,14 @@
|
|
|
2558
2562
|
"pr_ready": "Aktiv",
|
|
2559
2563
|
"done": "Live"
|
|
2560
2564
|
},
|
|
2565
|
+
"statusHint": {
|
|
2566
|
+
"planned": "Für diesen Service gibt es noch keine Aufgaben. Ein Service wird nie fertig, das hier ist also der Anfang und kein Stillstand.",
|
|
2567
|
+
"ready": "Alle Aufgaben unter diesem Service ruhen oder sind gemergt. Es läuft nichts und nichts wartet auf Sie.",
|
|
2568
|
+
"in_progress": "Mindestens eine Aufgabe unter diesem Service läuft oder hat einen offenen Pull Request.",
|
|
2569
|
+
"blocked": "Mindestens eine Aufgabe oder Initiative unter diesem Service wartet auf eine Entscheidung von Ihnen.",
|
|
2570
|
+
"pr_ready": "Mindestens eine Aufgabe unter diesem Service läuft oder hat einen offenen Pull Request.",
|
|
2571
|
+
"done": "Alle Aufgaben unter diesem Service ruhen oder sind gemergt. Es läuft nichts und nichts wartet auf Sie."
|
|
2572
|
+
},
|
|
2561
2573
|
"shared": "Geteilt",
|
|
2562
2574
|
"sharedTitle": "Über Workspaces in dieser Organisation hinweg geteilt",
|
|
2563
2575
|
"bootstrapping": "Wird gebootstrappt…",
|
|
@@ -3241,7 +3253,9 @@
|
|
|
3241
3253
|
},
|
|
3242
3254
|
"legend": {
|
|
3243
3255
|
"metered": "Abgerechnet",
|
|
3244
|
-
"
|
|
3256
|
+
"meteredHint": "Vom Anbieter pro Token abgerechnet. Das ist echtes Geld.",
|
|
3257
|
+
"subscription": "Abo",
|
|
3258
|
+
"subscriptionHint": "Nur zur Veranschaulichung. Diese Aufrufe liefen über einen Pauschaltarif; der Betrag zeigt, was dieselben Token über eine abgerechnete API gekostet hätten. Er wurde nie in Rechnung gestellt und zählt nie als Ausgabe."
|
|
3245
3259
|
},
|
|
3246
3260
|
"spend": {
|
|
3247
3261
|
"byModel": "Kosten nach Modell",
|
|
@@ -3598,9 +3612,14 @@
|
|
|
3598
3612
|
"companionGateTooltip": "Diesen Companion nur ausführen, wenn die Aufgabenschätzung einen Schwellenwert überschreitet (benötigt vorher einen Task Estimator)",
|
|
3599
3613
|
"consensusGateTooltip": "Konsens nur ausführen, wenn die Aufgabenschätzung einen Schwellenwert überschreitet (sonst läuft der Standard-Agent)",
|
|
3600
3614
|
"runWhenAny": "ausführen wenn (beliebig):",
|
|
3615
|
+
"gatingRunWhenAnyHint": "Der Schritt läuft, sobald eine dieser Achsen erreicht oder überschritten wird, und wird sonst übersprungen. Liegt keine Schätzung vor, läuft er trotzdem.",
|
|
3616
|
+
"gatingRunWhenAnyConsensusHint": "Das Panel tagt, sobald eine dieser Achsen erreicht oder überschritten wird; darunter läuft stattdessen der einzelne Agent. Liegt keine Schätzung vor, tagt das Panel trotzdem.",
|
|
3601
3617
|
"complexityThreshold": "Komplexität ≥",
|
|
3618
|
+
"complexityThresholdHint": "Wie aufwendig die Umsetzung ist, bewertet vom Task Estimator weiter oben in der Pipeline. Die Skala reicht von 0 bis 1, nicht von 1 bis 10. Leer lassen, um diese Achse zu ignorieren.",
|
|
3602
3619
|
"riskThreshold": "Risiko ≥",
|
|
3620
|
+
"riskThresholdHint": "Wie viel die Änderung kaputt machen könnte, bewertet vom Task Estimator weiter oben in der Pipeline. Die Skala reicht von 0 bis 1, nicht von 1 bis 10. Leer lassen, um diese Achse zu ignorieren.",
|
|
3603
3621
|
"impactThreshold": "Auswirkung ≥",
|
|
3622
|
+
"impactThresholdHint": "Wie weit die Änderung ins System hineinreicht, bewertet vom Task Estimator weiter oben in der Pipeline. Die Skala reicht von 0 bis 1, nicht von 1 bis 10. Leer lassen, um diese Achse zu ignorieren.",
|
|
3604
3623
|
"strategy": "Strategie",
|
|
3605
3624
|
"rounds": "Runden",
|
|
3606
3625
|
"purposeLabel": "Zweck",
|
|
@@ -3755,6 +3774,7 @@
|
|
|
3755
3774
|
"stepLabel": "Ausgabebudget",
|
|
3756
3775
|
"kindLabel": "Ausgabebudget",
|
|
3757
3776
|
"kindHint": "Gilt für jeden Lauf dieses Agenten. Ein Pipeline-Schritt kann es überschreiben.",
|
|
3777
|
+
"hint": "Der Höchstumfang einer einzelnen Antwort dieses Agenten. Leer lassen heißt vom nächsthöheren Level erben, nicht das Limit aufheben. Der Wert eines Pipeline-Schritts sticht die Vorgabe des Workspace.",
|
|
3758
3778
|
"inherits": "Übernommen",
|
|
3759
3779
|
"inheritsValue": "Übernommen ({tokens})"
|
|
3760
3780
|
}
|
|
@@ -4426,11 +4446,12 @@
|
|
|
4426
4446
|
},
|
|
4427
4447
|
"planReview": {
|
|
4428
4448
|
"title": "Dieser Plan wartet auf dich",
|
|
4429
|
-
"body": "Der Planner hat
|
|
4449
|
+
"body": "Der Planner hat diese Phasen und Aufgaben entworfen. Gib sie frei, um den Plan zu committen und die Arbeit zu starten, oder schicke den Plan mit deinen Änderungswünschen zurück.",
|
|
4430
4450
|
"approve": "Plan freigeben",
|
|
4431
4451
|
"feedbackPlaceholder": "Was soll der Planner ändern? Umfang, Reihenfolge der Phasen, fehlende Arbeit, eine Aufgabe, die woanders hingehört …",
|
|
4432
4452
|
"sendBack": "An den Planner zurückschicken",
|
|
4433
|
-
"noDocument": "Dieser
|
|
4453
|
+
"noDocument": "Dieser Planungsschritt hat kein Plandokument zur Prüfung hinterlassen, es gibt hier also nichts zu navigieren.",
|
|
4454
|
+
"noDocumentSections": "Der Plan sind die Abschnitte unten.",
|
|
4434
4455
|
"needsFeedback": "Füge zuerst einen Kommentar oder eine Rückmeldung hinzu — der Planer plant damit neu.",
|
|
4435
4456
|
"commentHint": "Klicke auf einen Teil des Plans, um ihn zu kommentieren."
|
|
4436
4457
|
},
|
|
@@ -4894,6 +4915,7 @@
|
|
|
4894
4915
|
"empty": "Dieser Schritt hat noch kein Urteil erzeugt.",
|
|
4895
4916
|
"notScored": "Nicht bewertet",
|
|
4896
4917
|
"threshold": "Schwellenwert {threshold}",
|
|
4918
|
+
"thresholdHint": "Der Wert, den dieser Schritt erreichen musste, aus der Merge-Policy der Aufgabe. Darunter schickt der Judge die Arbeit mit seinen Befunden als Nacharbeit an den erzeugenden Schritt zurück oder parkt den Lauf für Sie, wenn kein Versuchsbudget mehr übrig ist.",
|
|
4897
4919
|
"rubricOverridden": "Raster des Arbeitsbereichs",
|
|
4898
4920
|
"reworkRounds": "Überarbeitung {spent}/{budget}",
|
|
4899
4921
|
"findingsHeading": "Was das Bewertungsraster beanstandet hat",
|
|
@@ -5815,10 +5837,12 @@
|
|
|
5815
5837
|
"config": "Konfiguration & CI",
|
|
5816
5838
|
"source": "Quellcode",
|
|
5817
5839
|
"schema": "Schema & Migrationen",
|
|
5818
|
-
"unknown": "Nicht klassifiziert"
|
|
5840
|
+
"unknown": "Nicht klassifiziert",
|
|
5841
|
+
"hint": "Was der Diff berührt hat, ermittelt aus den geänderten Dateien. Die Merge-Policy kann pro Klasse eine eigene Regel setzen; ein Diff über mehrere Klassen zählt als die schwerste davon."
|
|
5819
5842
|
},
|
|
5820
5843
|
"effort": {
|
|
5821
5844
|
"prompt": "Review-Aufwand",
|
|
5845
|
+
"promptHint": "Hält fest, wie viel Review dieser Pull Request wirklich gebraucht hat. Ihre Antwort ist die Referenz, an der die Auto-Merge-Schwellen kalibriert werden. Das Taggen ist freiwillig, Sie können auch ohne mergen.",
|
|
5822
5846
|
"none": "Keine Anmerkungen",
|
|
5823
5847
|
"minor": "Kleine Anmerkungen",
|
|
5824
5848
|
"major": "Echte Nacharbeit",
|
package/i18n/locales/en.json
CHANGED
|
@@ -409,6 +409,14 @@
|
|
|
409
409
|
"pr_ready": "Active",
|
|
410
410
|
"done": "Live"
|
|
411
411
|
},
|
|
412
|
+
"statusHint": {
|
|
413
|
+
"planned": "No tasks on this service yet. A service is never finished, so this is where one starts rather than a stalled state.",
|
|
414
|
+
"ready": "Every task under this service is idle or merged. Nothing is running and nothing is waiting on you.",
|
|
415
|
+
"in_progress": "At least one task under this service is running or has an open pull request.",
|
|
416
|
+
"blocked": "At least one task or initiative under this service is waiting on a decision from you.",
|
|
417
|
+
"pr_ready": "At least one task under this service is running or has an open pull request.",
|
|
418
|
+
"done": "Every task under this service is idle or merged. Nothing is running and nothing is waiting on you."
|
|
419
|
+
},
|
|
412
420
|
"shared": "Shared",
|
|
413
421
|
"sharedTitle": "Shared across workspaces in this org",
|
|
414
422
|
"bootstrapping": "Bootstrapping…",
|
|
@@ -1318,6 +1326,7 @@
|
|
|
1318
1326
|
},
|
|
1319
1327
|
"subtasks": "Subtasks · {completed}/{total}",
|
|
1320
1328
|
"standardsApplied": "Standards applied",
|
|
1329
|
+
"standardsAppliedHint": "The best-practice standards folded into this step's system prompt. An implementing agent receives a condensed version of each; reviewers and planners get the full text.",
|
|
1321
1330
|
"decision": "Decision",
|
|
1322
1331
|
"awaitingChoice": "Awaiting a human choice",
|
|
1323
1332
|
"approvalGate": "Approval gate",
|
|
@@ -1385,13 +1394,16 @@
|
|
|
1385
1394
|
"effort": {
|
|
1386
1395
|
"heading": "Agent effort",
|
|
1387
1396
|
"difficulty": "Difficulty",
|
|
1397
|
+
"difficultyHint": "The agent's own assessment of how hard this step was, out of ten. Self-reported, not measured.",
|
|
1388
1398
|
"outOfTen": "{value}/10",
|
|
1389
1399
|
"reduced": "What reduced effectiveness",
|
|
1390
1400
|
"obstacles": "Key obstacles"
|
|
1391
1401
|
},
|
|
1392
1402
|
"adherence": {
|
|
1393
1403
|
"heading": "Best-practice adherence",
|
|
1404
|
+
"headingHint": "The best-practice standards folded into this reviewer's prompt, and how closely it judged the change to follow each one.",
|
|
1394
1405
|
"outOfTen": "{value}/10",
|
|
1406
|
+
"ratingHint": "The reviewer's own rating of how closely the change follows this standard, out of ten. Self-reported, not measured.",
|
|
1395
1407
|
"relatedFindings": "Related findings",
|
|
1396
1408
|
"unnamed": "Standard"
|
|
1397
1409
|
},
|
|
@@ -1666,7 +1678,9 @@
|
|
|
1666
1678
|
},
|
|
1667
1679
|
"legend": {
|
|
1668
1680
|
"metered": "Metered",
|
|
1669
|
-
"
|
|
1681
|
+
"meteredHint": "Billed per token by the provider. This is real money.",
|
|
1682
|
+
"subscription": "Subscription",
|
|
1683
|
+
"subscriptionHint": "Illustrative only. These calls ran on a flat-rate plan, so this is what the same tokens would have cost through a metered API. It was never billed and never counts as spend."
|
|
1670
1684
|
},
|
|
1671
1685
|
"spend": {
|
|
1672
1686
|
"byModel": "Spend by model",
|
|
@@ -4036,9 +4050,14 @@
|
|
|
4036
4050
|
"companionGateTooltip": "Only run this companion when the task estimate clears a threshold (needs a Task Estimator earlier)",
|
|
4037
4051
|
"consensusGateTooltip": "Only run consensus when the task estimate clears a threshold (else the standard agent runs)",
|
|
4038
4052
|
"runWhenAny": "run when (any):",
|
|
4053
|
+
"gatingRunWhenAnyHint": "The step runs when any one of these axes is met or exceeded, and is skipped otherwise. If no estimate is available it runs anyway.",
|
|
4054
|
+
"gatingRunWhenAnyConsensusHint": "The panel convenes when any one of these axes is met or exceeded; below that the single agent runs instead. If no estimate is available the panel convenes anyway.",
|
|
4039
4055
|
"complexityThreshold": "complexity ≥",
|
|
4056
|
+
"complexityThresholdHint": "How hard the work is to carry out, scored by the Task Estimator step earlier in the pipeline. The scale is 0 to 1, not 1 to 10. Leave it empty to ignore this axis.",
|
|
4040
4057
|
"riskThreshold": "risk ≥",
|
|
4058
|
+
"riskThresholdHint": "How much the change could break, scored by the Task Estimator step earlier in the pipeline. The scale is 0 to 1, not 1 to 10. Leave it empty to ignore this axis.",
|
|
4041
4059
|
"impactThreshold": "impact ≥",
|
|
4060
|
+
"impactThresholdHint": "How far the change reaches across the system, scored by the Task Estimator step earlier in the pipeline. The scale is 0 to 1, not 1 to 10. Leave it empty to ignore this axis.",
|
|
4042
4061
|
"strategy": "Strategy",
|
|
4043
4062
|
"rounds": "Rounds",
|
|
4044
4063
|
"purposeLabel": "Purpose",
|
|
@@ -4193,6 +4212,7 @@
|
|
|
4193
4212
|
"stepLabel": "Output budget",
|
|
4194
4213
|
"kindLabel": "Output budget",
|
|
4195
4214
|
"kindHint": "Applies to every run of this agent. A pipeline step can override it.",
|
|
4215
|
+
"hint": "The most a single reply from this agent may run to. Leave it empty to inherit the next level up rather than to lift the limit. A pipeline step's own value wins over the workspace default.",
|
|
4196
4216
|
"inherits": "Inherited",
|
|
4197
4217
|
"inheritsValue": "Inherited ({tokens})"
|
|
4198
4218
|
}
|
|
@@ -4394,6 +4414,7 @@
|
|
|
4394
4414
|
"empty": "This step has not produced a verdict yet.",
|
|
4395
4415
|
"notScored": "Not scored",
|
|
4396
4416
|
"threshold": "threshold {threshold}",
|
|
4417
|
+
"thresholdHint": "The score this step had to reach, taken from the task's merge policy. Below it the judge sends the work back to the step that produced it, with its findings as rework, or parks the run for you when no attempt budget is left.",
|
|
4397
4418
|
"rubricOverridden": "workspace rubric",
|
|
4398
4419
|
"reworkRounds": "rework {spent}/{budget}",
|
|
4399
4420
|
"findingsHeading": "What the rubric flagged",
|
|
@@ -5645,11 +5666,12 @@
|
|
|
5645
5666
|
},
|
|
5646
5667
|
"planReview": {
|
|
5647
5668
|
"title": "This plan is waiting for you",
|
|
5648
|
-
"body": "The planner drafted
|
|
5669
|
+
"body": "The planner drafted these phases and items. Approve them to commit the plan and start the work, or send the plan back with what to change.",
|
|
5649
5670
|
"approve": "Approve plan",
|
|
5650
5671
|
"feedbackPlaceholder": "What should the planner change? Scope, phase order, missing work, an item that belongs elsewhere…",
|
|
5651
5672
|
"sendBack": "Send back to the planner",
|
|
5652
|
-
"noDocument": "This
|
|
5673
|
+
"noDocument": "This planning step left no plan document to review, so there is nothing to navigate here.",
|
|
5674
|
+
"noDocumentSections": "The sections below are the plan.",
|
|
5653
5675
|
"needsFeedback": "Add a comment or some feedback first — the planner re-plans from it.",
|
|
5654
5676
|
"commentHint": "Click any part of the plan to comment on it."
|
|
5655
5677
|
},
|
|
@@ -6001,10 +6023,12 @@
|
|
|
6001
6023
|
"description": "'Source' here means program source code (as opposed to docs/config/tests), NOT the origin of something."
|
|
6002
6024
|
},
|
|
6003
6025
|
"schema": "Schema & migrations",
|
|
6004
|
-
"unknown": "Unclassified"
|
|
6026
|
+
"unknown": "Unclassified",
|
|
6027
|
+
"hint": "What the diff touched, worked out from the changed files. Merge policy can set its own rule per class, and a diff spanning several classes takes the heaviest one."
|
|
6005
6028
|
},
|
|
6006
6029
|
"effort": {
|
|
6007
6030
|
"prompt": "Review effort",
|
|
6031
|
+
"promptHint": "Records how much review this pull request really needed. Your answer is the ground truth the auto-merge thresholds are calibrated against. Tagging is optional and you can merge without it.",
|
|
6008
6032
|
"none": "No comments",
|
|
6009
6033
|
"@none": {
|
|
6010
6034
|
"description": "Answer to 'how much review effort did this PR need?': means the reviewer had NOTHING to say, not that no review happened."
|
package/i18n/locales/es.json
CHANGED
|
@@ -376,6 +376,14 @@
|
|
|
376
376
|
"pr_ready": "Activo",
|
|
377
377
|
"done": "Activo"
|
|
378
378
|
},
|
|
379
|
+
"statusHint": {
|
|
380
|
+
"planned": "Aun no hay tareas en este servicio. Un servicio nunca se termina, asi que este es su punto de partida y no un estado atascado.",
|
|
381
|
+
"ready": "Todas las tareas de este servicio estan inactivas o fusionadas. No hay nada en ejecucion ni nada esperandote.",
|
|
382
|
+
"in_progress": "Al menos una tarea de este servicio esta en ejecucion o tiene un pull request abierto.",
|
|
383
|
+
"blocked": "Al menos una tarea o iniciativa de este servicio esta esperando una decision tuya.",
|
|
384
|
+
"pr_ready": "Al menos una tarea de este servicio esta en ejecucion o tiene un pull request abierto.",
|
|
385
|
+
"done": "Todas las tareas de este servicio estan inactivas o fusionadas. No hay nada en ejecucion ni nada esperandote."
|
|
386
|
+
},
|
|
379
387
|
"shared": "Compartido",
|
|
380
388
|
"sharedTitle": "Compartido entre espacios de trabajo de esta organización",
|
|
381
389
|
"bootstrapping": "Arrancando…",
|
|
@@ -1235,6 +1243,7 @@
|
|
|
1235
1243
|
"spinningUpContainer": "Iniciando contenedor…",
|
|
1236
1244
|
"subtasks": "Subtareas · {completed}/{total}",
|
|
1237
1245
|
"standardsApplied": "Estándares aplicados",
|
|
1246
|
+
"standardsAppliedHint": "Los estandares de buenas practicas incorporados al prompt de sistema de este paso. Un agente que implementa recibe una version condensada de cada uno; los revisores y planificadores reciben el texto completo.",
|
|
1238
1247
|
"decision": "Decisión",
|
|
1239
1248
|
"awaitingChoice": "Esperando una elección humana",
|
|
1240
1249
|
"approvalGate": "Verificación de aprobación",
|
|
@@ -1321,13 +1330,16 @@
|
|
|
1321
1330
|
"effort": {
|
|
1322
1331
|
"heading": "Esfuerzo del agente",
|
|
1323
1332
|
"difficulty": "Dificultad",
|
|
1333
|
+
"difficultyHint": "La valoracion del propio agente sobre lo dificil que fue este paso, sobre diez. Autodeclarada, no medida.",
|
|
1324
1334
|
"outOfTen": "{value}/10",
|
|
1325
1335
|
"reduced": "Qué redujo la efectividad",
|
|
1326
1336
|
"obstacles": "Obstáculos clave"
|
|
1327
1337
|
},
|
|
1328
1338
|
"adherence": {
|
|
1329
1339
|
"heading": "Cumplimiento de buenas prácticas",
|
|
1340
|
+
"headingHint": "Los estandares de buenas practicas incorporados al prompt de este revisor, y con cuanta fidelidad juzgo que el cambio sigue cada uno.",
|
|
1330
1341
|
"outOfTen": "{value}/10",
|
|
1342
|
+
"ratingHint": "La valoracion del propio revisor sobre con cuanta fidelidad el cambio sigue este estandar, sobre diez. Autodeclarada, no medida.",
|
|
1331
1343
|
"relatedFindings": "Hallazgos relacionados",
|
|
1332
1344
|
"unnamed": "Estándar"
|
|
1333
1345
|
},
|
|
@@ -1599,7 +1611,9 @@
|
|
|
1599
1611
|
},
|
|
1600
1612
|
"legend": {
|
|
1601
1613
|
"metered": "Medido",
|
|
1602
|
-
"
|
|
1614
|
+
"meteredHint": "Facturado por token por el proveedor. Esto es dinero real.",
|
|
1615
|
+
"subscription": "Suscripción",
|
|
1616
|
+
"subscriptionHint": "Solo ilustrativo. Estas llamadas se ejecutaron con un plan de tarifa plana, asi que esta cifra es lo que habrian costado los mismos tokens a traves de una API con medicion. Nunca se facturo ni cuenta como gasto."
|
|
1603
1617
|
},
|
|
1604
1618
|
"spend": {
|
|
1605
1619
|
"byModel": "Gasto por modelo",
|
|
@@ -3921,9 +3935,14 @@
|
|
|
3921
3935
|
"companionGateTooltip": "Ejecutar este compañero solo cuando la estimación de la tarea supere un umbral (requiere un Task Estimator antes)",
|
|
3922
3936
|
"consensusGateTooltip": "Ejecutar el consenso solo cuando la estimación de la tarea supere un umbral (de lo contrario se ejecuta el agente estándar)",
|
|
3923
3937
|
"runWhenAny": "ejecutar cuando (cualquiera):",
|
|
3938
|
+
"gatingRunWhenAnyHint": "El paso se ejecuta cuando se alcanza o supera cualquiera de estos ejes, y se omite en caso contrario. Si no hay estimacion, se ejecuta igualmente.",
|
|
3939
|
+
"gatingRunWhenAnyConsensusHint": "El panel se reune cuando se alcanza o supera cualquiera de estos ejes; por debajo se ejecuta el agente unico. Si no hay estimacion, el panel se reune igualmente.",
|
|
3924
3940
|
"complexityThreshold": "complejidad ≥",
|
|
3941
|
+
"complexityThresholdHint": "Lo dificil que es llevar a cabo el trabajo, puntuado por el Task Estimator anterior en el pipeline. La escala va de 0 a 1, no de 1 a 10. Dejalo vacio para ignorar este eje.",
|
|
3925
3942
|
"riskThreshold": "riesgo ≥",
|
|
3943
|
+
"riskThresholdHint": "Cuanto podria romper el cambio, puntuado por el Task Estimator anterior en el pipeline. La escala va de 0 a 1, no de 1 a 10. Dejalo vacio para ignorar este eje.",
|
|
3926
3944
|
"impactThreshold": "impacto ≥",
|
|
3945
|
+
"impactThresholdHint": "Hasta donde llega el cambio en el sistema, puntuado por el Task Estimator anterior en el pipeline. La escala va de 0 a 1, no de 1 a 10. Dejalo vacio para ignorar este eje.",
|
|
3927
3946
|
"strategy": "Estrategia",
|
|
3928
3947
|
"rounds": "Rondas",
|
|
3929
3948
|
"purposeLabel": "Propósito",
|
|
@@ -4078,6 +4097,7 @@
|
|
|
4078
4097
|
"stepLabel": "Presupuesto de salida",
|
|
4079
4098
|
"kindLabel": "Presupuesto de salida",
|
|
4080
4099
|
"kindHint": "Se aplica a todas las ejecuciones de este agente. Un paso del pipeline puede anularlo.",
|
|
4100
|
+
"hint": "El maximo al que puede llegar una sola respuesta de este agente. Dejarlo vacio hereda del nivel superior; no elimina el limite. El valor propio de un paso del pipeline prevalece sobre el predeterminado del espacio de trabajo.",
|
|
4081
4101
|
"inherits": "Heredado",
|
|
4082
4102
|
"inheritsValue": "Heredado ({tokens})"
|
|
4083
4103
|
}
|
|
@@ -4207,6 +4227,7 @@
|
|
|
4207
4227
|
"empty": "Este paso todavía no ha producido un veredicto.",
|
|
4208
4228
|
"notScored": "Sin puntuar",
|
|
4209
4229
|
"threshold": "umbral {threshold}",
|
|
4230
|
+
"thresholdHint": "La puntuacion que este paso tenia que alcanzar, tomada de la politica de fusion de la tarea. Por debajo, el juez devuelve el trabajo al paso que lo produjo con sus hallazgos como retrabajo, o aparca la ejecucion para ti cuando ya no queda presupuesto de intentos.",
|
|
4210
4231
|
"rubricOverridden": "rúbrica del espacio de trabajo",
|
|
4211
4232
|
"reworkRounds": "revisión {spent}/{budget}",
|
|
4212
4233
|
"findingsHeading": "Lo que señaló la rúbrica",
|
|
@@ -5453,11 +5474,12 @@
|
|
|
5453
5474
|
},
|
|
5454
5475
|
"planReview": {
|
|
5455
5476
|
"title": "Este plan te está esperando",
|
|
5456
|
-
"body": "El planificador redactó
|
|
5477
|
+
"body": "El planificador redactó estas fases y estos elementos. Apruébalos para confirmar el plan y empezar el trabajo, o devuelve el plan indicando qué cambiar.",
|
|
5457
5478
|
"approve": "Aprobar plan",
|
|
5458
5479
|
"feedbackPlaceholder": "¿Qué debería cambiar el planificador? Alcance, orden de las fases, trabajo que falta, un elemento que va en otro sitio…",
|
|
5459
5480
|
"sendBack": "Devolver al planificador",
|
|
5460
|
-
"noDocument": "Este
|
|
5481
|
+
"noDocument": "Este paso de planificación no dejó ningún documento del plan para revisar, así que aquí no hay nada que recorrer.",
|
|
5482
|
+
"noDocumentSections": "Las secciones de abajo son el plan.",
|
|
5461
5483
|
"needsFeedback": "Añade primero un comentario o algún comentario general: el planificador replanifica a partir de ello.",
|
|
5462
5484
|
"commentHint": "Haz clic en cualquier parte del plan para comentarla."
|
|
5463
5485
|
},
|
|
@@ -5803,10 +5825,12 @@
|
|
|
5803
5825
|
"config": "Configuración y CI",
|
|
5804
5826
|
"source": "Código fuente",
|
|
5805
5827
|
"schema": "Esquema y migraciones",
|
|
5806
|
-
"unknown": "Sin clasificar"
|
|
5828
|
+
"unknown": "Sin clasificar",
|
|
5829
|
+
"hint": "Lo que toco el diff, deducido de los archivos modificados. La politica de fusion puede fijar su propia regla por clase, y un diff que abarca varias clases toma la mas pesada."
|
|
5807
5830
|
},
|
|
5808
5831
|
"effort": {
|
|
5809
5832
|
"prompt": "Esfuerzo de revisión",
|
|
5833
|
+
"promptHint": "Registra cuanta revision necesito realmente este pull request. Tu respuesta es la referencia con la que se calibran los umbrales de fusion automatica. Etiquetar es opcional y puedes fusionar sin hacerlo.",
|
|
5810
5834
|
"none": "Sin comentarios",
|
|
5811
5835
|
"minor": "Comentarios menores",
|
|
5812
5836
|
"major": "Retrabajo real",
|
package/i18n/locales/fr.json
CHANGED
|
@@ -376,6 +376,14 @@
|
|
|
376
376
|
"pr_ready": "Actif",
|
|
377
377
|
"done": "En ligne"
|
|
378
378
|
},
|
|
379
|
+
"statusHint": {
|
|
380
|
+
"planned": "Aucune tache sur ce service pour l'instant. Un service ne se termine jamais : c'est donc son point de depart, pas un blocage.",
|
|
381
|
+
"ready": "Toutes les taches de ce service sont inactives ou fusionnees. Rien ne s'execute et rien n'attend apres vous.",
|
|
382
|
+
"in_progress": "Au moins une tache de ce service s'execute ou a une pull request ouverte.",
|
|
383
|
+
"blocked": "Au moins une tache ou initiative de ce service attend une decision de votre part.",
|
|
384
|
+
"pr_ready": "Au moins une tache de ce service s'execute ou a une pull request ouverte.",
|
|
385
|
+
"done": "Toutes les taches de ce service sont inactives ou fusionnees. Rien ne s'execute et rien n'attend apres vous."
|
|
386
|
+
},
|
|
379
387
|
"shared": "Partagé",
|
|
380
388
|
"sharedTitle": "Partagé entre les espaces de travail de cette organisation",
|
|
381
389
|
"bootstrapping": "Initialisation…",
|
|
@@ -1235,6 +1243,7 @@
|
|
|
1235
1243
|
"spinningUpContainer": "Démarrage du conteneur…",
|
|
1236
1244
|
"subtasks": "Sous-tâches · {completed}/{total}",
|
|
1237
1245
|
"standardsApplied": "Standards appliqués",
|
|
1246
|
+
"standardsAppliedHint": "Les standards de bonnes pratiques integres au prompt systeme de cette etape. Un agent qui implemente en recoit une version condensee ; les relecteurs et les planificateurs recoivent le texte complet.",
|
|
1238
1247
|
"decision": "Décision",
|
|
1239
1248
|
"awaitingChoice": "En attente d'un choix humain",
|
|
1240
1249
|
"approvalGate": "Gate d'approbation",
|
|
@@ -1321,13 +1330,16 @@
|
|
|
1321
1330
|
"effort": {
|
|
1322
1331
|
"heading": "Effort de l'agent",
|
|
1323
1332
|
"difficulty": "Difficulté",
|
|
1333
|
+
"difficultyHint": "L'evaluation par l'agent lui-meme de la difficulte de cette etape, sur dix. Declaree par l'agent, non mesuree.",
|
|
1324
1334
|
"outOfTen": "{value}/10",
|
|
1325
1335
|
"reduced": "Ce qui a réduit l'efficacité",
|
|
1326
1336
|
"obstacles": "Principaux obstacles"
|
|
1327
1337
|
},
|
|
1328
1338
|
"adherence": {
|
|
1329
1339
|
"heading": "Respect des bonnes pratiques",
|
|
1340
|
+
"headingHint": "Les standards de bonnes pratiques integres au prompt de ce relecteur, et le degre de respect de chacun qu'il a estime pour la modification.",
|
|
1330
1341
|
"outOfTen": "{value}/10",
|
|
1342
|
+
"ratingHint": "L'evaluation par le relecteur lui-meme du respect de ce standard par la modification, sur dix. Declaree par le relecteur, non mesuree.",
|
|
1331
1343
|
"relatedFindings": "Constats associés",
|
|
1332
1344
|
"unnamed": "Standard"
|
|
1333
1345
|
},
|
|
@@ -1599,7 +1611,9 @@
|
|
|
1599
1611
|
},
|
|
1600
1612
|
"legend": {
|
|
1601
1613
|
"metered": "Facturé",
|
|
1602
|
-
"
|
|
1614
|
+
"meteredHint": "Facture au token par le fournisseur. Il s'agit d'argent reel.",
|
|
1615
|
+
"subscription": "Abonnement",
|
|
1616
|
+
"subscriptionHint": "A titre indicatif uniquement. Ces appels ont ete passes sur un forfait : ce montant correspond a ce que les memes tokens auraient coute via une API facturee. Il n'a jamais ete facture et ne compte jamais comme depense."
|
|
1603
1617
|
},
|
|
1604
1618
|
"spend": {
|
|
1605
1619
|
"byModel": "Dépense par modèle",
|
|
@@ -3921,9 +3935,14 @@
|
|
|
3921
3935
|
"companionGateTooltip": "N'exécuter ce compagnon que lorsque l'estimation de la tâche dépasse un seuil (nécessite un Task Estimator en amont)",
|
|
3922
3936
|
"consensusGateTooltip": "N'exécuter le consensus que lorsque l'estimation de la tâche dépasse un seuil (sinon l'agent standard s'exécute)",
|
|
3923
3937
|
"runWhenAny": "exécuter quand (l'un de) :",
|
|
3938
|
+
"gatingRunWhenAnyHint": "L'etape s'execute des qu'un de ces axes est atteint ou depasse, et est ignoree sinon. En l'absence d'estimation, elle s'execute quand meme.",
|
|
3939
|
+
"gatingRunWhenAnyConsensusHint": "Le panel se reunit des qu'un de ces axes est atteint ou depasse ; en dessous, c'est l'agent unique qui s'execute. En l'absence d'estimation, le panel se reunit quand meme.",
|
|
3924
3940
|
"complexityThreshold": "complexité ≥",
|
|
3941
|
+
"complexityThresholdHint": "La difficulte de realisation du travail, notee par le Task Estimator situe plus haut dans le pipeline. L'echelle va de 0 a 1, pas de 1 a 10. Laissez vide pour ignorer cet axe.",
|
|
3925
3942
|
"riskThreshold": "risque ≥",
|
|
3943
|
+
"riskThresholdHint": "Ce que la modification risque de casser, note par le Task Estimator situe plus haut dans le pipeline. L'echelle va de 0 a 1, pas de 1 a 10. Laissez vide pour ignorer cet axe.",
|
|
3926
3944
|
"impactThreshold": "impact ≥",
|
|
3945
|
+
"impactThresholdHint": "L'etendue de la modification dans le systeme, notee par le Task Estimator situe plus haut dans le pipeline. L'echelle va de 0 a 1, pas de 1 a 10. Laissez vide pour ignorer cet axe.",
|
|
3927
3946
|
"strategy": "Stratégie",
|
|
3928
3947
|
"rounds": "Tours",
|
|
3929
3948
|
"purposeLabel": "Objectif",
|
|
@@ -4078,6 +4097,7 @@
|
|
|
4078
4097
|
"stepLabel": "Budget de sortie",
|
|
4079
4098
|
"kindLabel": "Budget de sortie",
|
|
4080
4099
|
"kindHint": "S'applique à chaque exécution de cet agent. Une étape du pipeline peut le remplacer.",
|
|
4100
|
+
"hint": "La longueur maximale d'une seule reponse de cet agent. Laisser vide herite du niveau superieur, cela ne leve pas la limite. La valeur propre a une etape du pipeline l'emporte sur la valeur par defaut de l'espace de travail.",
|
|
4081
4101
|
"inherits": "Hérité",
|
|
4082
4102
|
"inheritsValue": "Hérité ({tokens})"
|
|
4083
4103
|
}
|
|
@@ -4207,6 +4227,7 @@
|
|
|
4207
4227
|
"empty": "Cette étape n'a pas encore produit de verdict.",
|
|
4208
4228
|
"notScored": "Non noté",
|
|
4209
4229
|
"threshold": "seuil {threshold}",
|
|
4230
|
+
"thresholdHint": "Le score que cette etape devait atteindre, issu de la politique de fusion de la tache. En dessous, le juge renvoie le travail a l'etape qui l'a produit avec ses constats a reprendre, ou met l'execution en attente pour vous quand il ne reste plus de budget de tentatives.",
|
|
4210
4231
|
"rubricOverridden": "grille de l'espace de travail",
|
|
4211
4232
|
"reworkRounds": "reprise {spent}/{budget}",
|
|
4212
4233
|
"findingsHeading": "Ce que la grille a signalé",
|
|
@@ -5453,11 +5474,12 @@
|
|
|
5453
5474
|
},
|
|
5454
5475
|
"planReview": {
|
|
5455
5476
|
"title": "Ce plan vous attend",
|
|
5456
|
-
"body": "Le planificateur a rédigé
|
|
5477
|
+
"body": "Le planificateur a rédigé ces phases et ces éléments. Approuvez-les pour valider le plan et lancer le travail, ou renvoyez le plan en indiquant ce qu'il faut changer.",
|
|
5457
5478
|
"approve": "Approuver le plan",
|
|
5458
5479
|
"feedbackPlaceholder": "Que doit changer le planificateur ? Périmètre, ordre des phases, travail manquant, un élément qui a sa place ailleurs…",
|
|
5459
5480
|
"sendBack": "Renvoyer au planificateur",
|
|
5460
|
-
"noDocument": "
|
|
5481
|
+
"noDocument": "Cette étape de planification n'a laissé aucun document de plan à relire, il n'y a donc rien à parcourir ici.",
|
|
5482
|
+
"noDocumentSections": "Les sections ci-dessous sont le plan.",
|
|
5461
5483
|
"needsFeedback": "Ajoutez d'abord un commentaire ou un retour : le planificateur s'en sert pour replanifier.",
|
|
5462
5484
|
"commentHint": "Cliquez sur une partie du plan pour la commenter."
|
|
5463
5485
|
},
|
|
@@ -5803,10 +5825,12 @@
|
|
|
5803
5825
|
"config": "Configuration et CI",
|
|
5804
5826
|
"source": "Code source",
|
|
5805
5827
|
"schema": "Schéma et migrations",
|
|
5806
|
-
"unknown": "Non classé"
|
|
5828
|
+
"unknown": "Non classé",
|
|
5829
|
+
"hint": "Ce que le diff a touche, deduit des fichiers modifies. La politique de fusion peut definir sa propre regle par classe, et un diff couvrant plusieurs classes prend la plus lourde."
|
|
5807
5830
|
},
|
|
5808
5831
|
"effort": {
|
|
5809
5832
|
"prompt": "Effort de revue",
|
|
5833
|
+
"promptHint": "Enregistre la quantite de relecture dont cette pull request a reellement eu besoin. Votre reponse sert de reference pour calibrer les seuils de fusion automatique. Le marquage est facultatif et vous pouvez fusionner sans.",
|
|
5810
5834
|
"none": "Aucun commentaire",
|
|
5811
5835
|
"minor": "Remarques mineures",
|
|
5812
5836
|
"major": "Reprise importante",
|