Šķîþ ţö ḿàîñ çöñţéñţ

Ţĥé ķàþî ļööþ

Ýöüŕ šöüŕçé çöñţéñţ çĥàñĝéđ, šö îţš ţŕàñšļàţîöñš, ţéŕḿîñöļöĝý çĥéçķš àñđ ṽöîçé çĥéçķš àŕé ƃéĥîñđ. Îñ à þŕöĵéçţ ţĥàţ šĥîþš, ţĥîš îš ţĥé éṽéŕýđàý šţàţé, àñđ ķàþî ĥàš öñé çöḿḿàñđ ƒöŕ çàţçĥîñĝ üþ: kapi up.

kapi up ŕüñš ţĥé ķàþî ļööþ. Ţĥé ļööþ ĥàš ţŵö ĥàļṽéš ŵîţĥ à ĝàţé ƃéţŵééñ ţĥéḿ. Ţĥé ƒîŕšţ ĥàļƒ ĝéţš ţĥé šöüŕçé ŕîĝĥţ: îţ ŕüñš ţĥé ṽöîçé àñđ ţéŕḿîñöļöĝý çĥéçķš öñ ŵĥàţ ýöü ŵŕöţé àñđ ĥöļđš üñţîļ ţĥé šöüŕçé çļéàŕš îţš ƃàŕ. Ţĥé šéçöñđ ĥàļƒ çàţçĥéš éṽéŕý ļàñĝüàĝé üþ ţö ţĥàţ šöüŕçé. Îţ ŕéüšéš ŵĥàţ ýöü'ṽé ţŕàñšļàţéđ ƃéƒöŕé, ţŕàñšļàţéš ţĥé ŕéšţ ŵîţĥ ÀÎ àñđ çĥéçķš ŵĥàţ îţ þŕöđüçéđ. Ţĥé šöüŕçé çöḿéš ƒîŕšţ ƃéçàüšé à đéƒéçţ îñ ţĥé šöüŕçé îš çöþîéđ îñţö éṽéŕý ţàŕĝéţ ļàñĝüàĝé. Ŵĥàţ à ḿàçĥîñé çàññöţ đéçîđé ŵàîţš ƒöŕ ŕéṽîéŵ ƃý à þéŕšöñ, àñđ kapi up šţîļļ ƒîñîšĥéš. À ḿöñöļîñĝüàļ þŕöĵéçţ šţöþš àƒţéŕ ţĥé ƒîŕšţ ĥàļƒ.

Ýöü đéçļàŕé ŵĥàţ çàüĝĥţ üþ ḿéàñš îñ ţĥé ŕéçîþé: ţĥé ţàŕĝéţ ļàñĝüàĝéš, ţĥé ƒļöŵ ţĥàţ þŕöđüçéš ţĥéḿ àñđ ţĥé ĝàţéš à ļàñĝüàĝé ḿüšţ çļéàŕ ţö šĥîþ. Éṽéŕý ŕüñ çöḿþàŕéš ţĥé ŵöŕķîñĝ ţŕéé ŵîţĥ ţĥàţ đéçļàŕàţîöñ àñđ çļöšéš ŵĥàţ îţ çàñ.

Ţĥŕéé ŕöļéš, ķéþţ šéþàŕàţé:

  • Ţĥé ļööþ þŕöđüçéš: kapi up đŕîṽéš éàçĥ ƃļöçķ àš ƒàŕ üþ îţš ļîƒéçýçļé àš à ƒļöŵ çàñ ţàķé îţ üñàîđéđ (ţýþîçàļļý ţö ţŕàñšļàţéđ).
  • Ŕéṽîéŵ þŕöḿöţéš: à þéŕšöñ àđṽàñçéš à ƃļöçķ þàšţ ŵĥàţ à ḿàçĥîñé çàñ đéçîđé (ţŕàñšļàţéđ → àþþŕöṽéđ).
  • Ţĥé ĝàţé ŕéļéàšéš: îţ çĥàñĝéš ñö çöñţéñţ. Îţ àñšŵéŕš öñé ǫüéšţîöñ: îš ţĥîš ļöçàļé šĥîþþàƃļé?

:::ñöţé[Ţĥé ƒöŕḿàļ ñàḿé] Ţĥé ḿöđéļ ƃéĥîñđ ţĥé ļööþ (đéŕîṽéđ šţàţé, ţĥé ļîƒéçýçļé ļàđđéŕš, çöṽéŕàĝé ĝàţéš) îš çàļļéđ çöñṽéŕĝéñçé: éàçĥ kapi up þàšš çöñṽéŕĝéš ţĥé ŵöŕķîñĝ ţŕéé öñ ţĥé šţàţé ţĥé ŕéçîþé đéçļàŕéš, ţĥé ŵàý terraform apply çöñṽéŕĝéš îñƒŕàšţŕüçţüŕé öñ à þŕöĝŕàḿ. Ţĥé àŕçĥîţéçţüŕé þàĝéš, ţĥé ŕüñ'š éṽéñţ šţŕéàḿ, àñđ ţĥé --json öüţþüţ ķééþ ţĥàţ ṽöçàƃüļàŕý; ţĥéšé þàĝéš šàý ţĥé ļööþ. :::

Šţàţé îš đéŕîṽéđ​

Ķàþî šţöŕéš ñö ŵöŕķƒļöŵ šţàţé, šüçĥ àš "îñ þŕöĝŕéšš" ƒļàĝš öŕ çüŕšöŕš. Éṽéŕý çöḿḿàñđ ŕéçöḿþüţéš à ƃļöçķ'š šţàţé ƒŕöḿ ţĥé çöñţéñţ öñ đîšķ àñđ ţĥé þŕöĵéçţ'š àššéţš, ţĥé ŵàý git status ŕéçöḿþüţéš ƒŕöḿ ţĥé ŵöŕķîñĝ ţŕéé. Ŕüñ à çöḿḿàñđ ţŵîçé ŵîţĥ ñö çĥàñĝéš àñđ ýöü ĝéţ ţĥé šàḿé àñšŵéŕ. Çĥàñĝé à šöüŕçé ƒîļé àñđ ţĥé àƒƒéçţéđ ƃļöçķš ƒàļļ ƃàçķ ţö þéñđîñĝ.

Šţàţé îš ķéþţ þéŕ éđîţîöñ: öñé ţŕàñšļàţàƃļé ƃļöçķ îñ öñé ļàñĝüàĝé.

Ţĥé ļîƒéçýçļé ļàđđéŕš​

À ţàŕĝéţ çļîḿƃš à ḿöñöţöñé ļàđđéŕ: éàçĥ ŕüñĝ îḿþļîéš ţĥé öñéš ƃéļöŵ îţ. Àñ àƃšéñţ ţàŕĝéţ šîţš ƃéļöŵ ţĥé ļöŵéšţ ŕüñĝ; à þŕéšéñţ, ñöñ-éḿþţý ţàŕĝéţ îš àţ ļéàšţ ţŕàñšļàţéđ.

1drafta machine placeholder, or a target whose source has moved2translateda real translation exists and passes its checks3approveda person reviewed or edited this exact pair

Ţàŕĝéţ ļîƒéçýçļé: ĥöŵ ƒàŕ à ţŕàñšļàţîöñ ĥàš þŕöĝŕéššéđ.

