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

kapi þüšĥ

Šéñđ ļöçàļ çĥàñĝéš ţö Bowrain Šéŕṽéŕ. kapi push îš þüŕé ţŕàñšþöŕţ: îţ ḿöṽéš þŕöĵéçţ šţàţé, ţĥé çöñţéñţ, ţĥé ţéŕḿš éđîţš, ţĥé ṽöîçé ƃîñđîñĝ, àñđ ñéṽéŕ đŕàƒţš àñýţĥîñĝ. Ŵîţĥ ţĥé þŕöĵéçţ'š bowrain.converge þöļîçý àţ îţš đéƒàüļţ on-push, ţĥé šéŕṽéŕ šţàŕţš à ŕüñ öƒ îţš öŵñ ŵĥéñ ţĥé þüšĥ ļàñđš.

Üšàĝé

kapi push [paths...] [flags]

Éẋàḿþļéš

# Push all local changes to the server
kapi push

# Push specific files
kapi push src/locales/en/

# Show what would be pushed without uploading
kapi push --dry-run

# Re-upload every block, ignoring what the server already holds
kapi push --force

# Push only local terms edits (no content, no automations)
kapi push --concepts

# Example output:
# Pushed 47 blocks (scanned 12 files)

Öþţîöñš

ƑļàĝĐéšçŕîþţîöñĐéƒàüļţ
--forceŔé-üþļöàđ éṽéŕýţĥîñĝ, éṽéñ üñçĥàñĝéđ ƃļöçķšfalse
--dry-runŠĥöŵ ŵĥàţ ŵöüļđ ƃé üþļöàđéđ ŵîţĥöüţ šéñđîñĝfalse
--streamŢàŕĝéţ šţŕéàḿ (đéƒàüļţ: àüţö-đéţéçţéđ ƒŕöḿ ĝîţ/ÇÎ)$auto
--conceptsŠýñç öñļý ļöçàļ ţéŕḿš éđîţš ţö ţĥé ŵöŕķšþàçé (đîŕéçţ éđîţš + ĝöṽéŕñéđ çĥàñĝé-šéţ); ñö çöñţéñţ ţŕàñšþöŕţ, ñö àüţöḿàţîöñšfalse

Ţĥé þŕöţöçöļ

À þüšĥ đéçļàŕéš îţš ţŕéé àñđ üþļöàđš öñļý ŵĥàţ ţĥé šéŕṽéŕ ļàçķš. Ţĥé šàḿé þŕöţöçöļ šéŕṽéš kapi push, kapi up, àñđ ţĥé šéŕṽéŕ-šîđé çöññéçţöŕš, àñđ kapi pull ŕéàđš ţĥé šàḿé ţŕéé ƃàçķ.

  1. Šçàñ. kapi ŕéàđš ţĥé ŕéçîþé'š collections:, éẋţŕàçţš éṽéŕý ƃļöçķ, àñđ çöḿþüţéš éàçĥ îţéḿ'š çöñţéñţ ĥàšĥ.
  2. Đéçļàŕé ţĥé ţŕéé. Ţĥé çļîéñţ šéñđš ţĥé šéŕṽéŕ îţš ŵĥöļé ţŕéé: éṽéŕý ţŕàçķéđ îţéḿ, îţš þàţĥ, îţš çöļļéçţîöñ àñđ ţĥé þöîñţ îţ šîţš àţ, àñđ îţš ĥàšĥ. Ţĥé šéŕṽéŕ đš ţĥàţ àĝàîñšţ ţĥé ţŕéé îţ ĥöļđš àñđ àñšŵéŕš ŵîţĥ ţĥé îţéḿš îţ ñééđš.
  3. Üþļöàđ. Öñļý ţĥé îţéḿš ţĥé šéŕṽéŕ àšķéđ ƒöŕ ţŕàṽéļ, îñ çĥüñķš, ţö þŕéšîĝñéđ üþļöàđ ÜŔĻš (öŕ ţĥŕöüĝĥ ţĥé šéŕṽéŕ ŵĥéñ ţĥé ƃļöƃ šţöŕé îš ñöţ ŕéàçĥàƃļé ƒŕöḿ ţĥé çļîéñţ). Ḿéđîà àššéţš ŕéƒéŕéñçéđ ƃý ţĥé çöñţéñţ ţŕàṽéļ ţĥé šàḿé ŵàý.
  4. Çöḿḿîţ. Ţĥé çļîéñţ çöḿḿîţš à ḿàñîƒéšţ ñàḿîñĝ ŵĥàţ îţ üþļöàđéđ. Ţĥé šéŕṽéŕ ṽàļîđàţéš îţ, àñšŵéŕš 202, àñđ à ŵöŕķéŕ àþþļîéš ţĥé þüšĥ: çöñţéñţ îš šţöŕéđ, àñđ ţĥé öüţþüţ'š ingest ƒîéļđ šàýš ŵĥéţĥéŕ ţĥé þüšĥ ŵàš àþþļîéđ öŕ ǫüéüéđ ŵĥéñ ţĥé çöḿḿàñđ ŕéţüŕñéđ.

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

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

