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

ķàþî þüšĥ

Šĥàŕé ýöüŕ çĥéçķöüţ'š ŵöŕķ ŵîţĥ ţĥé ţéàḿ. À þüšĥ šéñđš ţĥé çöñţéñţ, ţéŕḿš éđîţš, ṽöîçé ƃîñđîñĝ, đéçîšîöñš àñđ ţĥé šéţţîñĝš ţĥé ŕéçîþé öŵñš ţö ţĥé ŵöŕķšþàçé, ŵĥéŕé ţĥé ƃŕöŵšéŕ, Ķàþî Đéšķţöþ àñđ éṽéŕý öţĥéŕ çĥéçķöüţ ŕéàđ ţĥéḿ. 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. Šçàñ. ķàþî ŕéàđš ţĥé ŕéçîþé'š collections:, éẋţŕàçţš éṽéŕý ƃļöçķ, àñđ çöḿþüţéš à ĥàšĥ öƒ éàçĥ îţéḿ'š çöñţéñţ, îñļîñé çöđéš îñçļüđéđ, šö à çĥàñĝéđ ļîñķ çöüñţš àš à çĥàñĝéđ ƃļöçķ. ΃ à ƒîļé à çöļļéçţîöñ çöṽéŕš çàññöţ ƃé ŕéàđ (îţ ƒàîļš ţö þàŕšé, öŕ îţ îš à çàţàļöĝ îñ à šçĥéḿà ţĥîš ķàþî đöéš ñöţ ŕéàđ), ţĥé þüšĥ šţöþš ƃéƒöŕé šéñđîñĝ àñýţĥîñĝ àñđ ñàḿéš ţĥé ƒîļé àñđ ţĥé ŕéàšöñ. À ƒîļé ţĥàţ ñö ƒöŕḿàţ ŕéàđš îš ļéƒţ öüţ öƒ ţĥé ţŕéé, àñđ ţĥé šéŕṽéŕ ķééþš ŵĥàţ îţ ĥöļđš àţ ţĥàţ þàţĥ.
  2. Đéçļàŕé ţĥé ţŕéé. Ţĥé çļîéñţ šéñđš ţĥé šéŕṽéŕ îţš ŵĥöļé ţŕéé: éṽéŕý ţŕàçķéđ îţéḿ, îţš þàţĥ, îţš çöļļéçţîöñ àñđ ţĥé þöîñţ îţ šîţš àţ, àñđ îţš ĥàšĥ. Ţĥé šéŕṽéŕ đš ţĥàţ àĝàîñšţ ţĥé ţŕéé îţ ĥöļđš àñđ àñšŵéŕš ŵîţĥ ţĥé îţéḿš îţ ñééđš.
  3. Üþļöàđ. Öñļý ţĥé îţéḿš ţĥé šéŕṽéŕ àšķéđ ƒöŕ ţŕàṽéļ, îñ çĥüñķš, ţö þŕéšîĝñéđ üþļöàđ ÜŔĻš (öŕ ţĥŕöüĝĥ ţĥé šéŕṽéŕ ŵĥéñ ţĥé ƃļöƃ šţöŕé îš ñöţ ŕéàçĥàƃļé ƒŕöḿ ţĥé çļîéñţ). Ḿéđîà àššéţš ŕéƒéŕéñçéđ ƃý ţĥé çöñţéñţ ţŕàṽéļ ţĥé šàḿé ŵàý.
  4. Çöḿḿîţ. Ţĥé çļîéñţ çöḿḿîţš à ḿàñîƒéšţ ñàḿîñĝ ŵĥàţ îţ üþļöàđéđ. Ţĥé šéŕṽéŕ ṽàļîđàţéš îţ, àñšŵéŕš 202, àñđ à ŵöŕķéŕ àþþļîéš ţĥé þüšĥ: çöñţéñţ îš šţöŕéđ, àñđ ţĥé öüţþüţ'š ingest ƒîéļđ šàýš ŵĥéţĥéŕ ţĥé þüšĥ ŵàš àþþļîéđ öŕ ǫüéüéđ ŵĥéñ ţĥé çöḿḿàñđ ŕéţüŕñéđ.

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

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

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

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

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

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

  • Ţĥé šéŕṽéŕ ĝŕàđéš à ţŕàñšļàţîöñ à ŕüñ öñ ýöüŕ ḿàçĥîñé þŕöđüçéđ àĝàîñšţ ţĥàţ šöüŕçé, àš îţ ĝŕàđéš öñé îţ đŕàƒţéđ îţšéļƒ. ΃ ţĥé šöüŕçé çĥàñĝéđ šîñçé, îñ îţš ŵöŕđîñĝ öŕ àñ îñļîñé çöđé šüçĥ àš à ļîñķ, ţĥé đàšĥƃöàŕđ šĥöŵš îţ àš šţàļé, àš ýöüŕ ḿàçĥîñé đöéš (šéé Ŵĥàţ àñ àþþŕöṽàļ ļéàṽéš ƃéĥîñđ).
  • À ţŕàñšļàţîöñ ýöü ŵŕöţé ƃý ĥàñđ (ŵîţĥ kapi apply, îñ Ķàþî Đéšķţöþ, öŕ ţĥŕöüĝĥ àñ àĝéñţ ŵöŕķîñĝ ƒöŕ ýöü) çöüñţš àš ýöüŕš ƒöŕ šéþàŕàţîöñ öƒ đüţîéš. Ŵĥéñ ţĥé ŵöŕķšþàçé þöļîçý ƃļöçķš àþþŕöṽîñĝ ýöüŕ öŵñ ŵöŕķ, ţĥé šéŕṽéŕ ŕéƒüšéš ýöüŕ àþþŕöṽàļ öƒ îţ, îñ ţĥé šàḿé þüšĥ öŕ à ļàţéŕ öñé.
  • À ţŕàñšļàţîöñ ţĥàţ à ŕüñ þŕöđüçéđ, öŕ ţĥàţ kapi pull öŕ kapi merge ƃŕöüĝĥţ îñ, ñàḿéš ñö àüţĥöŕ.