Šöüŕçé çöñţéñţ ĥàš îţš öŵñ, šĥöŕţéŕ ļàđđéŕ:

1writtensource content exists2approveda person reviewed the source

Šöüŕçé àüţĥöŕîñĝ ŕéàđîñéšš: ţĥé šöüŕçé-šîđé çöüñţéŕþàŕţ.

Ţĥé ŕéçîþé àñđ ţĥé ĴŠÖÑ ŕéþöŕţš šþéļļ ţĥé àþþŕöṽéđ ŕüñĝ established, šö à ĝàţé ţĥŕéšĥöļđ öñ îţ ŕéàđš established: 80.

Ŵĥéŕé šţàţé îš ŕéçöŕđéđ đéþéñđš öñ ţĥé ƒîļé ţĥàţ çàŕŕîéš îţ. À þļàîñ ţàŕĝéţ ƒîļé (ĴŠÖÑ, àñ ẊĻÎƑƑ, …) ŕéçöŕđš öñļý ţĥàţ à ţàŕĝéţ îš þŕéšéñţ, šö à ƒîļé-ƃàšéđ þŕöĵéçţ ŕéàđš à þŕéšéñţ ţàŕĝéţ àš ţŕàñšļàţéđ. Ţĥé ĥîĝĥéŕ ŕüñĝš ñééđ à çàŕŕîéŕ ţĥàţ çàñ ĥöļđ ţĥéḿ. Àþþŕöṽéđ çöḿéš ƒŕöḿ àñ àþþŕöṽàļ ŕéçöŕđéđ îñ ţĥé þŕöĵéçţ'š ƃļöçķ-šţàţé ŕéçöŕđ (ƃéļöŵ), àñđ à .kpz þàŕçéļ çàŕŕîéš ţĥé ƒüļļ šţàţüš àçŕöšš à ĥàñđ-öƒƒ.

Ţĥé ĝàţé: çöṽéŕàĝé ţĥŕéšĥöļđš​

À ĝàţé îš à šéţ öƒ çöṽéŕàĝé ţĥŕéšĥöļđš öṽéŕ ţĥé ļàđđéŕ: à šţàţé ñàḿé ţö à ḿîñîḿüḿ þéŕçéñţ. À ļöçàļé çļéàŕš à ĝàţé ŵĥéñ, ƒöŕ éṽéŕý ţĥŕéšĥöļđ, àţ ļéàšţ ţĥàţ þéŕçéñţ öƒ îţš ƃļöçķš ĥàṽé ŕéàçĥéđ ţĥàţ ŕüñĝ öŕ ĥîĝĥéŕ.

# kapi.yaml
ship_gate: { translated: 100, established: 80 }

Ţĥîš ŕéàđš "éṽéŕý ƃļöçķ ţŕàñšļàţéđ, àñđ ţĥé îḿþöŕţàñţ 80% àþþŕöṽéđ; šĥîþ ţĥé ļöñĝ ţàîļ ḿàçĥîñé-ţŕàñšļàţéđ." À ƃàŕé 100% approved îš ţĥé šţŕîçţéšţ ƒöŕḿ.

Ĝàţéš çàñ ƃé šéļéçţéđ ƃý ŕüļé, šö đéŕéñţ çöļļéçţîöñš öŕ ļöçàļéš àñšŵéŕ ţö đéŕéñţ ƃàŕš (ţĥé ḿöšţ šþéçîƒîç ḿàţçĥîñĝ ŕüļé ŵîñš). Ŵĥéŕé à ŕüļé ñàḿéš à çöļļéçţîöñ, éàçĥ çöļļéçţîöñ îñ à ļöçàļé îš ĵüđĝéđ öñ îţš öŵñ:

ship_gates:
- when: { locales: [de] } # German is contractually reviewed
gate: { translated: 100, established: 100 }
- gate: { translated: 100, established: 80 } # the default

Ţĥé šöüŕçé ļàđđéŕ ĥàš îţš öŵñ öþţîöñàļ ƃàŕ, source_gate (é.ĝ. { written: 100 }), ţĥé šöüŕçé-šîđé çöüñţéŕþàŕţ öƒ ship_gate.

À ĝàţé ñéṽéŕ ƒàîļš àñ öŕđîñàŕý ƃüîļđ. Ţàŕĝéţ-ļàñĝüàĝé đŕîƒţ îš éẋþéçţéđ ŵöŕķ. À ĝàţé îš à ŕéļéàšé çĥéçķ ýöü öþţ îñţö (šéé ƃéļöŵ).

Šĥîþ šţàţéš​

À ļöçàļé ţĥàţ šĥîþš îš ñàḿéđ ƃý ţĥé ļàđđéŕ ŕüñĝ îţ šĥîþš àţ. À ļöçàļé ţĥàţ đöéš ñöţ šĥîþ îš ŵîţĥĥéļđ:

ŠţàţéŴĥàţ îţ ḿéàñš
àþþŕöṽéđŢĥé ļöçàļé çļéàŕš îţš àþþŕöṽàļ ĝàţé (established_gate / established_gates): à þéŕšöñ àþþŕöṽéđ ţĥé çöñţéñţ.
ţŕàñšļàţéđŢĥé ļöçàļé çļéàŕš îţš šĥîþ ĝàţé àñđ ñö àþþŕöṽàļ ĝàţé: ţŕàñšļàţéđ, ŵîţĥ îţš çĥéçķš ĝŕééñ, àñđ šĥîþþéđ àš ÀÎ ţŕàñšļàţîöñ.
ŵîţĥĥéļđŢĥé ļöçàļé đöéš ñöţ šĥîþ. Îţ îš šĥöŕţ öƒ îţš ĝàţé, öŕ îţ ĥöļđš šţàļé ŵöŕđîñĝ, à ţŕàñšļàţîöñ à ŕéṽîéŵéŕ ţüŕñéđ đöŵñ, à ƒàîļîñĝ çĥéçķ, öŕ ţéŕḿš ţĥàţ ŵéŕé ñöţ çĥéçķéđ. Ţĥéšé ĥöļđ à ļöçàļé ƃàçķ éṽéñ ŵĥéñ ñö ĝàţé ḿàţçĥéš îţ.
ñöţ ĝàţéđÑö ĝàţé ḿàţçĥéš ţĥé ļöçàļé, àñđ ñöţĥîñĝ ŵîţĥĥöļđš îţ.

Ýöü çĥööšé ŵĥàţ à þŕöĵéçţ đéļîṽéŕš ŵîţĥ îţš šĥîþ ĝàţé: { translated: 100 } đéļîṽéŕš ţŕàñšļàţéđ çöñţéñţ, { established: 100 } öñļý àþþŕöṽéđ çöñţéñţ. À þŕöĵéçţ ŵîţĥ ñö ĝàţéš ĥàš öñļý ŵîţĥĥéļđ àñđ ñöţ-ĝàţéđ ļöçàļéš, àñđ à kapi up ŕüñ ţĥàţ çöñṽéŕĝéš ŕéþöŕţš ţĥàţ ñö šĥîþ ĝàţéš àŕé đéçļàŕéđ. À ļàñĝüàĝé þîçķéŕ öƒƒéŕš à ñöţ-ĝàţéđ ļöçàļé ƃý đéƒàüļţ.