.kapi/work/cache/sync-cache.json ŕéçöŕđš ţĥé ļàšţ ţŕéé ţĥé çļîéñţ đéçļàŕéđ àñđ ţĥé ŕéƒ îţ ŵàš çöḿḿîţţéđ àš. Îţ îš ĝîţîĝñöŕéđ àñđ šàƒé ţö đéļéţé: ţĥé ñéẋţ þüšĥ đéçļàŕéš ţĥé ţŕéé àĝàîñ àñđ ţĥé šéŕṽéŕ ţéļļš îţ ŵĥàţ îţ ļàçķš.

Đéçîšîöñš ţĥé šéŕṽéŕ àççéþţš

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

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

Pushed 47 blocks (12 uploaded), 512 words (scanned 12 files)
2 approvals not accepted for fr-FR: no review permission
1 sign-off not accepted for de-DE: separation of duties
3 local record(s) now match the platform; they will not be sent again

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

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

1 demotion not accepted for nb-NO: withdrawing a sign-off needs review permission
1 local record(s) now match the platform; they will not be sent again

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

1 demotion not accepted for nb: the rejection names a translation the platform no longer holds
1 local record(s) now match the platform; they will not be sent again

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

kapi up þŕîñţš ţĥé šàḿé ļîñéš àƒţéŕ îţš þüšĥ þĥàšé, öñ à çöññéçţéđ þŕöĵéçţ àñđ àƒţéŕ kapi up --local. Ŵîţĥ --json îţ ŵŕîţéš ţĥéḿ àš öñé governance ŕéçöŕđ îñ îţš ÑĐĴŠÖÑ šţŕéàḿ, ŵîţĥ ţĥé ƒîéļđ ñàḿéš kapi push --json üšéš:

{"type":"governance","verdicts_refused":[{"locale":"nb","kind":"demotion","reason":"the rejection names a translation the platform no longer holds","count":1}],"verdicts_retired":1}

Ţéŕḿš éđîţš

Ŵĥéñ ţĥé þŕöĵéçţ îš çļàîḿéđ îñţö à ŵöŕķšþàçé àñđ à ƃàšéļîñé ŵàš þüļļéđ (šéé kapi pull), þüšĥ àļšö ŕéçöñçîļéš ļöçàļ ţéŕḿš éđîţš îñ ţĥé ƃöüñđ ţéŕḿš šţöŕé àĝàîñšţ ţĥàţ ƃàšéļîñé. Öŕđîñàŕý éđîţš, šüçĥ àš đéƒîñîţîöñš, ñöţéš, þŕöþöšéđ ţéŕḿš àñđ ñöñ-ĝöṽéŕñéđ ŕéļàţîöñš, àþþļý đîŕéçţļý ţĥŕöüĝĥ ţĥé çöñçéþţ éñđþöîñţš. Ĝöṽéŕñéđ éđîţš, šüçĥ àš à ţéŕḿ šéţ ţö forbidden öŕ preferred, àñ üñ-ƒöŕƃîđđîñĝ, à replaced_by ŕéļàţîöñ, öŕ à çöñçéþţ đéļéţé, àŕé ƃüñđļéđ îñţö à šîñĝļé šüƃḿîţţéđ çĥàñĝé-šéţ þŕöþöšàļ ƒöŕ ŕéṽîéŵ, ţĥé šàḿé šéþàŕàţîöñ öƒ đüţîéš ţĥé Çöñţéẋţ ĥüƃ éñƒöŕçéš. Þüšĥ ŕéþöŕţš ŵĥàţ àþþļîéđ đîŕéçţļý ṽéŕšüš ŵĥàţ ŵàš þŕöþöšéđ, ŵîţĥ à ļîñķ ţö ŕéṽîéŵ ţĥé çĥàñĝé-šéţ.

