Ţĥé kapi ļööþ
Ýöüŕ šöüŕçé çöñţéñţ çĥàñĝéđ. Îţš ţŕàñšļàţîöñš, îţš ţéŕḿîñöļöĝý, îţš ṽöîçé
çöñƒöŕḿàñçé àŕé ñöŵ ƃéĥîñđ, àñđ ţĥàţ îš ñöŕḿàļ. Kapi ţŕéàţš
çàţçĥîñĝ üþ àš ţĥé éṽéŕýđàý šţàţé öƒ à šĥîþþîñĝ þŕöĵéçţ, àñđ ĝîṽéš îţ öñé
ṽéŕƃ: kapi up.
kapi up ŕüñš ţĥé kapi ļööþ, àñđ ţĥé ļööþ ĥàš ţŵö ĥàļṽéš ŵîţĥ à ĝàţé
ƃéţŵééñ ţĥéḿ. Ƒîŕšţ ĝéţ ţĥé šöüŕçé ŕîĝĥţ (ţĥé ṽöîçé àñđ ţéŕḿîñöļöĝý çĥéçķš öñ
ŵĥàţ ýöü ŵŕöţé) àñđ ĥöļđ ţĥéŕé üñţîļ îţ çļéàŕš îţš ƃàŕ. Öñļý ţĥéñ ĝéţ éṽéŕý
ļàñĝüàĝé çàüĝĥţ üþ ţö îţ: ŕéüšé ŵĥàţ ýöü'ṽé ţŕàñšļàţéđ ƃéƒöŕé, ÀÎ-ţŕàñšļàţé ţĥé
ŕéšţ, çĥéçķ éṽéŕýţĥîñĝ þŕöđüçéđ. Šéţţļîñĝ ţĥé šöüŕçé ƒîŕšţ îš đéļîƃéŕàţé: éṽéŕý
đéƒéçţ îñ ţĥé šöüŕçé ŵöüļđ öţĥéŕŵîšé ḿüļţîþļý àçŕöšš éàçĥ ţàŕĝéţ ļàñĝüàĝé. Ŵĥàţ
à ḿàçĥîñé çàññöţ đéçîđé þàŕķš ƒöŕ à þéŕšöñ; ţĥé ļööþ ñéṽéŕ ƃļöçķš ţĥé
àüţĥöŕ. À ḿöñöļîñĝüàļ þŕöĵéçţ šţöþš àƒţéŕ ţĥé ƒîŕšţ ĥàļƒ.
Ţĥé ŕéçîþé đéçļàŕéš ŵĥàţ çàüĝĥţ üþ ḿéàñš: ţĥé ļàñĝüàĝéš ţĥé þŕöĵéçţ ţàŕĝéţš, ţĥé ƒļöŵ ţĥàţ þŕöđüçéš ţĥéḿ, ţĥé ĝàţéš ţĥàţ đéçîđé šĥîþþàƃļé. Éṽéŕý ŕüñ ḿéàšüŕéš ţĥé ŵöŕķîñĝ ţŕéé àĝàîñšţ ţĥàţ đéçļàŕàţîöñ àñđ çļöšéš ŵĥàţ îţ çàñ.
Ţĥŕéé ŕöļéš, ķéþţ šéþàŕàţé:
- Ţĥé ļööþ þŕöđüçéš:
kapi upđŕîṽéš éàçĥ üñîţ àš ƒàŕ üþ îţš ļîƒéçýçļé àš à ƒļöŵ çàñ ţàķé îţ üñàîđéđ (ţýþîçàļļý ţö ţŕàñšļàţéđ). - Ŕéṽîéŵ þŕöḿöţéš: à þéŕšöñ àđṽàñçéš à üñîţ þàšţ ŵĥàţ à ḿàçĥîñé çàñ đéçîđé (ţŕàñšļàţéđ → ŕéṽîéŵéđ).
- Ţĥé ĝàţé ŕéļéàšéš: îţ đŕîṽéš ñöţĥîñĝ àñđ àñšŵéŕš öñé ǫüéšţîöñ, îš ţĥîš šçöþé šĥîþþàƃļé?
:::ñöţé[Ţĥé ƒöŕḿàļ ñàḿé]
Ţĥé ḿöđéļ ƃéĥîñđ ţĥé ļööþ (đéŕîṽéđ šţàţé, ţĥé ļîƒéçýçļé ļàđđéŕš, çöṽéŕàĝé
ĝàţéš) îš çàļļéđ çöñṽéŕĝéñçé: éàçĥ kapi up þàšš çöñṽéŕĝéš ţĥé ŵöŕķîñĝ
ţŕéé öñ ţĥé šţàţé ţĥé ŕéçîþé đéçļàŕéš, ţĥé ŵàý terraform apply çöñṽéŕĝéš
îñƒŕàšţŕüçţüŕé öñ à þŕöĝŕàḿ. Ţĥé
àŕçĥîţéçţüŕé þàĝéš, ţĥé
ŕüñ'š éṽéñţ šţŕéàḿ, àñđ ţĥé --json öüţþüţ ķééþ ţĥàţ ṽöçàƃüļàŕý; ţĥéšé þàĝéš
šàý ţĥé ļööþ.
:::
Šţàţé îš đéŕîṽéđ
Kapi šţöŕéš ñö ŵöŕķƒļöŵ šţàţé: ñö "îñ þŕöĝŕéšš" ƒļàĝš, ñö çüŕšöŕš. Éṽéŕý çöḿḿàñđ
ŕéçöḿþüţéš à üñîţ'š šţàţé ƒŕöḿ ţĥé çöñţéñţ öñ đîšķ àñđ ţĥé þŕöĵéçţ'š àššéţš,
ţĥé ŵàý git status ŕéçöḿþüţéš ƒŕöḿ ţĥé ŵöŕķîñĝ ţŕéé. Ŕüñ à çöḿḿàñđ ţŵîçé ŵîţĥ
ñö çĥàñĝéš àñđ ýöü ĝéţ ţĥé šàḿé àñšŵéŕ; çĥàñĝé à šöüŕçé ƒîļé àñđ ţĥé àƒƒéçţéđ
üñîţš ƒàļļ ƃàçķ ţö þéñđîñĝ öñ ţĥéîŕ öŵñ.
Ţĥé üñîţ öƒ šţàţé îš à ţàŕĝéţ: öñé ţŕàñšļàţàƃļé ƃļöçķ îñ öñé ļöçàļé.
Ţĥé ļîƒéçýçļé ļàđđéŕš
À ţàŕĝéţ çļîḿƃš à ḿöñöţöñé ļàđđéŕ: éàçĥ ŕüñĝ îḿþļîéš ţĥé öñéš ƃéļöŵ îţ. Àñ àƃšéñţ ţàŕĝéţ šîţš ƃéļöŵ ţĥé ļöŵéšţ ŕüñĝ; à þŕéšéñţ, ñöñ-éḿþţý ţàŕĝéţ îš àţ ļéàšţ ţŕàñšļàţéđ.
Ţàŕĝéţ ļîƒéçýçļé: ĥöŵ ƒàŕ à ţŕàñšļàţîöñ ĥàš þŕöĝŕéššéđ.
Šöüŕçé çöñţéñţ ĥàš îţš öŵñ, šýḿḿéţŕîç ļàđđéŕ, ŵĥàţ ķééþš ţĥé àüţĥöŕ îñ çĥéçķ ƃéƒöŕé àñýţĥîñĝ îš ţŕàñšļàţéđ:
Šöüŕçé àüţĥöŕîñĝ ŕéàđîñéšš: ţĥé šöüŕçé-šîđé çöüñţéŕþàŕţ.
Ŵĥéŕé šţàţé îš ŕéçöŕđéđ đéþéñđš öñ ţĥé çàŕŕîéŕ. À þļàîñ ţàŕĝéţ ƒîļé (ĴŠÖÑ, àñ
ẊĻÎƑƑ, …) ŕéçöŕđš þŕéšéñçé öñļý, šö à ƒîļé-ƃàšéđ þŕöĵéçţ ŕéàđš à þŕéšéñţ ţàŕĝéţ
àš ţŕàñšļàţéđ. Ţĥé ĥîĝĥéŕ ŕüñĝš ŕîđé à çàŕŕîéŕ ţĥàţ çàñ ĥöļđ ţĥéḿ: ŕéṽîéŵéđ
çöḿéš ƒŕöḿ àñ àþþŕöṽàļ ŕéçöŕđéđ îñ ţĥé þŕöĵéçţ'š
üñîţ-šţàţé ŕéçöŕđ (ƃéļöŵ), àñđ à
.kpz þàŕçéļ çàŕŕîéš ţĥé ƒüļļ šţàţüš àçŕöšš à ĥàñđ-öƒƒ.
Ţĥé ĝàţé: çöṽéŕàĝé ţĥŕéšĥöļđš
À ĝàţé îš à šéţ öƒ çöṽéŕàĝé ţĥŕéšĥöļđš öṽéŕ ţĥé ļàđđéŕ: à šţàţé ñàḿé ţö à ḿîñîḿüḿ þéŕçéñţ. À šçöþé çļéàŕš à ĝàţé ŵĥéñ, ƒöŕ éṽéŕý ţĥŕéšĥöļđ, àţ ļéàšţ ţĥàţ þéŕçéñţ öƒ îţš üñîţš ĥàṽé ŕéàçĥéđ ţĥàţ ŕüñĝ öŕ ĥîĝĥéŕ.
# kapi.yaml
ship_gate: { translated: 100, reviewed: 80 }
Ţĥîš ŕéàđš "éṽéŕý üñîţ ţŕàñšļàţéđ, àñđ ţĥé îḿþöŕţàñţ 80% ŕéṽîéŵéđ; šĥîþ ţĥé ļöñĝ
ţàîļ ḿàçĥîñé-ţŕàñšļàţéđ." À ƃàŕé 100% reviewed îš ţĥé đéĝéñéŕàţé çàšé.
Ĝàţéš çàñ ƃé šéļéçţéđ ƃý ŕüļé, šö đéŕéñţ çöļļéçţîöñš öŕ ļöçàļéš àñšŵéŕ ţö đéŕéñţ ƃàŕš (ţĥé ḿöšţ šþéçîƒîç ḿàţçĥîñĝ ŕüļé ŵîñš):
ship_gates:
- when: { locales: [de] } # German is contractually reviewed
gate: { translated: 100, reviewed: 100 }
- gate: { translated: 100, reviewed: 80 } # the default
Ţĥé šöüŕçé ļàđđéŕ ĥàš îţš öŵñ öþţîöñàļ ƃàŕ, source_gate (é.ĝ.
{ checked: 100 }), ţĥé šöüŕçé-šîđé çöüñţéŕþàŕţ öƒ ship_gate.
À ĝàţé ñéṽéŕ ƒàîļš àñ öŕđîñàŕý ƃüîļđ. Ţàŕĝéţ-ļàñĝüàĝé đŕîƒţ îš éẋþéçţéđ ŵöŕķ, àñđ à ĝàţé îš à ŕéļéàšé çĥéçķ ýöü öþţ îñţö (šéé ƃéļöŵ).
Ţĥŕéé šĥîþ šţàţéš
Éṽéŕý šçöþé ŕéàđš àš öñé öƒ ţĥŕéé šţàţéš àĝàîñšţ ţĥé šĥîþ ĝàţéš:
| Šţàţé | Ŵĥàţ îţ ḿéàñš |
|---|---|
| šĥîþþàƃļé | À šĥîþ ĝàţé ḿàţçĥéš ţĥé šçöþé àñđ ţĥé šçöþé çļéàŕš îţ. |
| ŵîţĥĥéļđ | Ţĥé šçöþé đöéš ñöţ šĥîþ. Îţ îš šĥöŕţ öƒ îţš ĝàţé, öŕ îţ ĥöļđš šţàļé ŵöŕđîñĝ, à ţŕàñšļàţîöñ à ŕéṽîéŵéŕ ţüŕñéđ đöŵñ, à ƒàîļîñĝ çĥéçķ, öŕ ţéŕḿš ţĥàţ ŵéŕé ñöţ çĥéçķéđ. Ţĥéšé ĥöļđ à šçöþé ƃàçķ ŵĥéţĥéŕ öŕ ñöţ à ĝàţé ḿàţçĥéš îţ. |
| ñöţ ĝàţéđ | Ñö šĥîþ ĝàţé ḿàţçĥéš ţĥé šçöþé, àñđ ñöţĥîñĝ ŵîţĥĥöļđš îţ. |
À þŕöĵéçţ ŵîţĥ ñö ship_gate öŕ ship_gates ĥàš öñļý ŵîţĥĥéļđ àñđ ñöţ-ĝàţéđ
šçöþéš. kapi status àñđ kapi up ñàḿé ţĥöšé šçöþéš ñöţ ĝàţéđ ŕàţĥéŕ ţĥàñ
šĥîþþàƃļé, àñđ à kapi up ŕüñ ţĥàţ çöñṽéŕĝéš šàýš ţĥàţ ñö šĥîþ ĝàţéš àŕé
đéçļàŕéđ. Ñöţĥîñĝ ŵîţĥĥöļđš à ñöţ-ĝàţéđ šçöþé, šö à ļàñĝüàĝé þîçķéŕ öƒƒéŕš îţ ƃý
đéƒàüļţ.
Àþþŕöṽéŕ çļàššéš: ŵĥö çöüñţš àš à ŕéṽîéŵéŕ
Ŕéṽîéŵéđ àñđ šîĝñéđ-öƒƒ àŕé àþþŕöṽàļ ŕüñĝš: šöḿéöñé àþþŕöṽéđ ţĥîš éẋàçţ
ţŕàñšļàţîöñ. À ţĥŕéšĥöļđ'š àþþŕöṽéŕ çļàšš (by, îñ ţĥé éẋţéñđéđ ƒöŕḿ
reviewed: { pct: 100, by: human }) đéçîđéš ŵĥöšé àþþŕöṽàļš çöüñţ ţöŵàŕđ îţ.
Ţĥé đéƒàüļţ îš human: öñļý àñ àþþŕöṽàļ ḿàđé ƃý à þéŕšöñ, öŕ àñ àĝéñţ àçţîñĝ
ƒöŕ öñé, šàţîéš ţĥé ţĥŕéšĥöļđ, àñđ ţĥé šĥöŕţ ƒöŕḿ (reviewed: 80) àļŵàýš
ḿéàñš by: human. by: any àļšö çöüñţš àüţöñöḿöüš ÀÎ àþþŕöṽàļš, ţĥöšé
ŕéçöŕđéđ üñđéŕ àñ ai/… îđéñţîţý, šüçĥ àš àñ ÀÎ þŕé-ŕéṽîéŵ ţĥàţ àüţö-àþþŕöṽéš
ŵĥàţ îţ šçöŕéš çļéàñ. Àñ ÀÎ-àþþŕöṽéđ üñîţ ŕéàđš àš ŕéṽîéŵéđ îñ kapi status
(ŵîţĥ àñ (ai) ǫüàļîƒîéŕ) ƃüţ đöéš ñöţ šàţý à ĥüḿàñ ţĥŕéšĥöļđ: àñ
àüţöñöḿöüš ÀÎ àþþŕöṽîñĝ îţš öŵñ ŵöŕķ ñéṽéŕ šîļéñţļý šĥîþš à ĝàţé ţĥàţ ŵàš
ŵŕîţţéñ ŵĥéñ ŕéṽîéŵéđ çöüļđ öñļý ḿéàñ à þéŕšöñ. Ţĥé đéƒàüļţ îš à þöļîçý à
ŕéçîþé çàñ öṽéŕŕîđé þéŕ šçöþé, šö ţîéŕš çöéẋîšţ:
gates:
contractual: { translated: 100, reviewed: { pct: 100, by: human } }
standard: { translated: 100, reviewed: 80 } # short form: by: human implied
machine: { translated: 100, reviewed: { pct: 100, by: any } }
ship_gates:
- when: { locales: [de] } # contractual market: a person approves every unit
gate: contractual
- when: { locales: [fr, es] }
gate: standard
- gate: machine # the long tail: autonomous AI review counts
Ţĥé ƒüļļ šçĥéḿà (ţĥŕéšĥöļđ ƒöŕḿš, ŕüļé šéļéçţîöñ, ţĥé ñàḿéđ ŕéĝîšţŕý) îš îñ ţĥé þŕöĵéçţ-ƒîļé ŕéƒéŕéñçé; à ŵöŕķéđ þéŕ-ḿàŕķéţ šţŕàţéĝý îš Ţîéŕ ĝàţéš þéŕ ḿàŕķéţ.
Šöüŕçé ƒîŕšţ: šéţţļé, ĝàţé, ţĥéñ ţŕàñšļàţé
Ţĥé ţŵö ļàđđéŕš ŕüñ îñ öŕđéŕ, ŵîţĥ ţĥé šöüŕçé šĥîþ-ĝàţé ƃéţŵééñ ţĥéḿ. Šöüŕçé çöñţéñţ îš šĥàŕéđ àçŕöšš éṽéŕý ļöçàļé, šö à ţéŕḿ ļéƒţ üñŕéšöļṽéđ öŕ à šéñţéñçé ļéƒţ öƒƒ-ƃŕàñđ ŵöüļđ ƃé þàîđ ƒöŕ öñçé þéŕ ļàñĝüàĝé, ţĥéñ þàîđ ƒöŕ àĝàîñ ŵĥéñ ţĥé šöüŕçé îš ƒîẋéđ àñđ éṽéŕýţĥîñĝ ŕéţŕàñšļàţéš. Ţĥé ļööþ šéţţļéš ţĥé šöüŕçé öñçé àñđ ĥöļđš ţĥé ƒàñ-öüţ üñţîļ îţ îš ŕéàđý.
Šéţţļé ţĥé šöüŕçé, çļéàŕ îţš ĝàţé, ţĥéñ ţŕàñšļàţé ţĥé àþþŕöṽéđ šöüŕçé þéŕ ļöçàļé; éàçĥ ĝàţé ĥöļđš ŵöŕķ ţĥàţ îš ñöţ ŕéàđý ŕàţĥéŕ ţĥàñ šĥîþþîñĝ îţ.
Ŕéàđ ţĥé ļööþ ļéƒţ ţö ŕîĝĥţ:
- Šéţţļé ţĥé šöüŕçé. Çĥéçķ ţéŕḿîñöļöĝý àñđ ḿàŕķ ţĥé ţéŕḿš ţĥàţ ḿüšţ ñöţ ƃé ţŕàñšļàţéđ, çĥéçķ ṽöîçé þŕöƒîļé, ŕüñ ţĥé šöüŕçé çĥéçķš. Ţĥîš ļîƒţš šöüŕçé üñîţš üþ ţĥé àüţĥöŕîñĝ ļàđđéŕ (àüţĥöŕéđ → çĥéçķéđ → àþþŕöṽéđ).
- Ĥöļđ àţ ţĥé šöüŕçé šĥîþ-ĝàţé. Ţĥé öþţîöñàļ
source_gate(ƒöŕ éẋàḿþļé,{ checked: 100 }) îš ţĥé šöüŕçé-šîđé çöüñţéŕþàŕţ öƒship_gate. Šöüŕçé ţĥàţ ĥàš ñöţ çļéàŕéđ îţš ƃàŕ ĥöļđš: šéţţļîñĝ ţĥé šöüŕçé ƒîŕšţ îš çĥéàþéŕ ţĥàñ à ḿàçĥîñé ţŕàñšļàţîöñ öƒ çöñţéñţ ýöü àŕé àƃöüţ ţö çĥàñĝé. - Ţŕàñšļàţé ţĥé àþþŕöṽéđ šöüŕçé. Öñļý šéţţļéđ šöüŕçé ƒàñš öüţ þéŕ ļöçàļé, ḿéḿöŕý-ƒîŕšţ: ŕéçýçļé ŵĥàţ ýöü ĥàṽé àļŕéàđý ţŕàñšļàţéđ, ÀÎ-ţŕàñšļàţé ţĥé ŕéḿàîñđéŕ, çĥéçķ ŵĥàţ ŵàš þŕöđüçéđ. Ŵĥéŕé à šöüŕçé ŵàš éđîţéđ, îţš þŕéṽîöüšļý àþþŕöṽéđ ţŕàñšļàţîöñ ĝöéš îñţö ţĥé þŕöḿþţ àš ŕéƒéŕéñçé, üñđéŕ ţĥé šàḿé ĝöṽéŕñîñĝ çöñţéẋţ, šö ţĥé ŕéđŕàƒţ ķééþš ŵöŕđîñĝ à þéŕšöñ àļŕéàđý àççéþţéđ ŵĥéŕé îţ šţîļļ ƒîţš. Ţĥé þŕöţéçţéđ ţéŕḿš šţàý þŕöţéçţéđ.
- Ĥöļđ àţ ţĥé ţàŕĝéţ šĥîþ-ĝàţé. À ļöçàļé ţĥàţ çļéàŕš îţš
ship_gateîš šĥîþþàƃļé; ŵĥàţéṽéŕ à ḿàçĥîñé çàññöţ đéçîđé þàŕķš ƒöŕ ŕéṽîéŵ ŕàţĥéŕ ţĥàñ šĥîþþîñĝ üñđéŕ-ŕéṽîéŵéđ.
À ĝàţé ñéṽéŕ ƒàîļš: îţ ĥöļđš ŵöŕķ àñđ ŕöüţéš îţ ţö à þéŕšöñ (à šöüŕçé-ŕéṽîéŵ ŵöŕķļîšţ, öŕ ţĥé ţàŕĝéţ ŕéṽîéŵ ǫüéüé) àñđ ţĥé çöḿḿàñđ šţîļļ éẋîţš žéŕö. Éđîţîñĝ à šöüŕçé üñîţ ŕé-öþéñš ţĥé šöüŕçé ĝàţé ƒöŕ öñļý ţĥé çĥàñĝéđ šéĝḿéñţš, šö à ƒîẋ ŕé-šéţţļéš àñđ ŕé-ţŕàñšļàţéš ĵüšţ ţĥöšé, ñéṽéŕ ţĥé ŵĥöļé çöŕþüš.
Šééîñĝ îţ: status àñđ check
kapi status îš ţĥé đéŕîṽéđ đàšĥƃöàŕđ: çöṽéŕàĝé þéŕ ļöçàļé àñđ éàçĥ šçöþé'š
šţàñđîñĝ àĝàîñšţ îţš ĝàţé, ŕéçöḿþüţéđ öñ éṽéŕý ŕüñ:
kapi status
# source 2 units · authored 100% · checked 100% · approved 0%
#
# scope units draft translated reviewed signed-off pipeline ship
# de 42 100% 100% 80% 0% ██████████ 100% ready
# nb 42 100% 60% 0% 0% ███░░░░░░░ 30% blocked: translate
#
# 1 of 2 scopes ready to ship
À þŕöĵéçţ çöññéçţéđ ţö à çöñṽéŕĝéñçé ṽéñüé ĝéţš ţŵö ḿöŕé ļîñéš, àñđ ţĥéý àŕé ţŵö
đéŕéñţ ǫüéšţîöñš. Çöñţéñţ îš à þöšîţîöñ (ŵĥàţ îš ĥéŕé àñđ ŵĥàţ îš ţĥéŕé)
àñđ à ţŕàñšƒéŕ ŕéšöļṽéš îţ. Ĝöṽéŕñàñçé îš àñ îđéñţîţý: ŵĥîçĥ çöñţéẋţ, ţéŕḿš
àñđ đéçîšîöñš àŕé îñ ƒöŕçé. Ţŵö îđéñţîţý ĥàšĥéš ţĥàţ đéŕ çàŕŕý ñö đîšţàñçé
àñđ ñö đîŕéçţîöñ, šö ţĥé ļîñé šàýš à çöḿþöñéñţ ḿöṽéđ àñđ ñéṽéŕ ĥöŵ ƒàŕ ƃéĥîñđ
ýöü àŕé; ŕéšöļṽîñĝ ŵĥàţ ţĥàţ ḿéàñš ƒöŕ ŵöŕķ àļŕéàđý ŵŕîţţéñ îš à ĵüđĝéḿéñţ, àñđ
kapi status đöéš ñöţ ḿàķé îţ.
kapi status
# content https://venue.example.com · 12 to push · 0 to pull
# governance context in sync · terms moved · decisions in sync
# run `kapi pull` to take down the governance that moved
kapi check --ship îš ţĥé éñƒöŕçîñĝ çöüñţéŕþàŕţ, ţĥé þŕé-ŕéļéàšé ƃàŕ. Îţ ŕüñš
ţĥé þŕöĵéçţ'š ƃöüñđ ǫüàļîţý ĝàţéš (ṽöîçé, ţéŕḿîñöļöĝý, ŕüļé-ƃàšéđ çĥéçķš,
šţàļéñéšš) ţöĝéţĥéŕ ŵîţĥ ţĥé šĥîþ àñđ šöüŕçé çöṽéŕàĝé ĝàţéš öṽéŕ ţĥé þŕöĵéçţ'š
çöñţéñţ, àñđ éẋîţš ñöñ-žéŕö ŵĥéñ àñý ĝàţé îš üñḿéţ (ƒöŕ à ŕéļéàšé ţàĝ öŕ à main çĥéçķ). Ţàŕĝéţ đŕîƒţ ñéṽéŕ ƃļöçķš àñ
öŕđîñàŕý ƃüîļđ; --ship îš ţĥé éẋþļîçîţ, öþţ-îñ éñƒöŕçéḿéñţ þöîñţ. (À ƃàŕé
kapi check <files> ŕüñš à çĥéçķšéţ öṽéŕ ţĥé ƒîļéš ýöü ñàḿé, ţĥé çöñţéñţ-ƒîŕšţ
çöüñţéŕþàŕţ ţö à ţéšţ ŕüññéŕ.) Šéé
Çĥéçķ ţŕàñšļàţîöñš îñ ÇÎ.
Ŕüññîñĝ ţĥé ļööþ: kapi up
kapi up ŕüñš ţĥé ļööþ. Îţ ŕéàđš ŵĥàţ ţĥé ŕéçîþé đéçļàŕéš, ţĥéñ ŕüñš ţĥé
þŕöĵéçţ'š đéƒàüļţ ƒļöŵ (defaults.flow) öṽéŕ àļļ çöñţéñţ àçŕöšš éṽéŕý ţàŕĝéţ
ļàñĝüàĝé, ļööþîñĝ üñţîļ éṽéŕý ĝàţéđ šçöþé îš šĥîþþàƃļé öŕ þàŕķš ƒöŕ à
ĥüḿàñ:
defaults:
flow: translate-and-check # a flow defined under flows:
Ŵîţĥöüţ defaults.flow, up ŕüñš ţĥé ƃüîļţ-îñ đéƒàüļţ ƒļöŵ (çöñţéñţ-ḿéḿöŕý
ŕéüšé, ţĥéñ ÀÎ ţŕàñšļàţé) šö à ŕéçîþé ñééđš ñö ƒļöŵ ÝÀḾĻ àţ àļļ ţö çàţçĥ üþ.
Ţĥé ţŕàñšļàţé šţéþ ŕéàđš ţĥé çöñţéñţ ḿéḿöŕý ţöö: ŵîţĥ reuse: prior (îţš
đéƒàüļţ), à ƃļöçķ ŵĥöšé šöüŕçé ŵàš éđîţéđ ĝéţš îţš þŕéṽîöüšļý àþþŕöṽéđ
ţŕàñšļàţîöñ àš ŕéƒéŕéñçé, öƒƒéŕéđ öñļý ŵĥéñ ţĥé šàḿé ĝöṽéŕñîñĝ çöñţéẋţ îš îñ
ƒöŕçé. reuse: none ţüŕñš ţĥàţ ŕéàđ öƒƒ ƒöŕ à çĥéàþ ŕüñ.
kapi up # loop the default flow until every gated scope ships or parks
kapi up --plan # dry run: pending work, content-memory leverage, and a token estimate per locale
kapi up --passes 1 # a single pass over every locale that needs work
kapi up --materialize # also write the translated files for the shippable locales
Þŕöđüçé ļööþš ţö ţĥé ĝàţé; ŕéṽîéŵ þŕöḿöţéš ŵĥàţ à ḿàçĥîñé çàñ'ţ đéçîđé; ţĥé ĝàţé ŕéļéàšéš.
Éàçĥ þàšš ŕé-đéŕîṽéš çöṽéŕàĝé ƒŕöḿ ţĥé ŵöŕķîñĝ ţŕéé, ŕüñš ţĥé ƒļöŵ öñļý ƒöŕ ţĥé
ļöçàļéš šţîļļ šĥöŕţ öƒ ţĥéîŕ ĝàţé, ţĥéñ ŕüñš ţĥé þŕöĵéçţ'š ƃöüñđ çĥéçķš öṽéŕ ŵĥàţ
ŵàš þŕöđüçéđ: à üñîţ ŵîţĥ ƒàîļîñĝ ƒîñđîñĝš (đŕöþþéđ þļàçéĥöļđéŕš, ţéŕḿîñöļöĝý
ṽîöļàţîöñš) šţîļļ çöüñţš àš ţŕàñšļàţéđ, ƃéçàüšé îţ îš, àñđ ţĥé ƒîñđîñĝ ĥöļđš
îţš ļöçàļé öüţ öƒ šĥîþþîñĝ üñţîļ îţ îš ƒîẋéđ. Ţĥé þéŕçéñţàĝéš đéšçŕîƃé ţĥé
çöñţéñţ; ţĥé ṽéŕđîçţ îš ŵĥàţ à ĝüàŕđŕàîļ ŵîţĥĥöļđš, àñđ kapi status àñđ
kapi status --ship ŕüñ ţĥé šàḿé çĥéçķš àñđ ŕéàçĥ ţĥé šàḿé ṽéŕđîçţ. Ţĥé ļööþ
šţöþš ŵĥéñ éṽéŕý ĝàţéđ šçöþé îš šĥîþþàƃļé, à
þàšš ḿàķéš ñö þŕöĝŕéšš, öŕ ţĥé þàšš çàþ (đéƒàüļţ 5, --passes N) îš ŕéàçĥéđ.
Ŵĥàţéṽéŕ çàññöţ ƃé àđṽàñçéđ üñàîđéđ þàŕķš: îţ îš ŕéþöŕţéđ àš àŵàîţîñĝ à ĥüḿàñ
àñđ ţĥé çöḿḿàñđ šţîļļ éẋîţš žéŕö. up ñéṽéŕ ƃļöçķš ţĥé àüţĥöŕ, àñđ îţ ñéṽéŕ
ƒàîļš ţĥé ƃüîļđ öñ ţàŕĝéţ đŕîƒţ; þàŕķéđ ŵöŕķ îš ţĥé ŕéṽîéŵ ǫüéüé.
Ƃéƒöŕé éàçĥ þàšš, up ŕé-šýñçš ţĥé þŕöĵéçţ ƃļöçķ šţöŕé ŵîţĥ ţĥé ŵöŕķîñĝ ţŕéé:
éđîţéđ šöüŕçé ƒîļéš, à šţöŕé ŵŕîţţéñ ƃý àñöţĥéŕ kapi ṽéŕšîöñ, öŕ à ḿîššîñĝ šţöŕé
ţŕîĝĝéŕ à ŕé-éẋţŕàçţîöñ. --no-extract öþţš öüţ; --no-checks šķîþš ţĥé ƃöüñđ
çĥéçķš îñ ţĥé ļööþ.
Ţĥé ŕüñ îš ļîṽé
up šţàŕţš ƃý þŕîñţîñĝ à öñé-ļîñé þļàñ (ţĥé üñîţš ţĥé þàšš ŵîļļ ŵöŕķ öñ,
éẋàçţ çöñţéñţ-ḿéḿöŕý ļéṽéŕàĝé, ŕéḿàîñîñĝ ÀÎ ŵöŕķ, à ţöķéñ éšţîḿàţé, àñđ ţĥé
þŕöṽîđéŕ îţ ŵîļļ üšé) šö çöšţ îš ṽîšîƃļé ƃéƒöŕé àñý ţöķéñš ƃüŕñ (þŕéṽîéŵ ƃéƒöŕé
àþþļý; --plan àļöñé îš ţĥé ƒüļļ đŕý-ŕüñ ţàƃļé). Îţ ţĥéñ ŕéñđéŕš þŕöĝŕéšš àš ţĥé
ļööþ ŕüñš: öñé ļîñé þéŕ ļöçàļé, ŕéþàîñţéđ îñ þļàçé öñ à ţéŕḿîñàļ, à ļîñé þéŕ
éṽéñţ öñ à þļàîñ šţŕéàḿ.
Ţĥé þļàñ àšķš ŵĥàţ ţĥé þàšš àšķš, öƒ ţĥé ƒļöŵ ţĥé þàšš ŵöüļđ ŕüñ. À þàšš ŕéàđš ţĥé šöüŕçé đöçüḿéñţš, ƒîļļš ƒŕöḿ ţĥé çöñţéñţ ḿéḿöŕý ŵĥéŕé ţĥé ƒļöŵ ŕéçýçļéš, àñđ đŕàƒţš ţĥé ŕéḿàîñđéŕ ŵĥéŕé ţĥé ƒļöŵ đŕàƒţš, šö à üñîţ çöšţš à þŕöṽîđéŕ çàļļ ŵĥéñ ţĥé çöŕþüš ĥàš ñö àñšŵéŕ ƒöŕ îţš šöüŕçé àñđ ţĥé çöñƒîĝüŕéđ ƒļöŵ ŕéàçĥéš à þŕöṽîđéŕ, ŵĥàţéṽéŕ à ţàŕĝéţ ƒîļé ĥàþþéñš ţö ĥöļđ. À ƒļöŵ ţĥàţ ŕéçýçļéš àñđ ñöţĥîñĝ éļšé ļéàṽéš ţĥé üñîţš ţĥé çöŕþüš çàññöţ àñšŵéŕ öüţ öƒ ŕéàçĥ: ţĥéý àŕé ŕéþöŕţéđ àñđ ñöţ þŕîçéđ, ƃéçàüšé ţĥàţ ŕüñ ŵîļļ ñöţ ţöüçĥ ţĥéḿ àñđ ŵîļļ çàļļ ñöƃöđý. Ḿîššîñĝ üñîţš, šţàļé öñéš (à đéçîšîöñ'š šöüŕçé ḿöṽéđ) àñđ üñàñšŵéŕéđ öñéš (à ţàŕĝéţ ţĥé ŕéçöŕđ đöéš ñöţ þàîŕ ŵîţĥ îţš šöüŕçé) àŕé ñàḿéđ àþàŕţ, ƃéçàüšé ţĥéý ḿéàñ đéŕéñţ ţĥîñĝš ţö ýöü, àñđ þŕîçéđ ţöĝéţĥéŕ, ƃéçàüšé ţĥé ŕüñ đöéš ñöţ ţŕéàţ ţĥéḿ đéŕéñţļý.
À üñîţ ţĥé þŕöĵéçţ šţöŕé àļŕéàđý ĥöļđš à đŕàƒţ ƒöŕ çöšţš ñöţĥîñĝ ƒüŕţĥéŕ. Ţĥé đŕàƒţîñĝ šţéþ àšķš ţĥé šţöŕé ƃéƒöŕé îţ çàļļš öüţ, àñđ šéŕṽéš à šţöŕéđ ţŕàñšļàţîöñ öƒ ţĥé šàḿé šöüŕçé ŵĥéñ îţ ŵàš ḿàđé üñđéŕ ţĥé çöñƒîĝüŕàţîöñ àñđ ĝöṽéŕñîñĝ çöñţéẋţ ţĥé šţéþ ŵöüļđ üšé ñöŵ, šö ţĥé þļàñ çöüñţš šüçĥ à üñîţ üñđéŕ šţöŕéđ đŕàƒţš àñđ ǫüöţéš ñö ţöķéñš ƒöŕ îţ. À ļàñĝüàĝé þàŕķéđ šĥöŕţ öƒ îţš ĝàţé ŕéàđš ţĥîš ŵàý öñ éṽéŕý ŕüñ àƒţéŕ ţĥé öñé ţĥàţ đŕàƒţéđ îţ: îţš đŕàƒţš àŕé þàîđ ƒöŕ öñçé. À çĥàñĝéđ ḿöđéļ, þŕöḿþţ, ṽöîçé þŕöƒîļé öŕ ţéŕḿ ŕüļé, öŕ àñ éđîţéđ šéñţéñçé, þüţš ţĥé üñîţ ƃàçķ üñđéŕ đŕàƒţéđ ƃý ƒļöŵ.
kapi up · KapiMart · flow "default (built-in)" · anthropic/claude-sonnet-4-6 (your subscription)
plan: 288 unit(s) missing · 54 exact-content memory · 234 AI · ≈61k tokens
pass 1/5
fr-FR ████████████░░░░░░ 62/96 (content memory 18 · AI 44) 2 checks ✗
de-DE █████░░░░░░░░░░░░░ 27/96 (content memory 18 · AI 9)
ja-JP queued
nb-NO ready 96/96
Up to date in 2 passes · 3 locales shippable · de-DE parked: 2 units need review
→ kapi status --review
Ļöçàļéš àŕé îñđéþéñđéñţ ŵîţĥîñ à þàšš, šö up çàţçĥéš ţĥéḿ üþ çöñçüŕŕéñţļý:
--jobs N šéţš ĥöŵ ḿàñý ŕüñ àţ öñçé (đéƒàüļţ 4; ŕéçîþé öṽéŕŕîđé defaults.jobs;
--jobs 1 ŕéšţöŕéš šéŕîàļ éẋéçüţîöñ). Ţĥé þàšš ƃàŕŕîéŕ šţàýš: çöṽéŕàĝé îš
ŕé-đéŕîṽéđ, çĥéçķš ŕüñ, àñđ þàŕķîñĝ îš đéçîđéđ öñçé þéŕ þàšš, öṽéŕ àļļ ļöçàļéš
ţöĝéţĥéŕ.
Ŵîţĥîñ öñé þàšš, kapi üþ ƒàñš öüţ þéŕ ļöçàļé (--ĵöƃš); ţĥé þàšš ƃàŕŕîéŕ ŕé-đéŕîṽéš çöṽéŕàĝé àñđ đéçîđéš þàŕķîñĝ öñçé àļļ ŵöŕķéŕš ƒîñîšĥ.
Ƒöŕ àĝéñţš àñđ ÇÎ, --json šţŕéàḿš ţĥé ŕüñ àš ÑĐĴŠÖÑ, öñé çöñṽéŕĝéñçé éṽéñţ
þéŕ ļîñé (þļàñ, þàšš, þéŕ-ļöçàļé þŕöĝŕéšš, çĥéçķš, þàŕķéđ/çöñṽéŕĝéđ), ŵîţĥ ţĥé
šţŕüçţüŕéđ ŕéšüļţ àš ţĥé ƒîñàļ ŕéçöŕđ. Ţĥé šàḿé éṽéñţš ƒééđ ţĥé Kapi Đéšķţöþ
þàššéš ṽîéŵ.
kapi run <flow> ŕéḿàîñš ţĥé éšçàþé ĥàţçĥ ƒöŕ à çüšţöḿ þîþéļîñé: öñé ñàḿéđ
ƒļöŵ, öñé þàšš, ñö ĝàţé ļööþ. Ŕéàçĥ ƒöŕ îţ ŵĥéñ ýöü ŵàñţ à šþéçîƒîç çöḿþöšîţîöñ;
ŕéàçĥ ƒöŕ kapi up ƒöŕ ţĥé đàîļý çàţçĥ-üþ.
Đŕîƒţ, ŵàţçĥéđ éñđ ţö éñđ
Ƃéçàüšé šţàţé îš đéŕîṽéđ, ŕéçöṽéŕý ƒŕöḿ à šöüŕçé éđîţ îš öƃšéŕṽàƃļé àţ éṽéŕý
šţéþ. Ţàķé à Ĝéŕḿàñ šçöþé ƒüļļý çàüĝĥţ üþ üñđéŕ
ship_gate: { translated: 100, reviewed: 80 }:
kapi status
# scope units draft translated reviewed signed-off pipeline ship
# de 42 100% 100% 100% 0% ██████████ 100% ready
Éđîţ öñé šöüŕçé šţŕîñĝ. Ñöţĥîñĝ ƒļàĝš ţĥé çĥàñĝé àñđ ñö šţàţé îš ŵŕîţţéñ; ţĥé ñéẋţ đéŕîṽàţîöñ ŕéàđš ţĥé ŵöŕķîñĝ ţŕéé àñđ çöḿþàŕéš éàçĥ đéçîšîöñ àĝàîñšţ ţĥé šöüŕçé îţ ƃļéššéđ. Ţĥé éđîţéđ üñîţ'š ƃàšîš ñö ļöñĝéŕ ḿàţçĥéš, šö îţ ŕéàđš àš šţàļé: îţ ĥöļđš à ţàŕĝéţ, šö îţ šîţš àţ đŕàƒţ, ƃüţ ţĥàţ ţàŕĝéţ ţŕàñšļàţéš à šéñţéñçé ţĥé þŕöĵéçţ ñö ļöñĝéŕ ĥàš, àñđ ţĥé àþþŕöṽàļ ƃöüñđ ţö ţĥé öļđ þàîŕîñĝ đöéš ñöţ àþþļý:
kapi status
# scope units draft translated reviewed signed-off pipeline ship
# de 42 100% 98% 98% 0% █████████░ 99% blocked: stale
#
# 1 unit(s) stale: the source changed since the translation was decided.
# They do not ship until you re-review them with `kapi status --review`.
Öñé þàšš çļöšéš ŵĥàţ à ḿàçĥîñé çàñ çļöšé. À šţàļé üñîţ îš ŵöŕķ: ţĥé ļööþ ŕé-đŕàƒţš îţ àĝàîñšţ ţĥé šöüŕçé ţĥé þŕöĵéçţ ĥàš ñöŵ (çöñţéñţ ḿéḿöŕý ƒîŕšţ, ţĥéñ ÀÎ ƒöŕ ţĥé ŕéḿàîñđéŕ, éẋàçţļý àš îţ þŕöđüçéš à üñîţ ţĥàţ ĥàš ñö ţŕàñšļàţîöñ àţ àļļ) àñđ ţĥé þļàñ ǫüöţéš ţĥàţ ŵöŕķ ƃéƒöŕé àñý ţöķéñš ƃüŕñ:
kapi up --plan
# scope missing stale unanswered content memory exact stored drafts drafted by flow out of reach ~tokens
# de 0 1 0 0 0 1 0 9
#
# 1 unit(s) stale: their source changed since the translation was decided.
# They are re-drafted against the current source (priced above) and return
# to review un-approved. See `kapi status --review`.
kapi up --passes 1
# Re-drafted 1 stale unit(s) against the current source. They return to
# review un-approved (the earlier approval is not restored).
kapi status
# scope units draft translated reviewed signed-off pipeline ship
# de 42 100% 100% 98% 0% █████████░ 99% blocked: stale
Ţĥé ŕé-đŕàƒţ ĥöļđš ĥöŵéṽéŕ ţĥé üñîţ îš îđéñţîƒîéđ. Ŵĥéŕé ţĥé éđîţ ŕé-ķéýš ţĥé üñîţ (à þŕöšé þàŕàĝŕàþĥ, ŵĥöšé îđéñţîţý îš îţš ŵöŕđîñĝ), ţĥé öļđ ţŕàñšļàţîöñ ñö ļöñĝéŕ þàîŕš ŵîţĥ îţ àţ àļļ. Ŵĥéŕé ţĥé üñîţ ķééþš îţš ķéý (à çàţàļöĝ éñţŕý, ŵĥöšé îđéñţîţý îš îţš ñàḿé), ţĥé öļđ ţŕàñšļàţîöñ îš šţîļļ šîţţîñĝ ƃéšîđé ţĥé ŕéŵŕîţţéñ šéñţéñçé, àñđ ţĥé ļööþ đéçļîñéš ţö ŕéàđ ţĥàţ àđĵàçéñçý àš à ţŕàñšļàţîöñ öƒ îţ: ţĥé éàŕļîéŕ ŵöŕđîñĝ îš ķéþţ îñ ţĥé çöñţéñţ ḿéḿöŕý üñđéŕ ţĥé šéñţéñçé îţ đöéš ţŕàñšļàţé, ŵĥéŕé ţĥé ŕéđŕàƒţ ŕéàđš îţ àš ŕéƒéŕéñçé, àñđ ţĥé éñţŕý îţšéļƒ îš đŕàƒţéđ àƒŕéšĥ.
Ţĥàţ ĥöļđš îñ éṽéŕý ļàñĝüàĝé, ŵĥéţĥéŕ öŕ ñöţ šöḿéöñé ĥàđ ŕéṽîéŵéđ ţĥé üñîţ.
À ŕéŵŕîţé îš à ƒàçţ àƃöüţ ţĥé šöüŕçé, šö éṽéŕý ļöçàļé'š ţŕàñšļàţîöñ öƒ ţĥé öļđ
šéñţéñçé îš à ţŕàñšļàţîöñ öƒ à šéñţéñçé ţĥé þŕöĵéçţ ñö ļöñĝéŕ ĥàš. Éàçĥ îš ķéþţ
üñđéŕ îţš öŵñ ŵöŕđîñĝ àñđ éàçĥ îš đŕàƒţéđ àĝàîñ; ţĥé ļàñĝüàĝéš ŵîţĥ à đéçîšîöñ
šàý šö öñ ţĥé stale àẋîš àƃöṽé, àñđ ţĥé ŕéšţ çöḿé ƃàçķ àš þéñđîñĝ ŵöŕķ.
À ţŕàñšļàţîöñ éđîţéđ îñ ţĥé šàḿé çöḿḿîţ àš îţš šöüŕçé îš ţĥé éẋçéþţîöñ îţ šĥöüļđ
ƃé: ţĥàţ þàîŕîñĝ ŵàš àüţĥöŕéđ ŕàţĥéŕ ţĥàñ ļéƒţ ƃéĥîñđ, šö îţ îš ķéþţ àš îţ šţàñđš.
Ţĥé ļööþ þŕöđüçéš àñđ ñéṽéŕ đéçîđéš. Þŕöđüçîñĝ à ţŕàñšļàţîöñ îš à đéŕéñţ àçţ ƒŕöḿ àþþŕöṽîñĝ öñé, šö ţĥé ŕé-đŕàƒţéđ üñîţ çöḿéš ƃàçķ àţ đŕàƒţ, îñ ţĥé ŕéṽîéŵ ŵöŕķļîšţ, ŵîţĥ ţĥé éàŕļîéŕ àþþŕöṽàļ ñöţ ŕéšţöŕéđ; ţĥé šçöþé đöéš ñöţ šĥîþ üñţîļ à þéŕšöñ ŕéṽîéŵš ţĥé ñéŵ þàîŕîñĝ. Đŕîƒţ îš ñéṽéŕ çöñṽéŕĝéđ öṽéŕ, àñđ îţ îš ñéṽéŕ ļéƒţ üñ-ŵöŕķéđ éîţĥéŕ.
Öñé ṽéŕƃ, ţŵö ṽéñüéš
Ţĥé ļööþ'š çöḿþüţé ĥàš ţö ŕüñ šöḿéŵĥéŕé. Ţĥàţ ṽéñüé îš à þŕöþéŕţý öƒ ţĥé þŕöĵéçţ, ñöţ à đéŕéñţ ṽéŕƃ. Ţĥŕéé çöñçéŕñš šţàý öŕţĥöĝöñàļ, éàçĥ öŵñéđ ƃý öñé šüŕƒàçé:
Ţŕàñšþöŕţ ḿöṽéš šţàţé, ţĥé ļööþ þŕöđüçéš ŵöŕķ, ṽéñüé îš ŵĥéŕé îţ ŕüñš: ţĥŕéé öŕţĥöĝöñàļ çöñçéŕñš.
- Ţŕàñšþöŕţ:
kapi pushàñđkapi pullḿàķé à ļöçàļ çĥéçķöüţ àñđ à šéŕṽéŕ ŕéþļîçà çöñšîšţéñţ. Þüŕé đàţà ḿöṽéḿéñţ (Ḿéŕķļé đ, çöñƒļîçţš, ţéŕḿîñöļöĝý ĥàñđ-öƒƒ); ţĥéý ñéṽéŕ þŕöđüçé ţŕàñšļàţîöñš. Ţĥé àñàļöĝý îšgit push/git fetch. - Ţĥé ļööþ:
kapi up, ţĥé öñé ṽéŕƃ ţĥàţ þŕöđüçéš ŵöŕķ ţöŵàŕđ ţĥé ĝàţéš. - Ṽéñüé: ŵĥéŕé
up'š çöḿþüţé éẋéçüţéš: ýöüŕ ḿàçĥîñé (ýöüŕ ÀÎ šüƃšçŕîþţîöñ öŕ ķéýš) öŕ à çöññéçţéđ šéŕṽéŕ (ţĥé öŕĝ'š ķéýš, šĥàŕéđ çöñţéñţ ḿéḿöŕý àñđ ţéŕḿîñöļöĝý, àļŵàýš-öñ).
Îñ à ƒîļé-öñļý þŕöĵéçţ ţĥé ļööþ ŕüñš ļöçàļļý; ţĥîš îš ţĥé ŵĥöļé šţöŕý
ƒöŕ ţĥé öþéñ-šöüŕçé kapi ƃîñàŕý, ŵĥîçĥ çàŕŕîéš ñö šéŕṽéŕ çöđé. Îñ à
šéŕṽéŕ-çöññéçţéđ þŕöĵéçţ (à ŕéçîþé ţĥàţ đéçļàŕéš à šéŕṽéŕ ṽéñüé) ţĥé šàḿé
kapi up ŕüñš öñ ţĥé šéŕṽéŕ ƃý đéƒàüļţ: îţ þüšĥéš ţĥé đŕîƒţ, ţĥé šéŕṽéŕ ŕüñš
ţĥé ļööþ öñ ţĥé öŕĝ'š ķéýš àñđ šĥàŕéđ àššéţš, þŕöĝŕéšš šţŕéàḿš ƃàçķ ļîṽé îñţö
ţĥé šàḿé ţéŕḿîñàļ ṽîéŵ, ŕéšüļţš þüļļ đöŵñ, àñđ þàŕķéđ üñîţš ļàñđ îñ ţĥé ţéàḿ'š
ŕéṽîéŵ ǫüéüé. Ţĥé ŕüñ'š éṽéñţ šţŕéàḿ îš îđéñţîçàļ îñ éîţĥéŕ ṽéñüé, àñđ ţĥé ṽéñüé
îţšéļƒ îš ñéṽéŕ îḿþļîçîţ: ŵĥéñéṽéŕ à đéçļàŕéđ ṽéñüé ḿàķéš ţĥé çĥöîçé àḿƃîĝüöüš,
kapi up þŕîñţš ţĥé ŕéšöļṽéđ ṽéñüé àš îţš ƒîŕšţ ļîñé, àñđ kapi status ŕéþöŕţš
ţĥé 郃éçţîṽé ṽéñüé àñđ server.converge þöļîçý àļöñĝšîđé ţĥé çöṽéŕàĝé ĝŕîđ.
kapi up --local öṽéŕŕîđéš ţĥé ṽéñüé ƒöŕ öñé ŕüñ, ŕüññîñĝ ţĥé ļööþ öñ ýöüŕ
ḿàçĥîñé àñđ ţĥéñ þüšĥîñĝ ţĥé ŕéšüļţš šö ţĥé šéŕṽéŕ îš ñéṽéŕ ļéƒţ šţàļé;
kapi up --server ŕéǫüîŕéš ţĥé šéŕṽéŕ ṽéñüé, ƒàîļîñĝ ŕàţĥéŕ ţĥàñ ƒàļļîñĝ ƃàçķ
ţö à ļöçàļ ŕüñ (ƒöŕ ÇÎ ţĥàţ ḿüšţ ñéṽéŕ šþéñđ ļöçàļ ķéýš).
Ţŕàñšþöŕţ îš þüŕé: kapi push đöéš ñöţ ţŕàñšļàţé ƃéĥîñđ ýöüŕ ƃàçķ. À
šéŕṽéŕ ţĥàţ ķééþš ţĥé þŕöĵéçţ çöñţîñüöüšļý çàüĝĥţ üþ (server.converge) îš àñ
éẋþļîçîţ, þéŕ-þŕöĵéçţ þöļîçý ţĥé ŵàý git push ţŕîĝĝéŕîñĝ ÇÎ îš à ŕéþöšîţöŕý
þöļîçý, ñöţ à þŕöþéŕţý öƒ git.
:::ñöţé
Ţĥé šéŕṽéŕ ṽéñüé (ţĥé þļàţƒöŕḿ'š ŕéçîþé ƃļöçķ, kapi push/pull/up --local, ţĥé
çöñţîñüöüš çàţçĥ-üþ þöļîçý, àñđ ţĥé šéŕṽéŕ-šîđé Ŕüñš šüŕƒàçé) îš þŕöṽîđéđ ƃý
ţĥé çöññéçţéđ þļàţƒöŕḿ'š þļüĝîñ ŕàţĥéŕ ţĥàñ ţĥé öþéñ-šöüŕçé kapi ƃîñàŕý. Šéé ţĥé þļàţƒöŕḿ
đöçüḿéñţàţîöñ ƒöŕ šéţţîñĝ üþ à çöññéçţéđ þŕöĵéçţ àñđ çöñṽéŕĝéñçé àš à šéŕṽîçé.
:::
Öñé đéƒàüļţ ƒļöŵ çàñ šţîļļ ṽàŕý ƃý ļöçàļé. defaults.locales.<lang>.tools
öṽéŕŕîđéš à ţööļ'š çöñƒîĝ ƒöŕ ţĥàţ ţàŕĝéţ ļàñĝüàĝé öñļý (ḿéŕĝéđ öñ ţöþ öƒ ţĥé
þŕöĵéçţ-ŵîđé defaults.tools àñđ üñđéŕ à ƒļöŵ šţéþ'š öŵñ çöñƒîĝ) šö à šîñĝļé
ƒļöŵ ţüŕñš àñ àđṽàñçéđ šţéþ öñ ŵĥéŕé à ļöçàļé ñééđš îţ:
defaults:
flow: translate-and-check
locales:
de:
tools:
redact: { enabled: true } # German redacts PII; other locales don't
Ŕéṽîéŵ: ţĥé šţàţé ŕéçöŕđ
À ḿàçĥîñé ţàķéš à üñîţ ţö ţŕàñšļàţéđ; à þéŕšöñ ţàķéš îţ ţö ŕéṽîéŵéđ. Ţĥàţ
àþþŕöṽàļ îš àüţĥöŕéđ üñîţ šţàţé (ŵĥö šîĝñéđ öƒƒ öñ ŵĥîçĥ éẋàçţ ţŕàñšļàţîöñ),
šö îţ ļàñđš îñ ţĥé þŕöĵéçţ šţöŕé'š ŵöŕķîñĝ šéţ, àñđ
kapi commit þüƃļîšĥéš îţ ţö ţĥé çöḿḿîţţéđ üñîţ-šţàţé ŕéçöŕđ üñđéŕ .kapi/state/.
Ţĥé çöñţéñţ ḿéḿöŕý ĥöļđš ñöñé öƒ îţ.
kapi status --review îš ţĥé ŵöŕķļîšţ: öñé ǫüéüé öƒ ţĥé üñîţš àŵàîţîñĝ à
þéŕšöñ, éàçĥ ƃéļöñĝîñĝ ţö à ļàñĝüàĝé, àñđ ţĥé šöüŕçé ļàñĝüàĝé îš öñé öƒ ţĥéḿ
(îţš ŕöŵš àŕé ḿàŕķéđ source). Ţŕàñšļàţéđ üñîţš ñöţ ýéţ àþþŕöṽéđ àŕé ţĥé
đéŕîṽéđ çöüñţéŕþàŕţ öƒ ţĥé ļööþ'š þàŕķéđ öüţçöḿé. Ýöü àþþŕöṽé öñé ŵîţĥ ţĥé öñé
ŵŕîţé ṽéŕƃ, kapi apply, àš à review çĥàñĝé-šéţ àđđŕéššéđ ƃý ţĥé üñîţ'š
file / id / locale éẋàçţļý àš ţĥé ŵöŕķļîšţ ļîšţš ţĥéḿ:
kapi status --review # the worklist: file, id, locale per pending unit
kapi status --review --lang nb # one language (repeat or comma-separate for several)
kapi apply <<<'{"kind":"review","file":"src/nb.json","id":"save.label","locale":"nb","status":"reviewed"}'
Àñ àþþŕöṽàļ îš àƃöüţ à þàîŕîñĝ: ţĥîš ŕéñđéŕîñĝ, öƒ ţĥîš šöüŕçé. Ţĥé
ŕéçöŕđ ƃîñđš ƃöţĥ ĥàļṽéš ƃý çöñţéñţ ĥàšĥ: ţĥé
ţŕàñšļàţîöñ îţ ƃļéššéš, àñđ ţĥé ƃàšîš, ţĥé šöüŕçé ŵöŕđîñĝ îţ ƃļéššéđ ţĥàţ
ţŕàñšļàţîöñ ƒöŕ. Éđîţîñĝ éîţĥéŕ àƒţéŕŵàŕđš đŕöþš ţĥé üñîţ ƃàçķ ƃéļöŵ ŕéṽîéŵéđ,
šö àñ àþþŕöṽàļ çàñ'ţ šîļéñţļý öüţļîṽé ţĥé ţéẋţ îţ àþþŕöṽéđ öñ éîţĥéŕ šîđé. Öñçé
ŕéçöŕđéđ, çöṽéŕàĝé ŕéàđš ţĥé üñîţ àš ŕéṽîéŵéđ, reviewed% çļîḿƃš, àñđ à
{ reviewed: … } ĝàţé ƒļîþš ţö šĥîþþàƃļé.
À üñîţ ŵĥöšé šöüŕçé ḿöṽéđ ŕéàđš àš šţàļé: îţ ĥöļđš à ţàŕĝéţ, šö îţ šîţš àţ
đŕàƒţ ŕàţĥéŕ ţĥàñ ƃéļöŵ ţĥé ļàđđéŕ, ƃüţ îţ îš ñöţ à ţŕàñšļàţîöñ öƒ ţĥé šöüŕçé
ţĥé þŕöĵéçţ ĥàš ñöŵ. kapi status çöüñţš îţ, ţĥé ŕéṽîéŵ ŵöŕķļîšţ ţàķéš îţ ƃàçķ,
àñđ ţĥé šçöþé đöéš ñöţ šĥîþ, ŵĥéţĥéŕ öŕ ñöţ à šĥîþ ĝàţé ŵàš đéçļàŕéđ, ƃéçàüšé ñö
çöṽéŕàĝé ţĥŕéšĥöļđ ḿàķéš à ţŕàñšļàţîöñ öƒ à ŕéŵŕîţţéñ šéñţéñçé šĥîþþàƃļé. Ţĥé
ñéẋţ kapi up ŕé-đŕàƒţš îţ àĝàîñšţ ţĥé çüŕŕéñţ šöüŕçé (þŕîçéđ îñ --plan, àñđ
ŕéþöŕţéđ àš à ŕé-đŕàƒţ îñ ţĥé ŕüñ šüḿḿàŕý) àñđ ļéàṽéš îţ üñ-àþþŕöṽéđ ƒöŕ ŕéṽîéŵ.
Ŕéšţöŕé ţĥé šöüŕçé ƃéƒöŕé ţĥàţ ŕüñ àñđ îţ çöñṽéŕĝéš ƃàçķ öñ ţĥé đéçîšîöñ
àļŕéàđý ŕéçöŕđéđ; ñöƃöđý ŕé-ŕéṽîéŵš àñýţĥîñĝ.
Đéçîšîöñš ŕéçöŕđéđ ƃéƒöŕé ţĥé ƃàšîš ŵàš ţŕàçķéđ çàŕŕý ñöñé. Šüçĥ à üñîţ îš
üñķñöŵñ ŕàţĥéŕ ţĥàñ šţàļé: îţ ķééþš îţš ŕüñĝ àñđ šĥîþš àš ƃéƒöŕé, àñđ kapi status
ŕéþöŕţš ĥöŵ ḿàñý ţĥéŕé àŕé šö ţĥé àššüḿþţîöñ îš ṽîšîƃļé. Đéçîđîñĝ ţĥé üñîţ àĝàîñ
ŕéçöŕđš à ƃàšîš.
Àñ àþþŕöṽàļ ƃîñđš ţö ţĥé þàîŕîñĝ îţ ƃļéššéš (ţĥé ţŕàñšļàţîöñ, àñđ ţĥé šöüŕçé îţ ŵàš àþþŕöṽéđ ƒöŕ): éđîţ éîţĥéŕ àñđ ţĥé üñîţ ƒàļļš ƃéļöŵ ŕéṽîéŵéđ üñţîļ šöḿéöñé àþþŕöṽéš ţĥé ñéŵ þàîŕ.
Ţĥé šĥàŕđš àŕé çöḿḿîţţéđ ŵîţĥ ýöüŕ šöüŕçéš, šö ţĥé ŕéçöŕđ ţŕàṽéļš ŵîţĥ ţĥé þŕöĵéçţ (à šéŕṽéŕ-çöññéçţéđ þŕöĵéçţ þüšĥéš îţ ţö ţĥé ŕéḿöţé îñšţéàđ, ŵĥéŕé þàŕķéđ üñîţš éñţéŕ ţĥé ţéàḿ'š àššîĝñḿéñţ àñđ ŕéṽîéŵ ǫüéüé).
Ţĥîš îš đîšţîñçţ ƒŕöḿ ţĥé çöñţéñţ ḿéḿöŕý: kapi apply ŵîţĥ kind:"memory" àđđš à
šöüŕçé→ţàŕĝéţ þàîŕ ţö ţĥé ŕéçýçļé çöŕþüš (defaults.memory_source) ƒöŕ ƒüţüŕé
ļéṽéŕàĝé àñđ ñéṽéŕ þŕöḿöţéš à üñîţ ţö ŕéṽîéŵéđ.
Ŕüñ ţĥé ļööþ ýöüŕšéļƒ: ţĥîš îš ţĥé ŕéàļ kapi çöḿþîļéđ ţö ŴéƃÀššéḿƃļý, ŵöŕķîñĝ öñ
àñ îñ-ḿéḿöŕý þŕöĵéçţ. status šĥöŵš ţĥé ţŕàñšļàţéđ-ƃüţ-üñŕéṽîéŵéđ šţàţé,
status --review ļîšţš ţĥé ŵöŕķļîšţ, apply ŕéçöŕđš ţĥé üñîţ šţàţé îñ ţĥé
þŕöĵéçţ šţöŕé, àñđ ţĥé çļöšîñĝ status šĥöŵš ŕéṽîéŵéđ çļîḿƃ:
Ļöàđîñĝ ţĥé ŵàļķţĥŕöüĝĥ…
À šéçöñđ, öþţîöñàļ ĥüḿàñ ĝàţé šîţš àƃöṽé ŕéṽîéŵ: šîĝñéđ-öƒƒ, à ƒîñàļ àþþŕöṽàļ
ƒöŕ çöñţéñţ ţĥàţ ñééđš îţ (à çöñţŕàçţüàļ ļöçàļé, à ŕéĝüļàţéđ šţŕîñĝ). Îţ îš ţĥé
šàḿé çöŕŕéçţîöñ ŵîţĥ à signed-off ŕéṽîéŵ šţàţé, ţĥé ţöþ ŕüñĝ à
{ signed-off: … } ĝàţé ḿéàšüŕéš:
kapi apply <<<'{"kind":"review","file":"src/locales/nb/messages.json","id":"app.save","locale":"nb","status":"signed-off"}'
Šéé àļšö Ŵĥéŕé ţŕàñšļàţîöñš & ţéŕḿš ļîṽé ƒöŕ ţĥé ḿéḿöŕý àñđ ţéŕḿš ḿöđéļ, àñđ Ķééþ šöüŕçé öñ ƃŕàñđ ƒöŕ ţĥé šöüŕçé-šîđé çĥéçķš ţĥàţ đŕîṽé ţĥé àüţĥöŕîñĝ ļàđđéŕ.