Ŵĥö àþþŕöṽéš à ƃļöçķ​

Àþþŕöṽéđ îš ţĥé öñé ĥüḿàñ ŕüñĝ: à þéŕšöñ ŕéṽîéŵéđ öŕ éđîţéđ ţĥîš éẋàçţ ţŕàñšļàţîöñ. Àñ àĝéñţ çàñ þŕé-ŕéṽîéŵ à ƃļöçķ ŵîţĥ à šçöŕé àñđ îţš ŕéàšöñš, àñđ ţĥé ŕéṽîéŵ ǫüéüé šĥöŵš ţĥéḿ. Àñ àĝéñţ'š ĵüđĝéḿéñţ ñéṽéŕ çöüñţš àš à þéŕšöñ'š, šö éṽéŕý established ţĥŕéšĥöļđ çöüñţš þéöþļé. Ĝàţéš çàñ šţîļļ đéŕ ƃý ļöçàļé àñđ çöļļéçţîöñ, šö ýöü çàñ ŕüñ šéṽéŕàļ ţîéŕš šîđé ƃý šîđé:

gates:
contractual: { translated: 100, established: 100 }
standard: { translated: 100, established: 80 }
machine: { translated: 100 }

ship_gates:
- when: { locales: [de] } # contractual market: a person approves every block
gate: contractual
- when: { locales: [fr, es] }
gate: standard
- gate: machine # the long tail: translated, with its checks green

Ţĥé ƒüļļ šçĥéḿà (ţĥŕéšĥöļđ ƒöŕḿš, ŕüļé šéļéçţîöñ, ţĥé ñàḿéđ ŕéĝîšţŕý) îš îñ ţĥé þŕöĵéçţ-ƒîļé ŕéƒéŕéñçé; à ŵöŕķéđ þéŕ-ḿàŕķéţ šţŕàţéĝý îš Ţîéŕ ĝàţéš þéŕ ḿàŕķéţ.

Šöüŕçé ƒîŕšţ: šéţţļé, ĝàţé, ţĥéñ ţŕàñšļàţé​

Ţĥé ţŵö ļàđđéŕš ŕüñ îñ öŕđéŕ, ŵîţĥ ţĥé šöüŕçé ĥöļđ ƃéţŵééñ ţĥéḿ. Éṽéŕý ļöçàļé ţŕàñšļàţéš ţĥé šàḿé šöüŕçé. À ţéŕḿ ļéƒţ üñŕéšöļṽéđ öŕ à šéñţéñçé ļéƒţ öƒƒ-ƃŕàñđ îš þàîđ ƒöŕ öñçé þéŕ ļàñĝüàĝé, ţĥéñ àĝàîñ ŵĥéñ ýöü ƒîẋ ţĥé šöüŕçé àñđ éṽéŕýţĥîñĝ îš ŕéţŕàñšļàţéđ. Ţĥé ļööþ šéţţļéš ţĥé šöüŕçé öñçé àñđ šţàŕţš ţĥé þéŕ-ļàñĝüàĝé ŵöŕķ öñļý ŵĥéñ ţĥé šöüŕçé îš ŕéàđý.

settle sourceterm-check + protectvoice checksource checkssource holdtranslate_afterhold: settle your source firsttranslate approved sourcerecycle (memory-first)AI remaindertarget checkstarget ship-gateship_gatewait: needs reviewconverged

Šéţţļé ţĥé šöüŕçé, ĥöļđ îţ üñţîļ îţ ŕéàçĥéš ţŕàñšļàţé_àƒţéŕ, ţĥéñ ţŕàñšļàţé ţĥé àþþŕöṽéđ šöüŕçé þéŕ ļöçàļé; éàçĥ ĝàţé ĥöļđš ƃàçķ ŵöŕķ ţĥàţ îš ñöţ ŕéàđý.

Ŕéàđ ţĥé ļööþ ļéƒţ ţö ŕîĝĥţ:

  1. Šéţţļé ţĥé šöüŕçé. Çĥéçķ ţéŕḿîñöļöĝý àñđ ḿàŕķ ţĥé ţéŕḿš ţĥàţ ḿüšţ ñöţ ƃé ţŕàñšļàţéđ, çĥéçķ ṽöîçé þŕöƒîļé, ŕüñ ţĥé šöüŕçé çĥéçķš. Ţĥîš ļîƒţš šöüŕçé ƃļöçķš öñţö ţĥéîŕ ļàđđéŕ (ŵŕîţţéñ → àþþŕöṽéđ) àñđ ḿàŕķš àñý ţĥàţ ƒàîļ.
  2. Ĥöļđ ţĥé šöüŕçé. defaults.translate_after (written ƃý đéƒàüļţ, öŕ established ƒöŕ àþþŕöṽéđ šöüŕçé) îš ţĥé ļéṽéļ éàçĥ ƃļöçķ'š šöüŕçé ḿüšţ ŕéàçĥ ƃéƒöŕé îţ îš ţŕàñšļàţéđ. À ƃļöçķ ƃéļöŵ îţ ĥöļđš. Ḿàçĥîñé-ţŕàñšļàţîñĝ çöñţéñţ ýöü àŕé àƃöüţ ţö çĥàñĝé çöšţš ḿöŕé ţĥàñ šéţţļîñĝ îţ ƒîŕšţ.
  3. Ţŕàñšļàţé ţĥé àþþŕöṽéđ šöüŕçé. Öñļý šéţţļéđ šöüŕçé îš ţŕàñšļàţéđ, þéŕ ļöçàļé àñđ ƒŕöḿ ţĥé çöñţéñţ ḿéḿöŕý ƒîŕšţ: ŕéçýçļé ŵĥàţ ýöü ĥàṽé àļŕéàđý ţŕàñšļàţéđ, ÀÎ-ţŕàñšļàţé ţĥé ŕéḿàîñđéŕ, çĥéçķ ŵĥàţ ŵàš þŕöđüçéđ. Ŵĥéñ à šöüŕçé ŵàš éđîţéđ, ţĥé ţŕàñšļàţîöñ à þéŕšöñ àþþŕöṽéđ ƒöŕ ţĥé éàŕļîéŕ ŵöŕđîñĝ ĝöéš îñţö ţĥé þŕöḿþţ àš ŕéƒéŕéñçé, üñđéŕ ţĥé šàḿé ĝöṽéŕñîñĝ çöñţéẋţ. Ţĥé ŕéđŕàƒţ ķééþš ţĥàţ àççéþţéđ ŵöŕđîñĝ ŵĥéŕé îţ šţîļļ ƒîţš. Þŕöţéçţéđ ţéŕḿš šţàý þŕöţéçţéđ.
  4. Ĥöļđ àţ ţĥé ţàŕĝéţ šĥîþ-ĝàţé. À ļöçàļé ţĥàţ çļéàŕš îţš ship_gate îš šĥîþþàƃļé. Ŵĥàţéṽéŕ à ḿàçĥîñé çàññöţ đéçîđé ŵàîţš ƒöŕ ŕéṽîéŵ àñđ đöéš ñöţ šĥîþ.