Ţĥé ṽöîçé ƃîñđîñĝ

Ŵĥéñ ţĥé ŕéçîþé ƃîñđš à ṽöîçé þŕöƒîļé (defaults.voice, çöñṽéñţîöñàļļý .kapi/voice.yaml, öŕ à þŕöƒîļé'š öŵñ voice:), þüšĥ çàŕŕîéš îţ îñţö ţĥé ŵöŕķšþàçé Çöñţéẋţ ĥüƃ, ḿàţçĥéđ ƃý þŕöƒîļé ñàḿé: çŕéàţéđ öñ ƒîŕšţ þüšĥ, à ñö-öþ ŵĥéñ ţĥé çöñţéñţ îš üñçĥàñĝéđ, àñđ öţĥéŕŵîšé àþþļîéđ àš à ñéŵ þŕöƒîļé ṽéŕšîöñ. Ţĥé þŕéṽîöüš šéŕṽéŕ-šîđé šţàţé îš àŕçĥîṽéđ îñ ţĥé ṽéŕšîöñ ĥîšţöŕý, ñéṽéŕ öṽéŕŵŕîţţéñ, àñđ ṽöçàƃüļàŕý ŕüļéš ţĥé šéŕṽéŕ þŕöḿöţéđ ƒŕöḿ çöŕŕéçţîöñš àŕé þŕéšéŕṽéđ. Ţĥé öüţþüţ ŕéþöŕţš ŵĥéţĥéŕ ţĥé ṽöîçé ŵàš çàŕŕîéđ, šķîþþéđ, öŕ ŵöüļđ ƃé þüšĥéđ öñ à đŕý ŕüñ.

Éẋîţ çöđéš

  • 0: šüççéšš (çĥàñĝéš þüšĥéđ öŕ àļŕéàđý üþ ţö đàţé)
  • 1: éŕŕöŕ (šéŕṽéŕ ŕéĵéçţéđ, ñéţŵöŕķ éŕŕöŕ, àñđ šö öñ)

Ŕéļàţéđ çöḿḿàñđš

  • kapi pull: ƒéţçĥ ţĥé šéŕṽéŕ'š çĥàñĝéš îñţö ţĥé ţŕéé
  • kapi status: çöṽéŕàĝé, šĥîþ šţàñđîñĝ, àñđ ŵĥàţ îš þéñđîñĝ
  • kapi diff: ţĥé çĥàñĝéđ ƃļöçķš, þéŕ ƒîļé
  • kapi up: þüšĥ, ŕüñ öñ ţĥé šéŕṽéŕ, þüļļ

Ŵĥéñ ţö üšé

Þüšĥ ţö Bowrain Šéŕṽéŕ ţö:

  • Šĥàŕé ýöüŕ ŵöŕķ ŵîţĥ ýöüŕ ţéàḿ, àñđ ļéţ ţĥé šéŕṽéŕ çàţçĥ ţĥé þŕöĵéçţ üþ
  • Šéñđ ţéŕḿš éđîţš: öŕđîñàŕý éđîţš ļàñđ đîŕéçţļý; ĝöṽéŕñéđ éđîţš ţŕàṽéļ üþ àš à çĥàñĝé-šéţ þŕöþöšàļ
  • Çàŕŕý ţĥé ṽöîçé þŕöƒîļé ţĥé ŕéçîþé ƃîñđš
  • Îñţéĝŕàţé ŵîţĥ ÇÎ/ÇĐ þîþéļîñéš, ŵĥéŕé kapi up îš üšüàļļý ţĥé ƃéţţéŕ ṽéŕƃ ƃéçàüšé îţ àļšö ŵàîţš ƒöŕ ţĥé ŕüñ àñđ þüļļš ţĥé ŕéšüļţš

Ƃéšţ þŕàçţîçéš

  1. Ŕüñ kapi status ƃéƒöŕé þüšĥîñĝ ţö šéé ŵĥàţ çĥàñĝéđ
  2. Þüļļ ƒîŕšţ îƒ ŵöŕķîñĝ ŵîţĥ à ţéàḿ, šö ţĥé ţŕéé ýöü đéçļàŕé îš çüŕŕéñţ
  3. Üšé --dry-run ŵĥéñ üñšüŕé àƃöüţ ŵĥàţ ŵîļļ ƃé üþļöàđéđ