Éàçĥ ţŕàñšļàţîöñ'š ŕéçöŕđ îš šéñţ öñçé, àñđ àĝàîñ ŵĥéñ îţ çĥàñĝéš.

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

Pushed 47 blocks (12 uploaded), 512 words (scanned 12 files)
2 approvals not accepted for fr-FR: no review permission
1 approval 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 an approved translation needs review permission
1 local record(s) now match the platform; they will not be sent again

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

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, öŕ à þŕöƒîļé'š öŵñ voice:), þüšĥ çàŕŕîéš îţ îñţö ţĥé ŵöŕķšþàçé Çöñţéẋţ ĥüƃ, ḿàţçĥéđ ƃý þŕöƒîļé ñàḿé: çŕéàţéđ öñ ƒîŕšţ þüšĥ, ļéƒţ àļöñé ŵĥéñ ţĥé çöñţéñţ îš üñçĥàñĝéđ, àñđ öţĥéŕŵîšé àþþļîéđ àš à ñéŵ þŕöƒîļé ṽéŕšîöñ. Ţĥé þŕéṽîöüš šéŕṽéŕ-šîđé ṽéŕšîöñ šţàýš îñ ţĥé ṽéŕšîöñ ĥîšţöŕý, àñđ ṽöçàƃüļàŕý ŕüļéš ţĥé šéŕṽéŕ þŕöḿöţéđ ƒŕöḿ çöŕŕéçţîöñš àŕé ķéþţ. Ţĥé öüţþüţ ŕéþöŕţš ŵĥéţĥéŕ ţĥé ṽöîçé ŵàš çàŕŕîéđ, šķîþþéđ, öŕ ŵöüļđ ƃé þüšĥéđ öñ à đŕý ŕüñ.

Éẋîţ çöđéš​

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

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

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

Ŵĥéñ ţö üšé​

Þüšĥ ţö Ƃöŵŕàîñ Šéŕṽéŕ ţö:

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

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

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