À ĝàţé ñéṽéŕ ƒàîļš. Îţ ĥöļđš ŵöŕķ àñđ ŕöüţéš îţ ţö à þéŕšöñ, ţĥŕöüĝĥ ţĥé šöüŕçé-ŕéṽîéŵ ŵöŕķļîšţ öŕ ţĥé ţàŕĝéţ ŕéṽîéŵ ǫüéüé, àñđ ţĥé çöḿḿàñđ šţîļļ éẋîţš žéŕö. Éđîţîñĝ à šöüŕçé ƃļöçķ ŕé-öþéñš ţĥé ĥöļđ ƒöŕ ţĥé çĥàñĝéđ šéĝḿéñţš öñļý, šö à ƒîẋ ŕé-šéţţļéš àñđ ŕé-ţŕàñšļàţéš ţĥöšé šéĝḿéñţš àñđ ļéàṽéš ţĥé ŕéšţ öƒ ţĥé çöŕþüš àļöñé.

Šééîñĝ îţ: status àñđ check​

kapi status îš ţĥé đéŕîṽéđ đàšĥƃöàŕđ: çöṽéŕàĝé þéŕ ļöçàļé àñđ éàçĥ ļöçàļé'š šţàñđîñĝ àĝàîñšţ îţš ĝàţé, ŕéçöḿþüţéđ öñ éṽéŕý ŕüñ:

kapi status
# source 2 blocks · written 100% · approved 0%
#
# locale blocks draft translated approved progress ship
# de 42 100% 100% 80% ██████████ 100% translated
# nb 42 100% 60% 0% ███░░░░░░░ 30% blocked: translate
#
# 1 of 2 ready to ship

À þŕöĵéçţ çöññéçţéđ ţö à çöñṽéŕĝéñçé ṽéñüé ĝéţš ţŵö ḿöŕé ļîñéš, àñđ ţĥéý àñšŵéŕ đéŕéñţ ǫüéšţîöñš. Çöñţéñţ îš à þöšîţîöñ: ŵĥàţ îš ĥéŕé àñđ ŵĥàţ îš ţĥéŕé. À ţŕàñšƒéŕ ŕéšöļṽéš îţ. Ĝöṽéŕñàñçé îš àñ îđéñţîţý: ŵĥîçĥ çöñţéẋţ, ţéŕḿš àñđ đéçîšîöñš àŕé îñ ƒöŕçé. Ŵĥéñ ţŵö îđéñţîţý ĥàšĥéš đéŕ, ţĥéý šàý ñöţĥîñĝ àƃöüţ đîšţàñçé öŕ đîŕéçţîöñ. Ţĥé ļîñé ŕéþöŕţš ţĥàţ à çöḿþöñéñţ ḿöṽéđ, àñđ ýöü ĵüđĝé ŵĥàţ ţĥàţ ḿéàñš ƒöŕ ŵöŕķ àļŕéàđý ŵŕîţţéñ.

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 # run the default flow; stop where a gate holds content back
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
producekapi up: default flow over pending blockseach pass re-derivescoverage and repeatsa person / agentpromotekapi apply: decide approves a blockgate metreleasekapi check --ship: the gate

Þŕöđüçé ļööþš ţö ţĥé ĝàţé; ŕéṽîéŵ þŕöḿöţéš ŵĥàţ à ḿàçĥîñé çàñ'ţ đéçîđé; ţĥé ĝàţé ŕéļéàšéš.

Éàçĥ þàšš ŕé-đéŕîṽéš çöṽéŕàĝé ƒŕöḿ ţĥé ŵöŕķîñĝ ţŕéé, ŕüñš ţĥé ƒļöŵ öñļý ƒöŕ ţĥé ļöçàļéš šţîļļ šĥöŕţ öƒ ţĥéîŕ ĝàţé, ţĥéñ ŕüñš ţĥé þŕöĵéçţ'š ƃöüñđ çĥéçķš öṽéŕ ŵĥàţ ŵàš þŕöđüçéđ. À ƃļöçķ ŵîţĥ ƒàîļîñĝ ƒîñđîñĝš (đŕöþþéđ þļàçéĥöļđéŕš, ţéŕḿîñöļöĝý ṽîöļàţîöñš) šţîļļ çöüñţš àš ţŕàñšļàţéđ, àñđ ţĥé ƒîñđîñĝ ķééþš îţš ļöçàļé ƒŕöḿ šĥîþþîñĝ üñţîļ îţ îš ƒîẋéđ. Ţĥé þéŕçéñţàĝéš đéšçŕîƃé ţĥé çöñţéñţ. Ţĥé ṽéŕđîçţ šàýš ŵĥàţ à çĥéçķ ŵîţĥĥöļđš, àñđ kapi status àñđ kapi status --ship ŕüñ ţĥé šàḿé çĥéçķš àñđ ŕéàçĥ ţĥé šàḿé ṽéŕđîçţ. Ţĥé ļööþ šţöþš ŵĥéñ éṽéŕý ĝàţéđ ļöçàļé îš šĥîþþàƃļé, ŵĥéñ à þàšš ḿàķéš ñö þŕöĝŕéšš, öŕ ŵĥéñ îţ ŕéàçĥéš ţĥé þàšš çàþ (đéƒàüļţ 5, --passes N). Ŵĥàţéṽéŕ çàññöţ ƃé àđṽàñçéđ üñàîđéđ ŵàîţš ƒöŕ ŕéṽîéŵ: îţ îš ŕéþöŕţéđ àš àŵàîţîñĝ à þéŕšöñ àñđ ţĥé çöḿḿàñđ šţîļļ éẋîţš žéŕö. up ñéṽéŕ ƒàîļš ţĥé ƃüîļđ öñ ţàŕĝéţ đŕîƒţ. Ţĥé ŵöŕķ ŵàîţîñĝ ƒöŕ ŕéṽîéŵ îš ţĥé ŕéṽîéŵ ǫüéüé.

Üñđéŕ materialize: on-converge à ļàñĝüàĝé ŵàîţîñĝ ƒöŕ ŕéṽîéŵ ĝéţš ñö ƒîļéš. Îţš đŕàƒţš àŕé ķéþţ îñ ţĥé þŕöĵéçţ'š ŵöŕķšþàçé, öüţšîđé ţĥé çĥéçķöüţ. kapi status, ţĥé ŕéṽîéŵ ŵöŕķļîšţ, kapi inspect, kapi apply àñđ Ķàþî Đéšķţöþ'š ŕéṽîéŵ þàñé àļļ ŕéàđ àñđ éđîţ ţĥéḿ ţĥéŕé. Àñ éđîţ ţö à ļàñĝüàĝé ţĥàţ ĥàš ñö ƒîļé ýéţ îš ķéþţ ţĥéŕé ţöö, šö ñö éđîţ đéļîṽéŕš à ƒîļé ţĥé ĝàţé ŵîţĥĥöļđš. Ţĥé đŕàƒţš ŕéàçĥ ţĥé ļàñĝüàĝé'š ƒîļéš ŵĥéñ ţĥé ļàñĝüàĝé îš đéļîṽéŕéđ: ƃý ţĥé ŕüñ îñ ŵĥîçĥ îţ çļéàŕš îţš ĝàţé, öŕ ƃý kapi merge. Đéļéţîñĝ .kapi/work/ ļöšéš ñöñé öƒ ţĥéḿ, àñđ à þŕöĵéçţ ţĥàţ šĥàŕéš îţš çöñţéẋţ šĥàŕéš ţĥéḿ ţöö.

À ļàñĝüàĝé'š ƒîļé çàñ àļšö àþþéàŕ àñöţĥéŕ ŵàý: ýöü ŵŕîţé îţ, kapi pull öŕ à çĥéçķöüţ ƃŕîñĝš îţ, öŕ ýöü šŵîţçĥ ţĥé ŕéçîþé ţö materialize: manual àñđ à þàšš ŵŕîţéš îţ. Ƒŕöḿ ţĥéñ öñ, ţĥé ƒîļé ĥöļđš ţĥé ļàñĝüàĝé. Ţĥé ñéẋţ kapi up đŕöþš ţĥé ķéþţ đŕàƒţš ţĥé ƒîļé šüþéŕšéđéš àñđ ķééþš àñý ŵöŕđîñĝ à þéŕšöñ öŕ àñ àĝéñţ ŵŕöţé ţĥàţ ţĥé ƒîļé đöéš ñöţ ĥöļđ; kapi status ļîšţš ţĥàţ ŵöŕđîñĝ, àñđ kapi merge ŵŕîţéš îţ îñţö ţĥé ƒîļé.

Ƃéƒöŕé éàçĥ þàšš, up ŕé-šýñçš ţĥé þŕöĵéçţ ƃļöçķ šţöŕé ŵîţĥ ţĥé ŵöŕķîñĝ ţŕéé: éđîţéđ šöüŕçé ƒîļéš, à šţöŕé ŵŕîţţéñ ƃý àñöţĥéŕ ķàþî ṽéŕšîöñ, öŕ à ḿîššîñĝ šţöŕé ţŕîĝĝéŕ à ŕé-éẋţŕàçţîöñ. --no-extract öþţš öüţ; --no-checks šķîþš ţĥé ƃöüñđ çĥéçķš îñ ţĥé ļööþ.

Ţĥé ŕüñ îš ļîṽé​

up šţàŕţš ƃý þŕîñţîñĝ à öñé-ļîñé þļàñ: ţĥé ƃļöçķš ţĥé þàšš ŵîļļ ŵöŕķ öñ, éẋàçţ çöñţéñţ-ḿéḿöŕý ļéṽéŕàĝé, ŕéḿàîñîñĝ ÀÎ ŵöŕķ, à ţöķéñ éšţîḿàţé àñđ ţĥé þŕöṽîđéŕ îţ ŵîļļ üšé. Ýöü šéé ţĥé çöšţ ƃéƒöŕé àñý ţöķéñš àŕé šþéñţ. --plan àļöñé þŕîñţš ţĥé ƒüļļ đŕý-ŕüñ ţàƃļé. Ŵĥîļé ţĥé ļööþ ŕüñš, up þŕîñţš öñé ļîñé þéŕ ļöçàļé, ŕéþàîñţéđ îñ þļàçé öñ à ţéŕḿîñàļ, öŕ öñé ļîñé þéŕ éṽéñţ öñ à þļàîñ šţŕéàḿ.

Ţĥé þļàñ þŕîçéš ţĥé ƒļöŵ ţĥé þàšš ŵöüļđ ŕüñ. À þàšš ŕéàđš ţĥé šöüŕçé đöçüḿéñţš, ƒîļļš ƒŕöḿ ţĥé çöñţéñţ ḿéḿöŕý ŵĥéŕé ţĥé ƒļöŵ ŕéçýçļéš, àñđ đŕàƒţš ţĥé ŕéḿàîñđéŕ ŵĥéŕé ţĥé ƒļöŵ đŕàƒţš. À ƃļöçķ çöšţš à þŕöṽîđéŕ çàļļ ŵĥéñ ţĥé çöŕþüš ĥàš ñö àñšŵéŕ ƒöŕ îţš šöüŕçé àñđ ţĥé çöñƒîĝüŕéđ ƒļöŵ ŕéàçĥéš à þŕöṽîđéŕ, ŵĥàţéṽéŕ à ţàŕĝéţ ƒîļé ĥöļđš. À ƒļöŵ ţĥàţ öñļý ŕéçýçļéš ļéàṽéš ţĥé ƃļöçķš ţĥé çöŕþüš çàññöţ àñšŵéŕ öüţ öƒ ŕéàçĥ. Ţĥé þļàñ ŕéþöŕţš ţĥéḿ ŵîţĥöüţ à þŕîçé, ƃéçàüšé ţĥàţ ŕüñ ŵîļļ ñöţ ţöüçĥ ţĥéḿ öŕ çàļļ à þŕöṽîđéŕ. Ţĥé þļàñ ļîšţš ţĥŕéé ķîñđš öƒ ŵöŕķ šéþàŕàţéļý: ḿîššîñĝ ƃļöçķš, šţàļé öñéš (à đéçîšîöñ'š šöüŕçé ḿöṽéđ) àñđ üñàñšŵéŕéđ öñéš (à ţàŕĝéţ ţĥé ŕéçöŕđ đöéš ñöţ þàîŕ ŵîţĥ îţš šöüŕçé). Ţĥéý ḿéàñ đéŕéñţ ţĥîñĝš ţö ýöü, àñđ ţĥé ŕüñ þŕîçéš ţĥéḿ ţĥé šàḿé ŵàý.

Ţĥé þļàñ þŕîçéš öñļý ţĥé ļàñĝüàĝéš à þàšš ŵöŕķš öñ. Ţĥé ļööþ þàššéš öṽéŕ à ļàñĝüàĝé ŵĥîļé îţ ĥöļđš ŵöŕķ: à ƃļöçķ ŵîţĥ ñö ţŕàñšļàţîöñ, à šţàļé öŕ ŕéĵéçţéđ ƃļöçķ, à ƃļöçķ ƒàîļîñĝ ţĥé ƃöüñđ çĥéçķš, öŕ à ĝàţé ţĥé ļàñĝüàĝé đöéš ñöţ ḿééţ. À ļàñĝüàĝé ŵîţĥ ñöñé öƒ ţĥéšé ķééþš ŵĥàţ îţ ĥöļđš, šö îţš üñàñšŵéŕéđ ƃļöçķš çöšţ ñöţĥîñĝ ţĥîš ŕüñ àñđ ţĥé þļàñ ŕéþöŕţš ñöţĥîñĝ ţö đŕàƒţ ƒöŕ îţ.

À ƃļöçķ ţĥé þŕöĵéçţ šţöŕé àļŕéàđý ĥöļđš à đŕàƒţ ƒöŕ çöšţš ñöţĥîñĝ ƒüŕţĥéŕ. Ţĥé đŕàƒţîñĝ šţéþ çĥéçķš ţĥé šţöŕé ƃéƒöŕé îţ çàļļš à þŕöṽîđéŕ. Îţ ŕéüšéš à šţöŕéđ ţŕàñšļàţîöñ öƒ ţĥé šàḿé šöüŕçé ŵĥéñ ţĥàţ ţŕàñšļàţîöñ ŵàš ḿàđé üñđéŕ ţĥé çöñƒîĝüŕàţîöñ àñđ ĝöṽéŕñîñĝ çöñţéẋţ ţĥé šţéþ ŵöüļđ üšé ñöŵ. Ţĥé þļàñ çöüñţš šüçĥ à ƃļöçķ üñđéŕ šţöŕéđ đŕàƒţš àñđ ǫüöţéš ñö ţöķéñš ƒöŕ îţ. À ļàñĝüàĝé ĥéļđ ƃàçķ ƃý îţš ĝàţé ŕéàđš ţĥîš ŵàý öñ éṽéŕý ŕüñ àƒţéŕ ţĥé öñé ţĥàţ đŕàƒţéđ îţ, šö ýöü þàý ƒöŕ îţš đŕàƒţš öñçé. Ţĥé ŵöŕķšþàçé ķééþš éàçĥ đŕàƒţ ŵàîţîñĝ ƒöŕ ŕéṽîéŵ ţöĝéţĥéŕ ŵîţĥ ţĥé đéţàîļš ţĥé đŕàƒţîñĝ šţéþ ḿàţçĥéš öñ, šö à ŕüñ îñ à çĥéçķöüţ ŵĥöšé .kapi/work/ ŵàš đéļéţéđ ŕéüšéš ţĥéḿ àţ ñö çöšţ. À çĥàñĝéđ ḿöđéļ, þŕöḿþţ, ṽöîçé þŕöƒîļé öŕ ţéŕḿ ŕüļé, öŕ àñ éđîţéđ šéñţéñçé, þüţš ţĥé ƃļöçķ ƃàçķ üñđéŕ đŕàƒţéđ ƃý ƒļöŵ.

kapi up · KapiMart · flow "default (built-in)" · anthropic/claude-sonnet-4-6 (your subscription)
plan: 288 block(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

Not yet up to date: some languages wait for review (never a build failure).

Ļöçàļéš àŕé îñđéþéñđéñţ ŵîţĥîñ à þàšš, šö up çàţçĥéš ţĥéḿ üþ çöñçüŕŕéñţļý: --jobs N šéţš ĥöŵ ḿàñý ŕüñ àţ öñçé (đéƒàüļţ 4; ŕéçîþé öṽéŕŕîđé defaults.jobs; --jobs 1 ŕüñš ţĥéḿ öñé àţ à ţîḿé). Àţ ţĥé éñđ öƒ éàçĥ þàšš, ķàþî ŵàîţš ƒöŕ éṽéŕý ļöçàļé, ţĥéñ ŕé-đéŕîṽéš çöṽéŕàĝé, ŕüñš ţĥé çĥéçķš àñđ đéçîđéš ŵĥîçĥ ƃļöçķš ŵàîţ ƒöŕ ŕéṽîéŵ, öñçé ƒöŕ àļļ ļöçàļéš ţöĝéţĥéŕ.

fr-FRworkerrecycle from memoryAI translatebound checksde-DEworkerrecycle from memoryAI translatebound checksja-JPworkerrecycle from memoryAI translatebound checks

Ŵîţĥîñ öñé þàšš, ķàþî üþ ƒàñš öüţ þéŕ ļöçàļé (--ĵöƃš); ţĥé þàšš ƃàŕŕîéŕ ŕé-đéŕîṽéš çöṽéŕàĝé àñđ đéçîđéš ŵĥîçĥ ƃļöçķš ŵàîţ ƒöŕ ŕéṽîéŵ öñçé àļļ ŵöŕķéŕš ƒîñîšĥ.

Ƒöŕ àĝéñţš àñđ ÇÎ, --json šţŕéàḿš ţĥé ŕüñ àš ÑĐĴŠÖÑ, öñé çöñṽéŕĝéñçé éṽéñţ þéŕ ļîñé (þļàñ, þàšš, þéŕ-ļöçàļé þŕöĝŕéšš, çĥéçķš, ŵàîţîñĝ ƒöŕ ŕéṽîéŵ öŕ çöñṽéŕĝéđ), ŵîţĥ ţĥé šţŕüçţüŕéđ ŕéšüļţ àš ţĥé ƒîñàļ ŕéçöŕđ. Ţĥé šàḿé éṽéñţš ƒééđ ţĥé Ķàþî Đéšķţöþ þàššéš ṽîéŵ.

kapi run <flow> ŕüñš à çüšţöḿ þîþéļîñé: öñé ñàḿéđ ƒļöŵ, öñé þàšš, ñö ĝàţé ļööþ. Üšé îţ ŵĥéñ ýöü ŵàñţ à šþéçîƒîç çöḿþöšîţîöñ, àñđ üšé kapi up ƒöŕ ţĥé đàîļý çàţçĥ-üþ.

Đŕîƒţ, ŵàţçĥéđ éñđ ţö éñđ​

Ƃéçàüšé šţàţé îš đéŕîṽéđ, ýöü çàñ ŵàţçĥ éàçĥ šţéþ öƒ ţĥé ŕéçöṽéŕý ƒŕöḿ à šöüŕçé éđîţ. Ţàķé Ĝéŕḿàñ, ƒüļļý çàüĝĥţ üþ üñđéŕ ship_gate: { translated: 100, established: 80 }:

kapi status
# locale blocks draft translated approved progress ship
# de 42 100% 100% 100% ██████████ 100% translated

Éđîţ öñé šöüŕçé šţŕîñĝ. Ñö ƒļàĝ îš šéţ àñđ ñö šţàţé îš ŵŕîţţéñ. Ţĥé ñéẋţ đéŕîṽàţîöñ ŕéàđš ţĥé ŵöŕķîñĝ ţŕéé àñđ çöḿþàŕéš éàçĥ đéçîšîöñ ŵîţĥ ţĥé šöüŕçé îţ àþþŕöṽéđ. Ţĥé éđîţéđ ƃļöçķ'š ƃàšîš đéŕš ƒŕöḿ îţš çüŕŕéñţ šöüŕçé, šö îţ ŕéàđš àš šţàļé. Îţ ĥöļđš à ţàŕĝéţ, šö îţ šîţš àţ đŕàƒţ, ƃüţ ţĥàţ ţàŕĝéţ ţŕàñšļàţéš à šéñţéñçé ţĥàţ îš ĝöñé ƒŕöḿ ţĥé þŕöĵéçţ, àñđ ţĥé àþþŕöṽàļ ƃöüñđ ţö ţĥé öļđ þàîŕîñĝ đöéš ñöţ àþþļý:

kapi status
# locale blocks draft translated approved progress ship
# de 42 100% 98% 98% █████████░ 99% blocked: stale
#
# 1 block(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
# locale 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 block(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 block(s) against the current source. They return to
# review un-approved (the earlier approval is not restored).
kapi status
# locale blocks draft translated approved progress ship
# de 42 100% 100% 98% █████████░ 99% blocked: stale

Ţĥé ŕé-đŕàƒţ ĥàþþéñš ĥöŵéṽéŕ ţĥé ƃļöçķ îš îđéñţîƒîéđ. Ŵĥéñ ţĥé éđîţ ŕé-ķéýš ţĥé ƃļöçķ (à þŕöšé þàŕàĝŕàþĥ, ŵĥöšé îđéñţîţý îš îţš ŵöŕđîñĝ), ţĥé öļđ ţŕàñšļàţîöñ šţöþš þàîŕîñĝ ŵîţĥ îţ. Ŵĥéñ ţĥé ƃļöçķ ķééþš îţš ķéý (à çàţàļöĝ éñţŕý, ŵĥöšé îđéñţîţý îš îţš ñàḿé), ţĥé öļđ ţŕàñšļàţîöñ šţîļļ šîţš ƃéšîđé ţĥé ŕéŵŕîţţéñ šéñţéñçé. Ţĥé ļööþ đöéš ñöţ çöüñţ îţ àš à ţŕàñšļàţîöñ öƒ ţĥé ñéŵ šéñţéñçé. Îţ ķééþš ţĥé éàŕļîéŕ ŵöŕđîñĝ îñ ţĥé çöñţéñţ ḿéḿöŕý üñđéŕ ţĥé šéñţéñçé îţ đöéš ţŕàñšļàţé, ŵĥéŕé ţĥé ŕéđŕàƒţ ŕéàđš îţ àš ŕéƒéŕéñçé, àñđ đŕàƒţš ţĥé éñţŕý àƒŕéšĥ.

Ţĥîš àþþļîéš îñ éṽéŕý ļàñĝüàĝé, ŕéṽîéŵéđ öŕ ñöţ. À ŕéŵŕîţé çĥàñĝéš ţĥé šöüŕçé, šö éṽéŕý ļöçàļé'š ţŕàñšļàţîöñ öƒ ţĥé öļđ šéñţéñçé ţŕàñšļàţéš à šéñţéñçé ţĥàţ îš ĝöñé. Éàçĥ îš ķéþţ üñđéŕ îţš öŵñ ŵöŕđîñĝ àñđ éàçĥ îš đŕàƒţéđ àĝàîñ. Ţĥé ļàñĝüàĝéš ŵîţĥ à đéçîšîöñ šĥöŵ ţĥé ƃļöçķ öñ ţĥé stale àẋîš àƃöṽé, àñđ ţĥé ŕéšţ çöḿé ƃàçķ àš þéñđîñĝ ŵöŕķ. À ţŕàñšļàţîöñ éđîţéđ îñ ţĥé šàḿé çöḿḿîţ àš îţš šöüŕçé îš ţĥé éẋçéþţîöñ. Šöḿéöñé ŵŕöţé ţĥàţ þàîŕîñĝ öñ þüŕþöšé, šö ķàþî ķééþš îţ àš îţ šţàñđš.

Ƒöŕ à ţŕàñšļàţîöñ ñöƃöđý ĥàš ŕéṽîéŵéđ, ţĥé šöüŕçé îţ ŵàš ḿàđé ƒŕöḿ îš îñ ţĥé ŕéçöŕđ öƒ ţĥé ŕüñ ţĥàţ ŵŕöţé îţ, ŵĥîçĥ ţĥé þŕöĵéçţ'š çöñţéẋţ ķééþš ƃéšîđé îţš đéçîšîöñš. Îñ à þŕöĵéçţ ţĥàţ šĥàŕéš îţš çöñţéẋţ ţĥŕöüĝĥ à ƃàçķéñđ, à ƒŕéšĥ çļöñé ŕéàđš ţĥàţ çöñţéẋţ ŵîţĥ kapi context sync. Üñţîļ îţ đöéš, kapi up àñđ kapi status šàý šö îñ öñé ļîñé, àñđ à šöüŕçé éđîţéđ ƃéƒöŕé ţĥé çļöñé'š ƒîŕšţ þàšš îš ñöţ ĝŕàđéđ šţàļé ţĥéŕé:

kapi status
# ...
# This checkout holds no record of the source its translations were made from; run `kapi context sync` to read the project's context before a pass grades them.

Ţĥé ļööþ þŕöđüçéš ţŕàñšļàţîöñš àñđ ñéṽéŕ àþþŕöṽéš ţĥéḿ. Ţĥé ŕé-đŕàƒţéđ ƃļöçķ çöḿéš ƃàçķ àţ đŕàƒţ, îñ ţĥé ŕéṽîéŵ ŵöŕķļîšţ, àñđ ţĥé éàŕļîéŕ àþþŕöṽàļ îš ñöţ ŕéšţöŕéđ. Ţĥé ļöçàļé đöéš ñöţ šĥîþ üñţîļ à þéŕšöñ ŕéṽîéŵš ţĥé ñéŵ þàîŕîñĝ.

Öñé ṽéŕƃ, ţŵö ṽéñüéš​

Ţĥé ļööþ'š çöḿþüţé ŕüñš šöḿéŵĥéŕé. Ţĥàţ þļàçé îš ţĥé ṽéñüé, à þŕöþéŕţý öƒ ţĥé þŕöĵéçţ, àñđ kapi up îš ţĥé šàḿé çöḿḿàñđ îñ éîţĥéŕ ṽéñüé. Ţĥŕéé çöñçéŕñš šţàý šéþàŕàţé, éàçĥ ŵîţĥ îţš öŵñ çöḿḿàñđ öŕ šéţţîñĝ:

Transportkapi push / pullmove project stateMerkle diffno translationThe loopkapi updrift → planproduce → checkloop or wait for reviewVenuelocal | serveryour machine + keysor a connected serversame events either way

Ţŕàñšþöŕţ ḿöṽéš šţàţé, ţĥé ļööþ þŕöđüçéš ŵöŕķ, ṽéñüé îš ŵĥéŕé îţ ŕüñš: ţĥŕéé öŕţĥöĝöñàļ çöñçéŕñš.

  • Ţŕàñšþöŕţ: 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 îš à ŕéþöšîţöŕý þöļîçý.

:::ñöţé Ţĥé šéŕṽéŕ ṽéñüé (ţĥé þļàţƒöŕḿ'š ŕéçîþé ƃļöçķ, 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 status --review îš ţĥé ŵöŕķļîšţ: öñé ǫüéüé öƒ ţĥé ƃļöçķš àŵàîţîñĝ à þéŕšöñ, éàçĥ ƃéļöñĝîñĝ ţö à ļàñĝüàĝé, àñđ ţĥé šöüŕçé ļàñĝüàĝé îš öñé öƒ ţĥéḿ (îţš ŕöŵš àŕé ḿàŕķéđ source). Ţŕàñšļàţéđ ƃļöçķš ñöţ ýéţ àþþŕöṽéđ àŕé ţĥé đéŕîṽéđ çöüñţéŕþàŕţ öƒ ţĥé ļööþ'š ŵàîţîñĝ ƒöŕ ŕéṽîéŵ öüţçöḿé. Ýöü àþþŕöṽé öñé ŵîţĥ kapi apply, àš à decide öþéŕàţîöñ ţĥàţ ñàḿéš ţĥé šöüŕçé đöçüḿéñţ, ţĥé ƃļöçķ àñđ ţĥé éđîţîöñ ţĥé ŵöŕķļîšţ ļîšţš, àñđ ţĥé ŕéṽîšîöñ kapi inspect šĥöŵš ƒöŕ ţĥàţ éđîţîöñ:

kapi status --review # the worklist: file, key, locale per pending block
kapi status --review --lang nb # one language (repeat or comma-separate for several)
kapi inspect src/en.json --jsonl # each block's editions, with their revisions
kapi apply <<<'{"ops":[{"op":"decide","at":{"doc":"src/en.json","block":"save.label","edition":"nb"},"if_match":"r:74dbfac2ed1c9d6e","outcome":"establish"}]}'

Àñ àþþŕöṽàļ îš àƃöüţ à þàîŕîñĝ: ţĥîš ŕéñđéŕîñĝ, öƒ ţĥîš šöüŕçé. Ţĥé ŕéçöŕđ ƃîñđš ƃöţĥ ĥàļṽéš ƃý ŕéṽîšîöñ, ţĥé šàḿé ţöķéñ kapi inspect šĥöŵš: ţĥé ţŕàñšļàţîöñ îţ ƃļéššéš, àñđ ţĥé ƃàšîš, ţĥé šöüŕçé îţ ƃļéššéđ ţĥàţ ţŕàñšļàţîöñ ƒöŕ. Éđîţîñĝ éîţĥéŕ šîđé àƒţéŕŵàŕđš đŕöþš ţĥé ƃļöçķ ƃàçķ ƃéļöŵ àþþŕöṽéđ. À çĥàñĝéđ ļîñķ öŕ öţĥéŕ îñļîñé çöđé çöüñţš àš ḿüçĥ àš à çĥàñĝéđ ŵöŕđ. Àñ àþþŕöṽàļ ŕéçöŕđéđ ƃý àñ éàŕļîéŕ ŕéļéàšé ƃîñđš ţĥé ţŵö ţéẋţš àļöñé, àñđ ķééþš àñšŵéŕîñĝ ţĥàţ ŵàý üñţîļ ţĥé ƃļöçķ îš đéçîđéđ àĝàîñ. Öñçé ŕéçöŕđéđ, çöṽéŕàĝé ŕéàđš ţĥé ƃļöçķ àš àþþŕöṽéđ, approved% çļîḿƃš, àñđ à { established: … } ĝàţé ƒļîþš ţö šĥîþþàƃļé.

À ƃļöçķ ŵĥöšé šöüŕçé ḿöṽéđ ŕéàđš àš šţàļé. Îţ ĥöļđš à ţàŕĝéţ, šö îţ šîţš àţ đŕàƒţ, ƃüţ ţĥé ţàŕĝéţ ţŕàñšļàţéš ţĥé öļđ šöüŕçé. kapi status çöüñţš îţ, ţĥé ŕéṽîéŵ ŵöŕķļîšţ ţàķéš îţ ƃàçķ, àñđ ţĥé ļöçàļé đöéš ñöţ šĥîþ, ŵîţĥ öŕ ŵîţĥöüţ à đéçļàŕéđ šĥîþ ĝàţé. Ñö çöṽéŕàĝé ţĥŕéšĥöļđ ḿàķéš à ţŕàñšļàţîöñ öƒ à ŕéŵŕîţţéñ šéñţéñçé šĥîþþàƃļé. Ţĥé ñéẋţ kapi up ŕé-đŕàƒţš îţ àĝàîñšţ ţĥé çüŕŕéñţ šöüŕçé (þŕîçéđ îñ --plan, àñđ ŕéþöŕţéđ àš à ŕé-đŕàƒţ îñ ţĥé ŕüñ šüḿḿàŕý) àñđ ļéàṽéš îţ üñ-àþþŕöṽéđ ƒöŕ ŕéṽîéŵ. Ŕéšţöŕé ţĥé šöüŕçé ƃéƒöŕé ţĥàţ ŕüñ àñđ îţ çöñṽéŕĝéš ƃàçķ öñ ţĥé đéçîšîöñ àļŕéàđý ŕéçöŕđéđ; ñöƃöđý ŕé-ŕéṽîéŵš àñýţĥîñĝ.

À đéçîšîöñ ŕéçöŕđéđ ŵîţĥöüţ à ƃàšîš îš üñķñöŵñ. Šüçĥ à ƃļöçķ ķééþš îţš ŕüñĝ àñđ šĥîþš, àñđ kapi status ŕéþöŕţš ĥöŵ ḿàñý ţĥéŕé àŕé. Đéçîđîñĝ ţĥé ƃļöçķ àĝàîñ ŕéçöŕđš à ƃàšîš.

approvekapi apply · deciderecords the translation and the source it was approved fordecision + both revisionsthe project's storea recorded revision differseither side editedre-derived on the next runblock reads below approvedre-approve with kapi applybinds to the new pairing

Àñ àþþŕöṽàļ ƃîñđš ţö ţĥé þàîŕîñĝ îţ ƃļéššéš (ţĥé ţŕàñšļàţîöñ, àñđ ţĥé šöüŕçé îţ ŵàš àþþŕöṽéđ ƒöŕ): éđîţ éîţĥéŕ àñđ ţĥé ƃļöçķ ƒàļļš ƃéļöŵ àþþŕöṽéđ üñţîļ šöḿéöñé àþþŕöṽéš ţĥé ñéŵ þàîŕ.

Ţĥé ŕéçöŕđ ţŕàṽéļš ŵîţĥ ţĥé þŕöĵéçţ ţĥŕöüĝĥ ţĥé þŕöĵéçţ'š çöñţéẋţ ƃàçķéñđ ŵîţĥ kapi context sync, öŕ îñ öñé ƒîļé ŵîţĥ kapi store export. À šéŕṽéŕ-çöññéçţéđ þŕöĵéçţ þüšĥéš îţ ţö ţĥé ŕéḿöţé îñšţéàđ, ŵĥéŕé ƃļöçķš ŵàîţîñĝ ƒöŕ ŕéṽîéŵ éñţéŕ ţĥé ţéàḿ'š àššîĝñḿéñţ àñđ ŕéṽîéŵ ǫüéüé.

Ţĥé çöñţéñţ ḿéḿöŕý îš šéþàŕàţé. À memory öþéŕàţîöñ ţĥŕöüĝĥ kapi apply àđđš à šöüŕçé→ţàŕĝéţ þàîŕ ţö ţĥé ŕéçýçļé çöŕþüš ƒöŕ ƒüţüŕé ŕéüšé àñđ ñéṽéŕ þŕöḿöţéš à ƃļöçķ ţö àþþŕöṽéđ.

Ŕüñ ţĥé ļööþ ýöüŕšéļƒ: ţĥîš îš ţĥé ŕéàļ ķàþî çöḿþîļéđ ţö ŴéƃÀššéḿƃļý, ŵöŕķîñĝ öñ àñ îñ-ḿéḿöŕý þŕöĵéçţ. status šĥöŵš ţĥé ţŕàñšļàţéđ-ƃüţ-üñŕéṽîéŵéđ šţàţé, status --review ļîšţš ţĥé ŵöŕķļîšţ, apply ŕéçöŕđš ţĥé ƃļöçķ šţàţé îñ ţĥé þŕöĵéçţ šţöŕé, àñđ ţĥé çļöšîñĝ status šĥöŵš àþþŕöṽéđ çļîḿƃ:

Ļöàđîñĝ ţĥé ŵàļķţĥŕöüĝĥ…

Šéé àļšö Ŵĥéŕé ţŕàñšļàţîöñš & ţéŕḿš ļîṽé ƒöŕ ţĥé ḿéḿöŕý àñđ ţéŕḿš ḿöđéļ, àñđ Ķééþ šöüŕçé öñ ƃŕàñđ ƒöŕ ţĥé šöüŕçé-šîđé çĥéçķš ţĥàţ đŕîṽé ţĥé àüţĥöŕîñĝ ļàđđéŕ.