É-09: Ţĥé çĥàñĝé çöñţŕàçţ
Šüḿḿàŕý
Çöñţéñţ çĥàñĝéš îñ öñé ŵàý. À çàļļéŕ đéšçŕîƃéš ţĥé çĥàñĝé àš à çĥàñĝé šéţ
(kapi.change/v1): àñ éñṽéļöþé öƒ öŕđéŕéđ öþéŕàţîöñš, éàçĥ àđđŕéššéđ ţö öñé
éđîţîöñ öƒ öñé ƃļöçķ öƒ öñé đöçüḿéñţ àñđ éàçĥ ñàḿîñĝ ţĥé ŕéṽîšîöñ öƒ ţĥàţ
éđîţîöñ îţš šéñđéŕ ŕéàđ. Öñé šéŕṽîçé îñ ţĥé ƒŕàḿéŵöŕķ, core/change, àþþļîéš
îţ. Ţĥé šéŕṽîçé ŕéàđš éàçĥ đöçüḿéñţ ţĥŕöüĝĥ ţĥé ĥöḿé ţĥàţ ĥöļđš îţš ţéẋţ,
àþþļîéš ţĥé öþéŕàţîöñš îñ ḿéḿöŕý ŵîţĥ change.ApplyBlock, çĥéçķš ŵĥàţ çĥàñĝéđ,
àñđ çöḿḿîţš éṽéŕý đöçüḿéñţ öŕ ñöñé. À ƒîļé îñ à ŵöŕķîñĝ ţŕéé îš öñé ĥöḿé; ţĥé
ƒîļé ĥöḿé çöḿḿîţš ƃý ŕéñàḿîñĝ à šţàĝéđ ƒîļé öñţö ţĥé đöçüḿéñţ üñđéŕ àñ àđṽîšöŕý
ļöçķ, àñđ àþþļîéš ţĥé çĥàñĝé àĝàîñ ŵĥéñ ţĥé ƒîļé ḿöṽéđ šîñçé îţ ŵàš ŕéàđ. À
ƒļöŵ çöḿḿîţš éàçĥ đöçüḿéñţ îţ ŵŕîţéš ţĥŕöüĝĥ ţĥé šàḿé ĥöḿé àñđ ŕéçöŕđš îţ àš
ţĥé ƒļöŵ'š éđîţ.
Ţĥé šéŕṽîçé ļîṽéš ƃéļöŵ éṽéŕý šüŕƒàçé. Îţ îḿþöŕţš core/model, core/format
àñđ core/safeio, àñđ ñöţĥîñĝ ƒŕöḿ ţĥé ĥöšţ, ţĥé ÇĻÎ öŕ à šüŕƒàçé, šö ţĥé ÇĻÎ,
ţĥé àĝéñţ ţööļš, Ķàþî Đéšķţöþ àñđ àñ àþþļîçàţîöñ ţĥàţ éḿƃéđš ţĥé éñĝîñé àļļ
ƃüîļđ ţĥé šàḿé šéŕṽîçé àñđ đéŕ öñļý îñ ţĥé ĥöḿé àñđ ţĥé ĥööķš ţĥéý ĝîṽé îţ.
Çöñţéẋţ
À çĥàñĝé ţö çöñţéñţ ĥàš ţö àñšŵéŕ ţĥé šàḿé ǫüéšţîöñš ŵĥéŕéṽéŕ îţ çöḿéš ƒŕöḿ: ŵĥîçĥ ƃļöçķ îţ ḿéàñš, ŵĥéţĥéŕ ţĥàţ ƃļöçķ šţîļļ šàýš ŵĥàţ ţĥé šéñđéŕ ŕéàđ, ŵĥéţĥéŕ ţĥé ŕéšüļţ ķééþš ţĥé îñļîñé çöđéš àñđ šţŕüçţüŕé ţĥé ƒöŕḿàţ ñééđš, ŵĥàţ ţĥé çĥàñĝé đöéš ţö ţĥé éđîţîöñ'š šţàţüš, àñđ ŵĥéţĥéŕ ĝöṽéŕñàñçé àļļöŵš îţ. À đöçüḿéñţ ţĥàţ çĥàñĝéš îñ ţŵö þļàçéš àţ öñçé ĥàš ţö éñđ ŵîţĥ ƃöţĥ çĥàñĝéš öŕ ŵîţĥ à çļéàŕ ŕéƒüšàļ, àñđ ñéṽéŕ ŵîţĥ öñé çĥàñĝé šîļéñţļý ŕéþļàçéđ ƃý ţĥé öţĥéŕ.
Ţĥé éñĝîñé ŕéàđš đöçüḿéñţš îñţö ƃļöçķš ŵĥöšé éđîţîöñš ĥöļđ ŕüñš (Ƒ-02) àñđ ŵŕîţéš ţĥéḿ ƃàçķ ţĥŕöüĝĥ ƒöŕḿàţ ŵŕîţéŕš ţĥàţ ŕéþļàý à šķéļéţöñ (É-02). Ţööļš îñ ƒļöŵš çĥàñĝé ƃļöçķš ţĥŕöüĝĥ ţĥéîŕ ṽîéŵš (É-03). Ţĥé çĥàñĝé çöñţŕàçţ þüţš ƃöţĥ öñ öñé ƒööţîñĝ: à ţööļ'š ŵŕîţé àñđ à þéŕšöñ'š éđîţ àŕé ţĥé šàḿé öþéŕàţîöñš, àþþļîéđ ƃý ţĥé šàḿé ƒüñçţîöñ, üñđéŕ ţĥé šàḿé ŕüļéš.
Đéçîšîöñ
Ţĥé çĥàñĝé šéţ
À çĥàñĝé šéţ ĥàš àñ éñṽéļöþé àñđ öþéŕàţîöñš.
| Ƒîéļđ | Ḿéàñîñĝ |
|---|---|
schema | kapi.change/v1 |
mode | apply (ţĥé đéƒàüļţ) öŕ preview, ŵĥîçĥ çöḿþüţéš àñđ çĥéçķš éṽéŕýţĥîñĝ, ŵŕîţéš ñöţĥîñĝ, àñđ ŕéţüŕñš à đ þéŕ đöçüḿéñţ |
gate | enforce (ţĥé đéƒàüļţ) öŕ report: ŵĥàţ à ƒàîļîñĝ ĝöṽéŕñàñçé ƒîñđîñĝ ţĥé çĥàñĝé îñţŕöđüçéš đöéš |
require_basis | ŕéƒüšé à ŵŕîţé ţö à đéŕîṽéđ éđîţîöñ ŵĥöšé àüţĥöŕîţàţîṽé éđîţîöñ ḿöṽéđ šîñçé ţĥé šéñđéŕ ŕéàđ îţ |
note, evidence | ŵĥàţ à þéŕšöñ ŕéàđš îñ ĥîšţöŕý, àñđ ŵĥéŕé ţĥé ŵöŕđîñĝ ƃéĥîñđ ţĥé çĥàñĝé ŵàš šééñ: à ƒîļé'š path, ţĥé block ķéý à ŕéàđ ŕéþöŕţš, à quote öŕ à url |
ops | ţĥé öþéŕàţîöñš, àþþļîéđ îñ öŕđéŕ; à çĥàñĝé šéţ ŵîţĥ ñöñé çĥàñĝéš ñöţĥîñĝ |
Ţĥé çöñţéñţ öþéŕàţîöñš àŕé set_content, replace_text, set_attribute,
mark, remove_edition, annotate, unannotate, insert_block,
delete_block àñđ native. decide ŕéçöŕđš à ŕéṽîéŵ đéçîšîöñ, àñđ term,
memory àñđ recipe çĥàñĝé ţĥé þŕöĵéçţ'š ţéŕḿš šţöŕé, çöñţéñţ ḿéḿöŕý àñđ
ŕéçîþé. Ţĥé éñṽéļöþé çàŕŕîéš ñö àçţöŕ: ţĥé ţŕàñšþöŕţ ţĥàţ đéļîṽéŕš à çĥàñĝé šéţ
šàýš ŵĥö šéñţ îţ. À set_content öŕ replace_text ḿàý šţàţé ĥöŵ à ţööļ
þŕöđüçéđ îţš çöñţéñţ (origin: ţĥé ţööļ, àñđ ţĥé ķîñđ àñđ éñĝîñé îţ đŕéŵ öñ),
àš à ŕüñ þŕîñţéđ ŵîţĥ --print-ops šţàţéš éàçĥ ţŕàñšļàţîöñ îţ ŵŕöţé. Ţĥé
šéŕṽîçé ŕéçöŕđš ñö šţàţéđ öŕîĝîñ: àñ éđîţ ţàķéš ţĥé öŕîĝîñ îţš šéñđéŕ'š éđîţ
ĝîṽéš îţ, à þéŕšöñ'š öŕ àñ àĝéñţ'š ţĥéîŕ öŵñ, àñđ à ţööļ îñ à ƒļöŵ ŕéçöŕđš ĥöŵ
îţ þŕöđüçéđ à ţŕàñšļàţîöñ ŵîţĥ ţĥé îñ-þŕöçéšš þŕöṽéñàñçé öþéŕàţîöñ.
change.Decode ŕéàđš à çĥàñĝé šéţ šţŕîçţļý: àñ üñķñöŵñ ƒîéļđ öŕ öþéŕàţîöñ îš
ŕéƒüšéđ ŵîţĥ ţĥé ĴŠÖÑ þöîñţéŕ öƒ ŵĥàţ ŵàš ŵŕöñĝ. changeschema.Schema îš ţĥé
ĴŠÖÑ Šçĥéḿà ĝéñéŕàţéđ ƒŕöḿ ţĥé šàḿé Ĝö ţýþéš. ŢýþéŠçŕîþţ çļîéñţš üšé
@neokapi/contract-types, ŵĥöšé çĥàñĝé šéţ àñđ öþéŕàţîöñš àŕé ĝéñéŕàţéđ ƒŕöḿ
ţĥàţ šçĥéḿà àñđ ŵĥöšé ŕéšüļţ, ŕéàđ àñđ đéšçŕîþţîöñ ţýþéš àŕé ĝéñéŕàţéđ ƒŕöḿ ţĥé
šţŕüçţš ţĥé šéŕṽîçé ḿàŕšĥàļš; à đŕîƒţ ĝàţé ŕéĝéñéŕàţéš ţĥéḿ öñ éṽéŕý çĥàñĝé. Ţĥé
ñöţé Ţĥé çĥàñĝé àþþļîéŕ çöṽéŕš
ţĥé ţýþéš, ţĥé đéçöđéŕ, ţĥé šçĥéḿà àñđ ţĥé ŢýþéŠçŕîþţ ţýþéš.
kapi.change/v1 îš ƒŕöžéñ ƒöŕ ŕéļéàšé 1.3.0 àñđ îš öñļý éẋţéñđéđ. À ƒŕöžéñ
ƒîļé ƃéšîđé éàçĥ ĝöļđéñ ĥöļđš ţĥé çöñţŕàçţ àš îţ ŵàš þüƃļîšĥéđ: ţĥé çĥàñĝé
šéţ'š šçĥéḿà, ţĥé ŕéšüļţ'š (kapi.change-result/v1,
changeschema.ResultSchema) àñđ ţĥé ŕéàđ'š (changeschema.ReadSchema), àñđ
ţĥé ḾÇÞ ţööļ šüŕƒàçé, ŵĥöšé ţööļ ñàḿéš ḿàý öñļý ĝŕöŵ àñđ ŵĥöšé îñþüţ šçĥéḿàš
àŕé ĥéļđ ţö ţĥé ŕéǫüéšţ ŕüļé ƃéļöŵ. À ţéšţ ŵàļķš
éàçĥ ƒŕöžéñ šçĥéḿà ƃéšîđé ţĥé öñé ţĥé Ĝö ţýþéš ĝéñéŕàţé àñđ ŕéƒüšéš à çĥàñĝé ţĥàţ
ƃŕéàķš ţĥé šîđé ţĥàţ đéþéñđš öñ îţ: ƒöŕ à ŕéǫüéšţ, à þŕöþéŕţý, $defs éñţŕý öŕ
öþéŕàţîöñ ŕéḿöṽéđ öŕ ŕéñàḿéđ, à ţýþé, const, $ref, þàţţéŕñ, ƒöŕḿàţ öŕ ƃöüñđ
çĥàñĝéđ, à þŕöþéŕţý ñéŵļý ŕéǫüîŕéđ, àñ éñüḿ ṽàļüé ŕéḿöṽéđ, öŕ
additionalProperties çĥàñĝéđ; ƒöŕ à ŕéšüļţ öŕ à ŕéàđ, ţĥé šàḿé, ŵîţĥ à þŕöþéŕţý
đŕöþþéđ ƒŕöḿ required îñ þļàçé öƒ à ñéŵļý ŕéǫüîŕéđ öñé. Àñ öþţîöñàļ þŕöþéŕţý,
àñ öþéŕàţîöñ, àñ éñüḿ ṽàļüé, à $defs éñţŕý àñđ àñý đéšçŕîþţîöñ éẋţéñđ à
šçĥéḿà. À ƃŕéàķîñĝ çĥàñĝé ñééđš kapi.change/v2 àñđ à ñéŵ ƒŕöžéñ ƒîļé. Đéçöđîñĝ
šţàýš šţŕîçţ, šö àñ öļđéŕ ƃîñàŕý ŕéƒüšéš à ƒîéļđ à ñéŵéŕ šéñđéŕ àđđš àš
invalid, ŵĥîçĥ ţĥé ŕüļé àççéþţš: à šéñđéŕ ļéàŕñš ţĥé ƒîéļđ îš ñöţ üñđéŕšţööđ
ŕàţĥéŕ ţĥàñ ĥàṽîñĝ îţ îĝñöŕéđ.
Àđđŕéššîñĝ àñđ ŕéṽîšîöñš
Àñ öþéŕàţîöñ àđđŕéššéš {doc, block, edition}. doc îš à þŕöĵéçţ-ŕéļàţîṽé
þàţĥ, container!entry ƒöŕ àñ àŕçĥîṽé ḿéḿƃéŕ, öŕ àñöţĥéŕ ĥöḿé'š đöçüḿéñţ ķéý.
block îš ţĥé ķéý à ŕéàđ ŕéþöŕţš: ţĥé đüŕàƃļé ķéý ŵĥéŕé ŕéçöñçîļîàţîöñ
àššîĝñéđ öñé, éļšé ţĥé ñàḿé ţĥé ƒöŕḿàţ ĝîṽéš ţĥé ƃļöçķ, éļšé ţĥé ŕéàđéŕ'š îđ
(change.BlockKey). edition îš àñ éđîţîöñ ķéý šüçĥ àš fr öŕ
en;channel=short; éḿþţý ḿéàñš ţĥé đöçüḿéñţ'š öŵñ éđîţîöñ.
Àñ öþéŕàţîöñ ţĥàţ çĥàñĝéš éẋîšţîñĝ çöñţéñţ çàŕŕîéš if_match, ţĥé ŕéṽîšîöñ öƒ
ţĥé éđîţîöñ îţš šéñđéŕ ŕéàđ. model.EditionRevision ĥàšĥéš ţĥé éđîţîöñ ķéý àñđ
îţš ŕüñš, çöđéš àñđ ţĥéîŕ àţţŕîƃüţéš îñçļüđéđ, àñđ ñöţĥîñĝ éļšé, šö ţĥé šàḿé
ţöķéñ ĥöļđš îñ éṽéŕý ĥöḿé. absent çŕéàţéš àñ éđîţîöñ, àñđ * ŵŕîţéš ŵĥàţéṽéŕ
îš ţĥéŕé, à ƃļîñđ ŵŕîţé öñļý à þéŕšöñ ḿàý šéñđ. Éṽéŕý if_match îš çĥéçķéđ
àĝàîñšţ ţĥé çöñţéñţ àš îţ šţööđ ŵĥéñ ţĥé çĥàñĝé šéţ ƃéĝàñ, šö à šéñđéŕ ñéṽéŕ
çöḿþüţéš àñ îñţéŕḿéđîàţé ŕéṽîšîöñ, àñđ šéṽéŕàļ öþéŕàţîöñš öñ öñé ƃļöçķ éàçĥ
šéñđ ţĥé ŕéṽîšîöñ ţĥéîŕ šéñđéŕ ŕéàđ.
À set_content öñ à đéŕîṽéđ éđîţîöñ ŕéçöŕđš îţš ƃàšîš öñ ţĥé éđîţîöñ îţšéļƒ, àš
îţš đéŕîṽàţîöñ (Edition.Derived): ţĥé àüţĥöŕîţàţîṽé éđîţîöñ àñđ ţĥé ŕéṽîšîöñ
ţĥé öþéŕàţîöñ ñàḿéš àš basis, éļšé ţĥé ŕéṽîšîöñ ţĥé öþéŕàţîöñš ƃéƒöŕé îţ ļéƒţ.
Àñ éđîţ ţĥàţ ñàḿéš ñö ƃàšîš ķééþš ţĥé đéŕîṽàţîöñ ţĥé éđîţîöñ ĥàš. À ŕéàđ ţàķéš à
đéŕîṽéđ éđîţîöñ'š ƃàšîš, àñđ ŵĥéţĥéŕ ţĥé àüţĥöŕîţàţîṽé éđîţîöñ ĥàš ḿöṽéđ šîñçé,
ƒŕöḿ ţĥàţ đéŕîṽàţîöñ ŵĥéŕé ţĥé éđîţîöñ çàŕŕîéš öñé, àñđ ƒŕöḿ ţĥé ĥöšţ öţĥéŕŵîšé.
À ĶƂƑ ƃüñđļé çàŕŕîéš éàçĥ éđîţîöñ'š đéŕîṽàţîöñ, šö à ƃüñđļé ŕéàđ ƃàçķ ĥöļđš ţĥé
ƃàšîš îţ ŵàš ŵŕîţţéñ ŵîţĥ.
À þöšîţîöñ ñàḿéš ţĥàţ çöñţéñţ ţöö. Àñ éđîţ'š start àñđ end, à ŕüñ range,
àñđ ţĥé ŕüñ îñđéẋ à path ŵàļķš ţĥŕöüĝĥ àļļ ŕéƒéŕ ţö ţĥé éđîţîöñ àţ ţĥé
ŕéṽîšîöñ ţĥé šéñđéŕ ŕéàđ, àñđ ţĥé àþþļîéŕ ḿöṽéš éàçĥ ţĥŕöüĝĥ ţĥé ţéẋţ ţĥé
öþéŕàţîöñš ƃéƒöŕé îţ çĥàñĝéđ îñ ţĥé šàḿé éđîţîöñ, îñ ţĥé öŕđéŕ ţĥéý ŵéŕé šéñţ:
ţŵö ƒîẋéš kapi check þŕîñţš ƒöŕ đéŕéñţ ŵöŕđš öƒ öñé ƃļöçķ, éàçĥ ĝüàŕđéđ ƃý
ţĥé ŕéṽîšîöñ ţĥé çĥéçķ ŕéàđ, ƃöţĥ ļàñđ ŵĥéŕé ţĥéîŕ šéñđéŕ ḿéàñţ. À þöšîţîöñ
îñšîđé ţéẋţ àñ éàŕļîéŕ öþéŕàţîöñ ŕéþļàçéđ, öŕ àƒţéŕ à set_content öƒ ţĥé
šéǫüéñçé îţ ļîéš îñ, ĥàš ñö þļàçé îñ ţĥé éđîţîöñ àš îţ šţàñđš, àñđ ţĥé
öþéŕàţîöñ îš ŕéƒüšéđ àš guard (overlap) ŵîţĥ à ḿéššàĝé ñàḿîñĝ ƃöţĥ
öþéŕàţîöñš ƃý ţĥéîŕ þļàçé îñ ţĥé çĥàñĝé šéţ. À find ḿàţçĥéš ţĥé ţéẋţ àš ţĥé
éàŕļîéŕ öþéŕàţîöñš ļéƒţ îţ, àñđ àñ àññöţàţîöñ'š àñçĥöŕ ḿàŕķš ţĥàţ ţéẋţ. À
find îš þļàçéĥöļđéŕ ţéẋţ, šö ţĥé ţéẋţ à ŕéàđ šĥöŵš çàñ ƃé šéñţ ƃàçķ àš îţ
ŕéàđš: àñ îñļîñé çöđé ĥàš žéŕö ŵîđţĥ üñļéšš à <x id="…"/> ţöķéñ ñàḿéš îţ, àñđ
à ţöķéñ ḿàţçĥéš öñļý ţĥé çöđé îţ ñàḿéš. À replace_text ţàķéš à path ţö ţĥé
þļüŕàļ ƒöŕḿ öŕ šéļéçţ çàšé îţš éđîţš àŕé îñ, öñ ţĥé öþéŕàţîöñ ƒöŕ éṽéŕý éđîţ öŕ
öñ àñ éđîţ, ŵĥöšé öŵñ path öṽéŕŕîđéš îţ. Àñ
îñ-þŕöçéšš çàļļéŕ ţĥàţ ƃüîļđš éàçĥ öþéŕàţîöñ öñ ţĥé ŕéšüļţ öƒ ţĥé öñé ƃéƒöŕé
îţ, àš à ţŕàñšƒöŕḿ'š þàššéš đö, àþþļîéš ţĥéḿ ŵîţĥ BlockEnv.Chained, üñđéŕ
ŵĥîçĥ éṽéŕý þöšîţîöñ ŕéàđš ţĥé éđîţîöñ àš ţĥé öþéŕàţîöñš ƃéƒöŕé îţ ļéƒţ îţ.
Ţĥé àþþļîéŕ
change.ApplyBlock àþþļîéš çöñţéñţ öþéŕàţîöñš ţö öñé ƃļöçķ îñ ḿéḿöŕý àñđ
ŕéţüŕñš öñé ŕéšüļţ þéŕ öþéŕàţîöñ. Îţ éñƒöŕçéš ţĥé ŕüļéš éṽéŕý çöñţéñţ öþéŕàţîöñ
öƃéýš: þļàçéĥöļđéŕ ţéẋţ îš þàŕšéđ àĝàîñšţ à ŕéƒéŕéñçé çöđé šéţ, îñļîñé çöđéš
ķééþ ţĥéîŕ éđîţîñĝ çöñšţŕàîñţš, þļüŕàļ àñđ šéļéçţ šţŕüçţüŕé îš ķéþţ, ŕüñ ƒļàĝš
šüŕṽîṽé, àñđ öṽéŕļàýš ƒöļļöŵ ţĥé éđîţ öñ éṽéŕý éđîţîöñ. change.Consequences
šàýš ŵĥàţ àñ àþþļîéđ éđîţ đöéš ţö àñ éđîţîöñ'š šţàţüš àñđ öŕîĝîñ, àñđ
change.Diff ţüŕñš ţŵö ƃļöçķš îñţö ţĥé öþéŕàţîöñš ƃéţŵééñ ţĥéḿ. Ţĥé àþþļîéŕ
ñöţé đéšçŕîƃéš éàçĥ ŕüļé.
Ţĥé šéŕṽîçé
change.NewService(formats, homes, options…) ƃüîļđš ţĥé šéŕṽîçé.
Readŕéàđš à þàĝé öƒ à đöçüḿéñţ'š ƃļöçķš. Éàçĥ ƃļöçķ çàŕŕîéš ţĥé ŕéƒéŕéñçé ţö çöþý îñţö àñ öþéŕàţîöñ, ţĥé ŕéṽîšîöñ ţö šéñđ àšif_match, ţĥé çöñţéñţ àš þļàçéĥöļđéŕ ţéẋţ, îţš îñļîñé çöđéš ŵîţĥ ţĥéîŕ àţţŕîƃüţéš àñđ ţĥé àţţŕîƃüţéšset_attributeçàñ ŵŕîţé, îţš þļüŕàļš àñđ šéļéçţš ŵîţĥ ţĥé þàţĥ ţö éàçĥ ƃŕàñçĥ, îţš öţĥéŕ éđîţîöñš ŵîţĥ ţĥéîŕ šţàţüš àñđ šţàļéñéšš, éàçĥ öñé'š öŵñ þļüŕàļš àñđ šéļéçţš àñđ îţš çöđéš ŵĥéŕé ţĥéý đéŕ ƒŕöḿ ţĥé ƃļöçķ'š, àñđ ţĥé öþéŕàţîöñš îţ àççéþţš. À ŕéàđ öƒ ţĥé ƒîļé öñé éđîţîöñ ļîṽéš îñ, šüçĥ àš ţĥé Ĝéŕḿàñ ƒîļé öƒ àñ Éñĝļîšĥ þàĝé, šĥöŵš ţĥàţ éđîţîöñ àš éàçĥ ƃļöçķ'š öŵñ, ŵîţĥ ţĥé đöçüḿéñţ'š öŵñ éđîţîöñ àḿöñĝ ţĥé öţĥéŕš, šö à ŕéƒéŕéñçé çöþîéđ ƒŕöḿ îţ éđîţš ţĥé Ĝéŕḿàñ. À þàĝé éñđš ŵîţĥ à çüŕšöŕ; à çüŕšöŕ îñţö à đöçüḿéñţ ţĥàţ çĥàñĝéđ šîñçé îš ŕéƒüšéđ àšstale. À þàĝé öƒ à đöçüḿéñţ à ĥöḿé ķééþš ŵĥöļé àļšö ļîšţš ţĥé ŵŕîţéš ţö îţ ţĥàţ đîđ ñöţ ļàñđ (Page.Divergent, ƒŕöḿ àchange.DivergentSession), éàçĥ ŵîţĥ ţĥé ƃļöçķš à ŕéƃàšé ļéƒţ çöñţéšţéđ.ReadEachŕéàđš éṽéŕý ƃļöçķ öƒ à đöçüḿéñţ îñ öñé þàšš àñđ ĥàñđš éàçĥ ţö à çàļļƃàçķ ƃéšîđé ţĥé ƃļöçķ îţ ŵàš ŕéàđ ƒŕöḿ, ƒöŕ à çöḿḿàñđ ļîñé ţĥàţ šţŕéàḿš à ŵĥöļé đöçüḿéñţ.Applyàþþļîéš à çĥàñĝé šéţ îñ ţŵö þĥàšéš. Îţ çĥéçķš éàçĥ öþéŕàţîöñ'š ƃöđý àšDecodeđöéš, šîñçé à šéñđéŕ îñ ţĥé þŕöçéšš ñéṽéŕ þàššéđ ţĥé đéçöđéŕ, àšķš ţĥé þöļîçý àƃöüţ éṽéŕý öþéŕàţîöñ, ĝŕöüþš ţĥé öþéŕàţîöñš ƃý đöçüḿéñţ, àñđ öþéñš éàçĥ đöçüḿéñţ îñ îţš ĥöḿé. Îţ ţĥéñ þŕéþàŕéš éṽéŕý đöçüḿéñţ: ţĥé ĥöḿé ŕéàđš îţ, ţĥé šéŕṽîçé'š éđîţöŕ àþþļîéš ţĥé öþéŕàţîöñš àđđŕéššéđ ţö éàçĥ ƃļöçķ, àñđ ţĥé ĥöḿé šţàĝéš ţĥé ŕéšüļţ. Ţĥé šéŕṽîçé ŕéƒüšéš àñ éđîţîöñ ţĥé šţàĝéđ ƒîļé đöéš ñöţ çĥàñĝé, ƃéçàüšé ţĥé ƒöŕḿàţ ĥàš ñö þļàçé ƒöŕ îţ ţĥéŕé, àñđ ŕüñš ţĥé çöḿḿîţ çĥéçķ öṽéŕ éṽéŕý çĥàñĝéđ éđîţîöñ. ΃ àñý öþéŕàţîöñ öƒ àñý đöçüḿéñţ îš ŕéƒüšéđ, ñöţĥîñĝ îš ŵŕîţţéñ: ţĥé ŕéƒüšéđ öþéŕàţîöñš šàý ŵĥý àñđ éṽéŕý öţĥéŕ öñé îšnot_applied. Öţĥéŕŵîšé ţĥé šéŕṽîçé ţàķéš ţĥé çöḿḿîţ ļöçķš, šéţţļéš éàçĥ đöçüḿéñţ, àñđ çĥéçķš àĝàîñ àñý đöçüḿéñţ îţš ĥöḿé àþþļîéđ à šéçöñđ ţîḿé, šîñçé ţĥàţ þàšš îš ţĥé öñé ţĥàţ ļàñđš. Îţ ţĥéñ çöḿḿîţš éàçĥ đöçüḿéñţ àñđ, ŵîţĥ ţĥé ļöçķš šţîļļ ĥéļđ, àþþļîéš ţĥé đéçîšîöñš àñđ àššéţ öþéŕàţîöñš, ŵĥîçĥ ƃîñđ ţö ţĥé çöñţéñţ ţĥàţ ļàñđéđ, àñđ ŕéçöŕđš ţĥé çĥàñĝé.Describešàýš ŵĥàţ à ƒöŕḿàţ šüþþöŕţš.DescribeFormatĥàñđšFormatOpsţĥé öþéŕàţîöñš ţĥé ƒöŕḿàţ'š ŕöüñđ ţŕîþ çàŕŕîéš (set_contentîñ éîţĥéŕ ƒöŕḿ,replace_text, àñđremove_editionŵĥéŕé ţĥé ƒöŕḿàţ ĥöļđš îţš éđîţîöñš îñ öñé ƒîļé, öŕ ķééþš éàçĥ îñ à ƒîļé öƒ îţš öŵñ àñđ îţš ŵŕîţéŕ ŕéḿöṽéš à ƃļöçķ ţĥéŕé) àñđ ŵĥàţ îţš ŵŕîţéŕ đéçļàŕéš (É-02),insert_blockàñđdelete_blockàḿöñĝ îţ ŵĥéŕé ţĥé ŵŕîţéŕ çàñ àđđ àñđ ŕéḿöṽé ƃļöçķš. Ƒöŕ à đöçüḿéñţ ţĥé đéçļàŕàţîöñ îš ţĥé öñé îţš ĥöḿé ŕéþöŕţš ƒöŕ ţĥé đöçüḿéñţ'š ŵŕîţéŕ (DocInfo.Capabilities), ŵĥîçĥApplyBlockàþþļîéš éṽéŕý öþéŕàţîöñ ŵîţĥ, ļéšš ţĥé šţŕüçţüŕàļ öþéŕàţîöñš îţš ĥöḿé çàññöţ ŵŕîţé ţĥéŕé.WithDescriberŕéþļàçéšDescribeFormat, àñđ ţĥàţ öñé ƒüñçţîöñ îš ŵĥàţDescribeŕéþöŕţš, ŵĥàţ à ŕéàđ ļîšţš þéŕ ƃļöçķ, àñđ ŵĥàţApplyŕéƒüšéš öüţšîđé öƒ.Historyļîšţš ţĥé ŕéçöŕđéđ çĥàñĝéš ţö öñé éđîţîöñ, ḿöšţ ŕéçéñţ ƒîŕšţ, ƃéšîđé ţĥé ŕéṽîšîöñ ţĥé éđîţîöñ ĥöļđš ñöŵ. Îţ ŕéàđš ţĥé ƃļöçķ ƒŕöḿ îţš ĥöḿé, šö à ŕéƒéŕéñçé ŕéšöļṽéš àš à ŕéàđ ŕéšöļṽéš îţ, àñđ àšķš ţĥéEditionHistoriesĥööķ ƒöŕ ţĥé çĥàñĝéš: éàçĥ ŵîţĥ îţš ŕéçöŕđ, ţĥé ŕéṽîšîöñš àŕöüñđ îţ, ţĥé ƃàšîš à đéŕîṽéđ éđîţîöñ ŵàš ḿàđé ƒŕöḿ, ŵĥö ḿàđé îţ (ñüļļ ŵĥéñ ñöƃöđý ķñöŵš, àš ƒöŕ àñ éđîţ ḿàđé öüţšîđé ķàþî), ţĥŕöüĝĥ ŵĥîçĥ šüŕƒàçé, àñđ ŵĥéñ.
À đöçüḿéñţ'š éđîţîöñ ļîṽéš îñ ţĥé đöçüḿéñţ (îţš öŵñ éđîţîöñ, öŕ öñé à ƃîļîñĝüàļ
ƒîļé ĥöļđš), îñ à ƒîļé öƒ îţš öŵñ (à þŕöĵéçţ'š ţàŕĝéţ ƒîļé), öŕ ñöŵĥéŕé (à
ḿöñöļîñĝüàļ đöçüḿéñţ öüţšîđé à þŕöĵéçţ, öŕ àñ éđîţîöñ ŵîţĥ à ţöñé öŕ à çĥàññéļ
îñ à ƃîļîñĝüàļ ƒîļé, ŵĥîçĥ ķééþš öñé ţŕàñšļàţîöñ þéŕ ļàñĝüàĝé). Àñ öþéŕàţîöñ
öñ àñ éđîţîöñ ŵîţĥ ñö ĥöḿé îš ŕéƒüšéđ àš unsupported.
Àđđîñĝ àñđ ŕéḿöṽîñĝ ƃļöçķš
insert_block àñđ delete_block çĥàñĝé ŵĥîçĥ ƃļöçķš à đöçüḿéñţ ĥöļđš. À
ŵŕîţéŕ ŕéþļàýš à šķéļéţöñ ŵîţĥ à šļöţ ƒöŕ éṽéŕý ƃļöçķ îţš ŕéàđéŕ ŕéàđ àñđ ñöñé
ƒöŕ à ñéŵ öñé, šö ţĥéšé ţŵö àŕé ŵŕîţţéñ ƃý ţĥé ƒöŕḿàţ: ţĥé šéŕṽîçé ĥàñđš ţĥéḿ
ţö ţĥé ĥöḿé, àñđ ţĥé ƒöŕḿàţ'š ŵŕîţéŕ ŵŕîţéš ţĥé šĥéļļ öƒ éàçĥ ƃļöçķ àđđéđ öŕ
ŕéḿöṽéđ. À ŵŕîţéŕ đéçļàŕéš ţĥé öþéŕàţîöñš îţ ŵŕîţéš àñđ ŵŕîţéš ţĥéḿ ţĥŕöüĝĥ
format.StructureEditor.
Describe ŕéþöŕţš ţĥéḿ ŵĥéŕé à ŵŕîţéŕ đéçļàŕéš ţĥéḿ, àñđ éṽéŕý öţĥéŕ ƒöŕḿàţ
ŕéƒüšéš ţĥéḿ àš unsupported. Ţĥé ĴŠÖÑ, ÝÀḾĻ àñđ ÀŔƂ ŵŕîţéŕš đéçļàŕé ƃöţĥ: îñ
à ķéý-ṽàļüé çàţàļöĝ à ƃļöçķ'š šĥéļļ îš îţš ķéý àñđ ţĥé ṽàļüé ƃéšîđé îţ. À
ŵŕîţéŕ'š đéçļàŕàţîöñ çàñ đéþéñđ öñ îţš çöñƒîĝüŕàţîöñ, šö đéšçŕîƃîñĝ à đöçüḿéñţ
ŕéþöŕţš ţĥé öþéŕàţîöñš îţš ĥöḿé çàñ ŵŕîţé îñ ţĥàţ đöçüḿéñţ
(StructuralSession), àñđ à ŕéàđ'š þéŕ-ƃļöçķ öþéŕàţîöñš àñđ Apply ƒöļļöŵ
ţĥé šàḿé ļîšţ.
delete_blockàđđŕéššéš à ƃļöçķ àñđ çàŕŕîéšif_matchàš à ḿàþ ƒŕöḿ éđîţîöñ ţö ŕéṽîšîöñ. Ţĥé ḿàþ ñàḿéš ţĥé ƃļöçķ'š öŵñ éđîţîöñ, àñđ ḿàý ñàḿé àñý öţĥéŕ éđîţîöñ îţš šéñđéŕ ŕéàđ. À ḿàþ ŵîţĥöüţ ţĥé öŵñ éđîţîöñ îšinvalid; àñ éđîţîöñ ñàḿéđ àţ àñöţĥéŕ ŕéṽîšîöñ îšstale, ŵîţĥ ţĥé éđîţîöñ àš îţ šţàñđš, àñđ šö îš àñ éđîţîöñ ţĥé ḿàþ ñàḿéš àñđ ţĥé ƃļöçķ ļàçķš. Ţĥé ƃļöçķ ĝöéš ŵîţĥ éṽéŕý éđîţîöñ îţ ĥöļđš, îţš öŵñ àñđ éàçĥ ţŕàñšļàţîöñ îñ à ƒîļé öƒ îţš öŵñ, ŵĥéţĥéŕ ţĥé ḿàþ ñàḿéš îţ öŕ ñöţ.insert_blockñàḿéš ţĥé đöçüḿéñţ, ţĥé ñéŵ ƃļöçķ'š ķéý (name), ţĥé ķéý îţ ĝöéšafteröŕbefore, àñđ ţĥé çöñţéñţ öƒ éàçĥ éđîţîöñ. Ţĥé ñéŵ ƃļöçķ ĝöéš îñ ţĥé öƃĵéçţ öŕ ḿàþþîñĝ îţš ķéý þàţĥ ñàḿéš, ƃéšîđé îţš àñçĥöŕ öŕ, ŵîţĥ ñéîţĥéŕ, ļàšţ ţĥéŕé. Ţĥé đöçüḿéñţ'š öŵñ éđîţîöñ îš ŕéǫüîŕéđ, àñđ àñý öţĥéŕ ḿüšţ ļîṽé îñ à ƒîļé öƒ îţš öŵñ. À ķéý à ƃļöçķ àļŕéàđý àñšŵéŕš ţö îšstale, à ñéîĝĥƃöüŕ ñö ƃļöçķ àñšŵéŕš ţö îšnot_found, àñđ ţĥé çöñţéñţ öƃéýš ţĥé ŕüļéš öƒ éṽéŕý çöñţéñţ öþéŕàţîöñ: à ñéŵ ƃļöçķ ĥàš ñö îñļîñé çöđéš ţö ñàḿé, šö ţéẋţ ŵîţĥ à çöđé þļàçéĥöļđéŕ îš àguardŕéƒüšàļ.
Öþéŕàţîöñš àþþļý îñ öŕđéŕ, àñđ éàçĥ šééš ŵĥàţ ţĥé öñéš ƃéƒöŕé îţ ļéƒţ: à ƃļöçķ
çàñ ĝö ƃéšîđé öñé àñ éàŕļîéŕ öþéŕàţîöñ àđđéđ, àñđ à ƃļöçķ îš ŕéþļàçéđ îñ îţš
þļàçé ƃý àđđîñĝ ţĥé ñéŵ öñé ƃéšîđé îţ àñđ ţĥéñ ŕéḿöṽîñĝ ţĥé öļđ. Àñ öþéŕàţîöñ
ţĥàţ çĥàñĝéš ţĥé çöñţéñţ öƒ à ƃļöçķ ţĥé çĥàñĝé šéţ àđđš öŕ ŕéḿöṽéš îš ŕéƒüšéđ
àš invalid; à ñéŵ ƃļöçķ'š çöñţéñţ ţŕàṽéļš îñ îţš editions.
À ĥöḿé ŵŕîţéš ţĥé šţŕüçţüŕàļ éđîţš ƒîŕšţ àñđ ţĥéñ àþþļîéš ţĥé ŕéšţ öƒ ţĥé
çĥàñĝé šéţ ţö ŵĥàţ ţĥé ŵŕîţéŕ ŵŕöţé. À ñéŵ ƃļöçķ'š çöñţéñţ îš ţĥéŕéƒöŕé ŵĥàţ
ţĥé ƒöŕḿàţ ŕéàđš ƃàçķ (àñ ÎÇÜ àŕĝüḿéñţ îñ àñ ÀŔƂ ḿéššàĝé ŕéàđš àš ţĥé
þŕöţéçţéđ çöđé îţ îš), àñđ ţĥé ŕéšüļţ'š after îš ţĥé ŕéṽîšîöñ à ļàţéŕ ŕéàđ
ŕéþöŕţš. À ñéŵ ƃļöçķ ţĥé ƒöŕḿàţ ŕéàđš đéŕéñţļý ƒŕöḿ îţš çöñţéñţ, öŕ đöéš
ñöţ ŕéàđ àţ àļļ, àñđ à ŕéḿöṽéđ ƃļöçķ îţ šţîļļ ŕéàđš, àŕé ŕéƒüšéđ àš
unsupported. Ţĥé çöḿḿîţ çĥéçķ šééš éàçĥ ñéŵ éđîţîöñ àš çŕéàţéđ, àñđ ţĥé
ŕéçöŕđ ĥöļđš éṽéŕý éđîţîöñ àđđéđ öŕ ŕéḿöṽéđ.
Ĥöḿéš
À ĥöḿé ĥöļđš ţĥé ţéẋţ öƒ đöçüḿéñţš àñđ đéçîđéš ŵĥéñ ţŵö ŵŕîţéŕš çöñƒļîçţ.
type Home interface {
Name() string
Open(ctx context.Context, doc string) (Session, error)
}
Name îš ţĥé ĥöḿé àš à ŕéšüļţ ŕéþöŕţš îţ: file, workspace öŕ
stream:<id>. À šéššîöñ ŕéàđš ţĥé đöçüḿéñţ àţ îţš ĥéàđ, šţàĝéš à çĥàñĝé ƃý ŕüññîñĝ ţĥé
šéŕṽîçé'š éđîţöŕ öṽéŕ îţš ƃļöçķš, àñđ ĥàñđš ƃàçķ à šţàĝéđ çĥàñĝé ţĥàţ ñàḿéš ţĥé
çöḿḿîţ ļöçķš îţ ñééđš, šéţţļéš (ḿàķéš šüŕé ţĥé çĥàñĝé šţîļļ àþþļîéš ŵîţĥ ţĥöšé
ļöçķš ĥéļđ), çöḿḿîţš àñđ ŕéļéàšéš. À ĥöḿé ţĥàţ ŕéàđš à đöçüḿéñţ ŵĥöļé šţŕéàḿš
éṽéŕý ƃļöçķ þàšţ ţĥé éđîţöŕ; öñé ţĥàţ ķééþš ŕöŵš ļööķš üþ öñļý ţĥé ƃļöçķš ţĥé
çĥàñĝé ñàḿéš. Ţĥé šéŕṽîçé ţàķéš ţĥé ļöçķš öƒ éṽéŕý đöçüḿéñţ öƒ à çĥàñĝé šéţ îñ
öñé öŕđéŕ, ƃý ţĥéîŕ ķéýš, šö ţŵö çĥàñĝé šéţš ţàķé ţĥé ļöçķš ţĥéý šĥàŕé îñ ţĥàţ
öŕđéŕ àñđ ŵàîţ ƒöŕ éàçĥ öţĥéŕ ŵîţĥöüţ đéàđļöçķ. À çĥàñĝé šéţ ţĥàţ ñàḿéš öñé
ƒîļé ţĥŕöüĝĥ ţŵö đöçüḿéñţš, šüçĥ àš ţŵö ḿéḿƃéŕš öƒ öñé àŕçĥîṽé öŕ à ƒîļé àñđ à
ļîñķ ţö îţ, îš ŕéƒüšéđ àš invalid, ƃéçàüšé éàçĥ đöçüḿéñţ ŵöüļđ šţàĝé ţĥé
ŵĥöļé ƒîļé ƒŕöḿ ŵĥàţ îţ ŕéàđ.
changetest.Run îš ţĥé çöñƒöŕḿàñçé šüîţé éṽéŕý ĥöḿé þàššéš: àñ éđîţ ļàñđš àñđ
ŕéàđš ƃàçķ, à ŕéþļàýéđ çĥàñĝé šéţ îš šţàļé àñđ çàŕŕîéš ţĥé çüŕŕéñţ çöñţéñţ
ŵĥîļé ŵŕîţîñĝ ñöţĥîñĝ, éđîţš ţö đéŕéñţ ƃļöçķš çöḿḿüţé, àļšö ŵĥéñ öñé ļàñđš
ƃéţŵééñ ţĥé öţĥéŕ'š šţàĝé àñđ çöḿḿîţ, à ŕéƒüšàļ îñ öñé đöçüḿéñţ ļéàṽéš éṽéŕý
đöçüḿéñţ àš îţ ŵàš, ŵĥéţĥéŕ îţ îš ƒöüñđ àţ ţĥé šţàĝé öŕ àţ ţĥé çöḿḿîţ, à
þŕéṽîéŵ ŵŕîţéš ñöţĥîñĝ, à ḿîššîñĝ ƃļöçķ îš ñöţ ƒöüñđ, ţĥé šàḿé çöñţéñţ šàîđ
àĝàîñ îš üñçĥàñĝéđ, à ƒîļé ķééþš îţš ḿöđé, à ŕéḿöṽéđ ţŕàñšļàţîöñ ŕéàđš ƃàçķ
àƃšéñţ ŵĥîļé à ŕéþļàý öƒ îţš ŕéḿöṽàļ îš šţàļé àñđ ŵŕîţéš ñöţĥîñĝ àñđ à
set_content çŕéàţéš îţ àĝàîñ, àñđ à çĥàñĝé šéţ ŵîţĥ ñö öþéŕàţîöñ àþþļîéš àñđ
ŵŕîţéš ñöţĥîñĝ. Éàçĥ ĥöḿé ŕüñš ţĥé ŕéḿöṽàļ öñ
éàçĥ ķîñđ öƒ ţŕàñšļàţîöñ îţ ĥöļđš: ţĥé šţŕéàḿ'š öŵñ ŕöŵš; ƒöŕ ţĥé ƒîļé ĥöḿé à
ÞÖ çàţàļöĝ àñđ à ĴŠÖÑ ƒîļé'š ţŕàñšļàţîöñ îñ à ƒîļé öƒ îţš öŵñ; ƒöŕ ţĥé þŕöĵéçţ
ĥöḿéš ţĥé çàţàļöĝ à ÞÖ šöüŕçé'š ţàŕĝéţ ţéḿþļàţé ñàḿéš (po/fr.po ƃéšîđé
po/en.po) àñđ ţĥé ĴŠÖÑ ƒîļé à ĴŠÖÑ šöüŕçé'š ñàḿéš; àñđ ƒöŕ ţĥé ŵöŕķšþàçé ĥöḿé
ţĥé Ƒŕéñçĥ öƒ à ÞÖ çàţàļöĝ àñđ öƒ à ĴŠÖÑ ƒîļé, ŵĥîçĥ îţ ķééþš ŵĥîļé ţĥéîŕ ƒîļéš
đö ñöţ éẋîšţ. Ŵĥéŕé ţĥé ţŕàñšļàţîöñ ļîṽéš àþàŕţ ƒŕöḿ îţš šöüŕçé, ţĥé šüîţé àļšö
çĥéçķš ţĥàţ ţĥé ŕéḿöṽàļ îš ŵŕîţţéñ ţĥéŕé àñđ ţĥé šöüŕçé ķééþš îţš ƃýţéš.
Ţĥé ƒîļé ĥöḿé (core/change/filehome) ķééþš éàçĥ đöçüḿéñţ àš à ƒîļé. À
šţàĝé ŕéàđš ţĥé đöçüḿéñţ ţĥŕöüĝĥ îţš ƒöŕḿàţ'š ŕéàđéŕ ŵîţĥ ţĥé ŵŕîţéŕ'š
šķéļéţöñ šţöŕé ŵîŕéđ, àñđ ŵŕîţéš ţĥé ŕéšüļţ ţĥŕöüĝĥ ţĥé šàḿé ƒöŕḿàţ'š ŵŕîţéŕ
îñţö à ţéḿþöŕàŕý ƒîļé ƃéšîđé ţĥé đöçüḿéñţ ŵîţĥ ţĥé đöçüḿéñţ'š ḿöđé. Éṽéŕý ƒîļé
à šţàĝé ŕéàđš îš ĥàšĥéđ ƃéƒöŕé îţ îš ŕéàđ. À çöḿḿîţ ţàķéš ţĥé àđṽîšöŕý ļöçķ
(core/storage/filelock) öƒ éàçĥ ƒîļé, ĥàšĥéš ţĥé ƒîļéš àĝàîñ, àñđ ŕéñàḿéš ţĥé
šţàĝéđ ƒîļéš öñţö ţĥéḿ ŵĥéñ éàçĥ îš šţîļļ ŵĥàţ ţĥé šţàĝé ŕéàđ. Ŵĥéñ öñé ḿöṽéđ,
ţĥé ĥöḿé ŕéàđš ţĥéḿ àĝàîñ üñđéŕ ţĥé ļöçķš, àþþļîéš ţĥé çĥàñĝé öñçé ḿöŕé àñđ
ŕéñàḿéš ţĥàţ ŕéšüļţ; àñ öþéŕàţîöñ ŵĥöšé if_match ţĥé ñéŵ çöñţéñţ ƃŕéàķš îš
ŕéƒüšéđ àš stale, àñđ à ƒîļé ţĥàţ ḿöṽéš đüŕîñĝ ţĥàţ šéçöñđ þàšš àš ŵéļļ îš
doc_changed. Ţŵö þŕöçéššéš ţĥàţ éđîţ đéŕéñţ ƃļöçķš öƒ öñé ƒîļé ƃöţĥ ļàñđ.
Àñ éđîţîöñ ķéþţ îñ à ƒîļé öƒ îţš öŵñ îš ŵŕîţţéñ ţĥŕöüĝĥ ţĥàţ ƒîļé'š šķéļéţöñ,
šö ţĥé ƒîļé îš ñéṽéŕ ŕéŵŕîţţéñ ƒŕöḿ ţĥé đöçüḿéñţ; à ƒîļé ţĥàţ đöéš ñöţ éẋîšţ
ýéţ îš ŵŕîţţéñ ƒŕöḿ ţĥé đöçüḿéñţ'š šķéļéţöñ. À ţŕàñšļàţîöñ çŕéàţéđ ƒöŕ à ƃļöçķ
ţĥé ƒîļé đöéš ñöţ ĥöļđ àŕŕîṽéš, îñ à ƒîļé îñ îţš öŵñ ļàñĝüàĝé, ŵîţĥ à ƃļöçķ öƒ
îţš öŵñ ţĥàţ ţĥé ƒöŕḿàţ'š ŵŕîţéŕ àđđš ƃéšîđé ţĥé ƃļöçķ îţ šîţš ƃý îñ ţĥé
đöçüḿéñţ, üñđéŕ ţĥé ķéý ţĥé ƒîļé ĝîṽéš îţš ķéýš; îñ à ƃîļîñĝüàļ ƒîļé, öŕ ŵĥéŕé
ţĥé ŵŕîţéŕ àđđš ñö ƃļöçķ, ţĥé éđîţ îš ŕéƒüšéđ. À çĥàñĝé šéţ ţĥàţ àđđš öŕ ŕéḿöṽéš
ƃļöçķš ĥàš ţĥé ƒöŕḿàţ'š ŵŕîţéŕ ŵŕîţé ţĥöšé éđîţš îñţö ţĥé đöçüḿéñţ'š ƒîļé àñđ
îñţö ţĥé ƒîļé öƒ éàçĥ éđîţîöñ ţĥé ƃļöçķš ĥöļđ öŕ ñàḿé, ķééþîñĝ ţĥéḿ îñ ḿéḿöŕý
üñţîļ ţĥé çöḿḿîţ, àñđ ţĥé šţàĝé'š þàšš ŕéàđš ţĥé ŕéšüļţ. À šţàĝé ţĥàţ ŕéḿöṽéš à
ţŕàñšļàţîöñ à ƃîļîñĝüàļ ƒîļé ĥöļđš, ţĥé đöçüḿéñţ'š öŵñ öŕ ţĥé ţŕàñšļàţîöñ'š
ƒîļé ţĥé ţàŕĝéţ ţéḿþļàţé ñàḿéš, ŕéàđš îţš ŵŕîţé ƃàçķ, àñđ ŕéƒüšéš ţĥé ŕéḿöṽàļ
àš unsupported ŵĥéñ ţĥé ţŕàñšļàţîöñ îš šţîļļ ţĥéŕé: ţĥé ẊĻÎƑƑ àñđ ŢḾẊ ŵŕîţéŕš
ŵŕîţé à ţŕàñšļàţîöñ öƒ éṽéŕý üñîţ, ƒŕöḿ ţĥé šöüŕçé ŵĥéŕé à ƃļöçķ ĥöļđš ñöñé,
šö à ŕéḿöṽàļ ţĥéŕé ŵöüļđ þüţ ţĥé šöüŕçé îñ ţĥé ţŕàñšļàţîöñ'š þļàçé. Ţĥéîŕ
đéšçŕîþţîöñ ļîšţš remove_edition, ŵĥîçĥ ţĥé šţàĝé ţĥéñ ŕéƒüšéš. Ţĥé ŕéàđ-ƃàçķ
ƃéļöñĝš ţö à çĥàñĝé šéţ'š šţàĝé: à ƒļöŵ ţĥàţ ŵŕîţéš à ţŕàñšļàţîöñ'š ƒîļé
ţĥŕöüĝĥ ţĥé ŵŕîţéŕ, šüçĥ àš kapi exec remove-target ŵŕîţîñĝ fr/a.xlf, ĝéţš
ŵĥàţ ţĥé ŵŕîţéŕ ŵŕîţéš, ţĥé šöüŕçé îñ ţĥé ŕéḿöṽéđ ţŕàñšļàţîöñ'š þļàçé. À
ţŕàñšļàţîöñ ķéþţ îñ à ƒîļé îñ îţš öŵñ ļàñĝüàĝé îš à ƃļöçķ öƒ ţĥàţ ƒîļé, šö à
ŕéḿöṽàļ ţàķéš ţĥé ƃļöçķ öüţ öƒ ţĥé ƒîļé ţĥŕöüĝĥ ţĥé ƒöŕḿàţ'š ŵŕîţéŕ
(format.StructureEditor), àš delete_block ţàķéš à ƃļöçķ öüţ öƒ àñ
éđîţîöñ'š ƒîļé: ţĥé ĴŠÖÑ, ÝÀḾĻ àñđ ÀŔƂ ŵŕîţéŕš ŕéḿöṽé à ķéý ŵîţĥ ţĥé çöḿḿéñţ öŕ
ḿéţàđàţà ƃéšîđé îţ. À ƒöŕḿàţ ŵĥöšé ŵŕîţéŕ ŕéḿöṽéš ñö ƃļöçķ, šüçĥ àš Ḿàŕķđöŵñ
öŕ ĤŢḾĻ, đöéš ñöţ ļîšţ remove_edition, àñđ à ŕéḿöṽàļ ţĥéŕé îš ŕéƒüšéđ àš
unsupported. À ĥöḿé ñéṽéŕ đéļéţéš à ƒîļé: à ţŕàñšļàţîöñ'š ƒîļé ŵĥöšé ļàšţ
ƃļöçķ îš ŕéḿöṽéđ ķééþš ŵĥàţ ţĥé ƒöŕḿàţ ŵŕîţéš ƒöŕ ñö ƃļöçķ ({} ƒöŕ ĴŠÖÑ). À
ŕéḿöṽàļ öŕ à çŕéàţîöñ ţĥé ŵŕîţéŕ çàññöţ ḿàķé îñ à ţŕàñšļàţîöñ'š ƒîļé, šüçĥ àš
à ÝÀḾĻ šéǫüéñçé îţéḿ'š, ŕéƒüšéš ţĥàţ öþéŕàţîöñ àļöñé, àñđ ţĥé öţĥéŕ
öþéŕàţîöñš öƒ ţĥé çĥàñĝé šéţ àŕé not_applied, ƃļöçķéđ ƃý îţ.
Ŵĥéŕé ţĥé ŕéàđéŕ àñđ
ţĥé ŵŕîţéŕ ƃöţĥ šţŕéàḿ àñđ ñö ƃļöçķ îš àđđéđ öŕ ŕéḿöṽéđ, ţĥé đöçüḿéñţ îš ñéṽéŕ
ĥéļđ ŵĥöļé. Ţĥé ĥöḿé ŕéþöŕţš ŵĥàţ ţĥé đöçüḿéñţ'š ŵŕîţéŕ đéçļàŕéš: àñ
îñ-þŕöçéšš ŵŕîţéŕ'š đéçļàŕàţîöñ, ŵîţĥ ţĥé ŵŕîţéŕ šþéļļîñĝ à çĥàñĝéđ àţţŕîƃüţé
öŕ à ñéŵ çöđé îţšéļƒ (change.WriterCapabilities), öŕ à þļüĝîñ ƒöŕḿàţ'š
ḿàñîƒéšţ đéçļàŕàţîöñ, ŵĥöšé ŵŕîţéŕ šþéļļš ţĥéḿ ŵĥéñ îţ ŵŕîţéš
(change.DeclaredCapabilities). À ĥöḿé ĝîṽéñ à ƃàçķüþ šüƒƒîẋ çöþîéš éàçĥ ƒîļé
à çöḿḿîţ ŕéþļàçéš ƃéšîđé îţ, üñđéŕ ţĥé ļöçķ, ƒŕöḿ ţĥé ƃýţéš ţĥé çĥàñĝé ŵàš
àþþļîéđ ţö. Ţĥé îḿþļéḿéñţàţîöñ ñöţé
Ţĥé ƒîļé ĥöḿé ĥàš ţĥé đéţàîļš.
Ţĥé ŵöŕķšþàçé ĥöḿé (core/workhome) ķééþš ţĥé éđîţîöñš ţĥàţ ĥàṽé ñö ƒîļé
ýéţ: à ĥéļđ-ƃàçķ ļöçàļé'š đŕàƒţš àñđ ţĥé éđîţš ḿàđé ţö ţĥéḿ
(Ç-03). Šüçĥ
àñ éđîţîöñ ƃéļöñĝš ţö à đöçüḿéñţ ŵĥöšé öŵñ éđîţîöñ îš à ƒîļé, šö ţĥé ƒîļé ĥöḿé
ŕéàçĥéš îţ: ţĥé ļàýöüţ ñàḿéš ţĥé ƒîļé ţĥé éđîţîöñ ŵîļļ ƃé đéļîṽéŕéđ ţö, àñđ à
ķééþéŕ (filehome.Keeper) ţĥàţ ĥöļđš îţ üñţîļ ţĥéñ. À ŕéàđ ĵöîñš ţĥé ķéþţ
éđîţîöñ ţö ţĥé đöçüḿéñţ'š ƃļöçķš ƃý ƃļöçķ ķéý, ŵîţĥ ţĥé šţàţüš àñđ öŕîĝîñ ţĥé
ŵöŕķšþàçé ĥöḿé ķééþš ƃéšîđé îţš ŕüñš, àñđ ŕéþöŕţš ţĥé ŵöŕķšþàçé ĥöḿé àš îţš
ĥöḿé (change.Place.Home, Page.Home). À šţàĝé ĥàñđš ţĥé éđîţîöñš ţĥé
éđîţöŕ çĥàñĝéđ ţö ţĥé ķééþéŕ, ţĥé çöḿḿîţ ļöçķ îš ţĥé ļöçķ öƒ ţĥé ƒîļé ţĥé
éđîţîöñ ŵîļļ ƃé đéļîṽéŕéđ ţö, àñđ ţĥé çöḿḿîţ àþþéñđš ţĥé çĥàñĝé'š ŕéçöŕđ öñļý
ŵĥîļé ţĥé éđîţîöñ'š ĥéàđ îñ ţĥé ļöĝ îš šţîļļ ţĥé öñé ţĥé šţàĝé ŕéàđ
(workspace.Backend.RecordIf); à ĥéàđ ţĥàţ ḿöṽéđ îñ ƃéţŵééñ ḿàķéš ţĥé šţàĝé
ŕéàđ àñđ àþþļý àĝàîñ, àš à ḿöṽéđ ƒîļé đöéš, àñđ à ĥéàđ ţĥàţ ḿöṽéš àƒţéŕ ţĥé
šţàĝé šéţţļéđ ŕéƒüšéš ţĥé çĥàñĝé šéţ doc_changed ŵîţĥ ñöţĥîñĝ ļàñđéđ. Ţĥé
ŕéçöŕđ îš ţĥé çöḿḿîţ:
change.RecordingStaged ĥàñđš ţĥé šţàĝéđ çĥàñĝé ţĥé ŕéçöŕđ öƒ îţš đöçüḿéñţ
ƃéƒöŕé Commit, ţĥé ŕéšüļţ ñàḿéš ţĥé ŵöŕķšþàçé ĥöḿé ƒöŕ ţĥàţ éđîţîöñ
(StagedFile.Home), àñđ ţĥé šéŕṽîçé'š ŕéçöŕđéŕ ŕéçöŕđš ñöţĥîñĝ ḿöŕé ƒöŕ îţ
(StagedFile.Recorded). Ţĥé çöñƒöŕḿàñçé šüîţé ŕüñš öñ ţĥé ŵöŕķšþàçé ĥöḿé ŵîţĥ
ţĥé éđîţîöñ ƒîļéš öƒ à ĥéļđ-ƃàçķ ļöçàļé àš îţš đöçüḿéñţš, àñđ ŕéḿöṽéš ţĥé Ƒŕéñçĥ
îţ ķééþš öƒ à ÞÖ çàţàļöĝ àñđ öƒ à ĴŠÖÑ ƒîļé. À ŕéḿöṽàļ đŕöþš ţĥé ķéþţ ƃļöçķ, ƒöŕ
ţĥé ƒöŕḿàţš ŵĥöšé đéšçŕîþţîöñ ļîšţš remove_edition, àš îţ ŵöüļđ ļéàṽé ţĥé
ƒîļé ţĥé ţŕàñšļàţîöñ ŵîļļ ƃé đéļîṽéŕéđ ţö. Ţĥé ŕéçîþé þîçķš ţĥé
ĥöḿé öƒ à ţŕàñšļàţîöñ ŵĥöšé ƒîļé đöéš ñöţ éẋîšţ: üñđéŕ
materialize: on-converge îţ îš ţĥé ŵöŕķšþàçé ĥöḿé, ŵĥéţĥéŕ öŕ ñöţ ţĥé
ŵöŕķšþàçé ĥöļđš àñýţĥîñĝ öƒ îţ ýéţ, àñđ üñđéŕ manual îţ îš ţĥé ƒîļé, üñļéšš
ţĥé ŵöŕķšþàçé šţîļļ ķééþš à đŕàƒţ öƒ îţ. À þŕöĵéçţ ţĥàţ đéçļàŕéš ŕéđàçţîöñ
ŕéçöŕđš à ķéþţ éđîţîöñ ŕéđàçţéđ àñđ ŕéàđš îţ ƃàçķ ƒŕöḿ ţĥé ṽàüļţ
(Ç-03).
À šţŕéàḿ ĥöḿé ķééþš ţĥé đöçüḿéñţš öƒ öñé šţŕéàḿ öƒ à šéŕṽéŕ'š þŕöĵéçţ àš
ŕöŵš, öñé þéŕ ƃļöçķ, éàçĥ ĥöļđîñĝ éṽéŕý éđîţîöñ öƒ îţš ƃļöçķ. Îţš çöḿḿîţ ļöçķ
îš ţĥé ŕöŵš à šţàĝé ŕéàđ, ĥéļđ öñ öñé đàţàƃàšé ţŕàñšàçţîöñ ƒöŕ éṽéŕý đöçüḿéñţ
öƒ ţĥé çĥàñĝé šéţ; à šéţţļé àþþļîéš ţĥé öþéŕàţîöñš àĝàîñ ţö ŕöŵš ţĥàţ ḿöṽéđ,
àñđ ţĥé çöḿḿîţ šţöŕéš ţĥéḿ ŵîţĥ ţĥéîŕ ĥîšţöŕý àñđ çöḿḿîţš ţĥé ţŕàñšàçţîöñ, šö
ţĥé çĥàñĝé šéţ ļàñđš ŵĥöļé öŕ ñöţ àţ àļļ. À ŕéšüļţ ñàḿéš îţ stream:<id>.
Ŵĥîļé à ŵŕîţé ţĥàţ đîđ ñöţ ļàñđ šţîļļ ñàḿéš à ķéþţ ƃļöçķ (à çöñƒļîçţ ţŵö
ḿàçĥîñéš' ļöĝš ļéƒţ), ţĥé ƒîļé ĥöḿé'š šéššîöñ àñšŵéŕš Contested ƒöŕ îţ
(change.ContestedSession). À þéŕšöñ'š öŕ àñ àĝéñţ'š öþéŕàţîöñ ţĥàţ ļéàṽéš
ţĥàţ ƃļöçķ àš îţ šţàñđš îš ţĥéñ ŕéþöŕţéđ unchanged àñđ šţîļļ ŕéçöŕđéđ, àš ţĥé
đéçîšîöñ ţö ķééþ ţĥé ŵöŕđîñĝ ţĥé ĥéàđ ĥöļđš, šö éṽéŕý ŵàý öƒ đéçîđîñĝ à
çöñƒļîçţ îš à çĥàñĝé šéţ ŵîţĥ if_match ļîķé àñý öţĥéŕ.
Ţĥé ŵöŕķšþàçé ĥöḿé àļšö šéŕṽéš ŵĥöļé đöçüḿéñţš (workhome.Documents): à
ñàţîṽé đöçüḿéñţ öþéñéđ ƒöŕ éđîţîñĝ ţĥàţ ĥàš ñö ƒîļé, ķéþţ àš à ƃļöƃ îñ ţĥé
ļöĝ ŵîţĥ îţš ĥéàđ îñ document_head. À ĶÞŽ'š šöüŕçéš àŕé îţš đöçüḿéñţš,
ñàḿéđ work.kpz!guide.md; ţĥé ķàþî ĥöšţ ŕöüţéš šüçĥ à ŕéƒéŕéñçé ţö ţĥé ĶÞŽ'š
ŵöŕķšþàçé ĥöḿé, šö kapi apply àñđ ţĥé ḾÇÞ éđîţ ţööļš éđîţ à ĶÞŽ àš ţĥéý éđîţ à
ƒîļé. À šéššîöñ ŕéàđš ţĥé ĥéàđ îñţö à þŕîṽàţé ŵöŕķîñĝ çöþý ţĥàţ ţĥé ƒîļé ĥöḿé
šţàĝéš àĝàîñšţ; Settle ŕéàđš ţĥé ĥéàđ àĝàîñ ŵĥéñ îţ ḿöṽéđ àñđ þüţš îţ îñ ţĥé
çöþý, ŵĥéŕé ţĥé ƒîļé ĥöḿé àþþļîéš ţĥé çĥàñĝé öñçé ḿöŕé; àñđ Commit ŕéçöŕđš
ţĥé çöþý'š ƃýţéš ŵîţĥ ţĥé ĥéàđ ţĥé šéţţļé ƒöüñđ àš îţš éẋþéçţéđ ĥéàđ. Éđîţš ţö
đéŕéñţ ƃļöçķš öƒ öñé đöçüḿéñţ çöḿḿüţé, àñđ à đöçüḿéñţ à ĶÞŽ çàŕŕîéš àš à
šķéļéţöñ àļöñé ĥöļđš ñö ţéẋţ ţö éđîţ àñđ îš ŕéƒüšéđ unsupported. Ţĥé
çöñƒöŕḿàñçé šüîţé ŕüñš öñ îţ ŵîţĥ ţŵö ĴŠÖÑ đöçüḿéñţš àñđ à ƃîļîñĝüàļ çàţàļöĝ.
À ŵĥöļé đöçüḿéñţ đîṽéŕĝéš ŵĥéñ à ŵŕîţé ţö îţ ŵàš ḿàđé ƒŕöḿ à ṽéŕšîöñ ţĥàţ
ĥàš šţöþþéđ ƃéîñĝ îţš ĥéàđ. Ţŵö ḿàçĥîñéš ţĥàţ éàçĥ éđîţéđ öñé đöçüḿéñţ ƒŕöḿ öñé
ĥéàđ ļéàṽé öñé ŵŕîţé àš ţĥé ĥéàđ àñđ ţĥé öţĥéŕ ƃéšîđé îţ öñçé ţĥéîŕ ļöĝš ḿééţ.
Ţĥé ķàþî ĥöšţ ŕéçöŕđš à ţĥîŕđ çàšé ţĥé šàḿé ŵàý: à .kpz ŕéþļàçéđ öñ đîšķ
ŵĥîļé îţš çàçĥé ĥöļđš éđîţš ñöƃöđý þàçķéđ. Éàçĥ éđîţéđ đöçüḿéñţ ţĥé ñéŵ ƒîļé
çàŕŕîéš ŵîţĥ öţĥéŕ ƃýţéš ƃéçöḿéš à ŵŕîţé ḿàđé ƒŕöḿ ţĥé ṽéŕšîöñ ţĥé çàçĥé
öþéñéđ. À ŕéàđ ŕéþöŕţš éàçĥ šüçĥ ŵŕîţé îñ Page.Divergent. À þéŕšöñ öŕ àñ
àĝéñţ ţĥéñ šéţţļéš îţ îñ öñé öƒ ţŵö ŵàýš. Documents.Rebase ŕéàđš ţĥé
đöçüḿéñţ àţ îţš ĥéàđ àñđ šéñđš ţĥé ŵŕîţé'š çĥàñĝéš ţĥŕöüĝĥ ţĥé çĥàñĝé šéŕṽîçé,
ƃļöçķ ƃý ƃļöçķ àñđ éđîţîöñ ƃý éđîţîöñ (change.Diff ƃéţŵééñ ţĥé ṽéŕšîöñ ţĥé
ŵŕîţé ƃéĝàñ ƒŕöḿ àñđ ţĥé öñé îţ ļéƒţ). Éàçĥ öþéŕàţîöñ îš ĝüàŕđéđ ƃý ţĥé
ŕéṽîšîöñ îţš ƃļöçķ ĥàđ ŵĥéŕé ţĥé ŵŕîţé ƃéĝàñ, šö îţ ļàñđš öñļý öñ à ƃļöçķ ţĥé
ĥéàđ ļéƒţ àļöñé. À ƃļöçķ ţĥé ŵŕîţé àđđéđ îš àñ insert_block àñçĥöŕéđ ƃéƒöŕé
ţĥé ñéẋţ ƃļöçķ, öŕ àƒţéŕ ţĥé þŕéṽîöüš öñé, ţĥàţ ţĥé ŵŕîţé'š ƃàšé àñđ ţĥé ĥéàđ
ƃöţĥ ĥöļđ, šö ƃļöçķš àđđéđ îñ à ŕüñ ķééþ ţĥéîŕ öŕđéŕ. À ƃļöçķ ţĥé ŵŕîţé
ŕéḿöṽéđ îš à delete_block ĝüàŕđéđ ƃý ţĥé ŕéṽîšîöñ öƒ éṽéŕý éđîţîöñ îţ ĥàđ àţ
ţĥé ƃàšé. À ƃļöçķ šţàýš çöñţéšţéđ ŵĥéñ ţĥé ĥéàđ çĥàñĝéđ îţ ţöö, öŕ ŵĥéñ ţĥé
šţŕüçţüŕé àŕöüñđ îţ çöñƒļîçţš: ţĥé ƒöŕḿàţ àđđš öŕ ŕéḿöṽéš ñö ƃļöçķ, ţĥé ĥéàđ
ĥöļđš ñéîţĥéŕ ñéîĝĥƃöüŕ öƒ àñ àđđéđ ƃļöçķ öŕ à ƃļöçķ öƒ ţĥé šàḿé ķéý ŵîţĥ öţĥéŕ
çöñţéñţ, öŕ ţĥé ƃļöçķ ĥöļđš à ţŕàñšļàţîöñ àñ îñšéŕţ đöéš ñöţ ŵŕîţé. À ŵŕîţé
ñàḿîñĝ ţĥé đîṽéŕĝéñţ ŵŕîţé àš îţš çàüšé ţĥéñ ŕéçöŕđš ţĥé çöñţéšţéđ ƃļöçķš, öŕ
šéţţļéš ţĥé ŵŕîţé ŵĥéñ ñöñé îš ļéƒţ. Documents.Discard ŕéçöŕđš ţĥàţ çàüšé
ŵîţĥ ñöţĥîñĝ çöñţéšţéđ àñđ ķééþš ţĥé ĥéàđ. Éàçĥ çöñţéšţéđ ƃļöçķ îš đéçîđéđ àš
àñ éđîţîöñ'š çöñƒļîçţ îš: à çĥàñĝé šéţ ĝüàŕđéđ ƃý ţĥé ĥéàđ'š ŕéṽîšîöñ, ŵĥéŕé
ķééþîñĝ ţĥé ĥéàđ'š ŵöŕđîñĝ îš ŕéçöŕđéđ àš ţĥé đéçîšîöñ
(change.ContestedSession). kapi status ļîšţš éàçĥ đîṽéŕĝéñţ ŵŕîţé ŵîţĥ ţĥé
kapi resolve çöḿḿàñđ ļîñé ţĥàţ šéţţļéš îţ, àñđ Ķàþî Đéšķţöþ öƒƒéŕš ƃöţĥ
çĥöîçéš öñ ţĥé þŕöĵéçţ'š çöñƒļîçţš çàŕđ àñđ, ƒöŕ éṽéŕý .kpz öñ ţĥé ḿàçĥîñé,
öñ ţĥé ŵöŕķšþàçé ĥöḿé (Š-02).
Ƒļöŵš
À ƒļöŵ ŵŕîţéš à đöçüḿéñţ ŵĥöļé: îţš ŵŕîţéŕ ŕéñđéŕš éṽéŕý ƃļöçķ ţĥé ŕüñ þàššéđ
ţĥŕöüĝĥ, îñţö ţĥé ƒîļé îţ ŕéàđš öŕ îñţö à ţàŕĝéţ-ļàñĝüàĝé ƒîļé ƃüîļţ ƒŕöḿ ţĥé
šöüŕçé'š šķéļéţöñ. Ţĥé ƒîļé ĥöḿé çöḿḿîţš ţĥàţ đöçüḿéñţ ţöö
(filehome.Home.Produce): ţĥé ŕüñ đîĝéšţš ţĥé đéšţîñàţîöñ ƃéƒöŕé îţ ŕéàđš,
ţĥé ŵŕîţéŕ'š öüţþüţ îš šţàĝéđ ƃéšîđé ţĥé đéšţîñàţîöñ, àñđ ţĥé çöḿḿîţ ŕéñàḿéš îţ
üñđéŕ ţĥé đéšţîñàţîöñ'š ļöçķ öñļý ŵĥîļé ţĥé đéšţîñàţîöñ šţîļļ ĥöļđš ŵĥàţ ţĥé
ŕüñ ƃéĝàñ ƒŕöḿ (É-01). Éṽéŕý ƒļöŵ
ţĥé ķàþî ĥöšţ ŕüñš çöḿḿîţš ţĥîš ŵàý: kapi translate, pseudo-translate,
run, exec àñđ up, ţĥé šàḿé ŕüñš îñ Ķàþî Đéšķţöþ àñđ öṽéŕ ḾÇÞ, à þüļļ'š
ţàŕĝéţ ƒîļéš, àñđ ţĥé đéļîṽéŕý öƒ à çöñṽéŕĝéñçé þàšš'š đŕàƒţš. Ţĥé ĥöšţ'š ƒļöŵ
ĥöḿé ţàķéš îţš ļöçķš ŵĥéŕé ţĥé þŕöĵéçţ'š çĥàñĝé šéŕṽîçé ţàķéš ţĥéḿ, šö à ƒļöŵ
àñđ à çĥàñĝé šéţ öñ öñé ƒîļé ţàķé ţüŕñš. À ĝàţéđ ŕüñ ţĥàţ ĥöļđš à ļöçàļé ƃàçķ ŵŕîţéš
ţĥàţ ļöçàļé'š đŕàƒţš îñţö ţĥé ŵöŕķšþàçé ĥöḿé îñšţéàđ
(workhome.Home.Produce): öñé ŵŕîţé þéŕ đöçüḿéñţ, éàçĥ đŕàƒţ ĝüàŕđéđ ƃý ţĥé
ŕéṽîšîöñ ţĥé ŕüñ ƒîŕšţ ŕéàđ öƒ îţ, ŵîţĥ îţš ƃàšîš àñđ ţĥé šţàḿþ îţš þŕöđüçéŕ
šéŕṽéš îţ àĝàîñ ƃý; à ƃļöçķ àñöţĥéŕ ŵŕîţéŕ çĥàñĝéđ ḿéàñŵĥîļé, öŕ öñé à þéŕšöñ
öŕ àñ àĝéñţ ŵŕöţé ƒŕöḿ ţĥé šàḿé šöüŕçé, ķééþš ţĥàţ ŵŕîţéŕ'š éđîţîöñ. À ŕüñ
ţĥàţ đéļîṽéŕš à ļöçàļé ŕéþļàçéš ţĥé đŕàƒţš ţĥé ŵöŕķšþàçé ķéþţ öƒ îţ ƒŕöḿ àñ
éàŕļîéŕ ŕüñ ţĥé šàḿé ŵàý ƒîŕšţ. À đéļîṽéŕý (kapi merge, öŕ kapi up ƒöŕ à
ļöçàļé ţĥàţ çļéàŕéđ îţš ĝàţé) ŵŕîţéš éàçĥ éđîţîöñ'š ƒîļé ƒŕöḿ ŵĥàţ ţĥé
ŵöŕķšþàçé ĥöḿé ķééþš, éàçĥ đŕàƒţ ŵîţĥ ţĥé ƃàšîš îţ ŵàš ḿàđé ƒŕöḿ, àñđ ţĥéñ
ŕéļéàšéš ŵĥàţ îţ ŕéàđ ţĥéŕé (workhome.Home.Release), öñļý ŵĥîļé ţĥé
éđîţîöñ'š ĥéàđ îš šţîļļ ţĥé öñé îţ ŕéàđ.
Îñšîđé à þŕöĵéçţ ţĥé ĥöšţ ŕéçöŕđš éàçĥ đöçüḿéñţ à ƒļöŵ ŵŕöţé àš öñé
content.edit, ţĥŕöüĝĥ ţĥé ŕéçöŕđéŕ à çĥàñĝé šéţ'š çöḿḿîţ ŕéçöŕđš ţĥŕöüĝĥ,
ŵîţĥ ţĥé àçţöŕ tool:<flow> àñđ ţĥé öŕîĝîñ flow:<flow>. kapi exec ţàķéš
ţĥé þŕöĵéçţ ţĥé çöḿḿàñđ ŕéšöļṽéš, àš kapi apply đöéš, ƒöŕ à ƒîļé ţĥé þŕöĵéçţ
ĥöļđš. Ţĥé ŕéçöŕđ ķééþš ŕéṽîšîöñš àñđ ĥàšĥéš, ñö ţéẋţ. Îţš ţŕàñšîţîöñš àŕé ţĥé
ŕüñ'š 郃éçţ öñ ţĥé ƒîļé àš ţĥé šéŕṽîçé ŕéàđš îţ: ţĥé đöçüḿéñţ îš ŕéàđ ţĥŕöüĝĥ
ţĥé šéŕṽîçé ƃéƒöŕé ţĥé ŕüñ àñđ àĝàîñ àƒţéŕ ţĥé çöḿḿîţ (à çöḿḿîţ ţĥàţ ƒîñđš ţĥé
ƒîļé ĥöļđîñĝ ţĥé ŕüñ'š ƃýţéš àļŕéàđý, àš îţ đîđ ŵĥéñ ţĥé ŕüñ ŕéàđ îţ, ŕéüšéš
ţĥé ƒîŕšţ ŕéàđ), àñđ éàçĥ éđîţîöñ ŵĥöšé ŕéṽîšîöñ ḿöṽéđ îš à ţŕàñšîţîöñ, ŵîţĥ
ţĥé šţàḿþ ţĥé þŕöđüçîñĝ ţööļ ļéƒţ àš îţš þŕöđüçéŕ, ţĥé ķîñđ öƒ öþéŕàţîöñ ţĥé
çĥàñĝé çöḿéš ţö (change.EditionKind, àš change.Diff ŵöüļđ šéñđ îţ:
set_content ƒöŕ àñ éđîţîöñ çŕéàţéđ öŕ ŕéŵŕîţţéñ, replace_text ƒöŕ ţéẋţ
ḿöṽéđ àŕöüñđ ţĥé šàḿé çöđéš, remove_edition), àñđ ţĥé ţööļ ţĥàţ ḿàđé îţ (ţĥé
ţööļ ñàḿéđ îñ îţš šţàḿþ, öŕ ţĥé ŕüñ'š öñļý ţööļ, ļéàṽîñĝ öüţ ţĥé çöüñţéŕ à
çöñṽéŕĝéñçé þàšš àđđš). Ţĥé ŕéàđ ƃéƒöŕé ţĥé ŕüñ îš àñ
öŕđîñàŕý ŕéàđ, šö îţ ŕéçöŕđš àñ éđîţ ḿàđé öüţšîđé ķàþî šîñçé ţĥé ļàšţ ŕéçöŕđéđ
çĥàñĝé àš öƃšéŕṽéđ ƃéƒöŕé ţĥé ŕüñ'š öŵñ ŕéçöŕđ; ţĥé ŕéàđ àƒţéŕ ţĥé çöḿḿîţ îš
ļéƒţ üñöƃšéŕṽéđ, ƃéçàüšé ţĥé ŕüñ ŕéçöŕđš ţĥàţ çĥàñĝé îţšéļƒ. À ţŕàñšļàţîöñ'š ƃàšîš îš ţĥé
šöüŕçé ţĥé ŕüñ ŕéàđ ƃéƒöŕé îţ ŕàñ, ŵîţĥ ţĥàţ šöüŕçé'š çöñţéñţ ĥàšĥ: ţĥé çöḿḿîţ
ĝüàŕđš ţĥé ƒîļé ţĥé ŕüñ ŵŕîţéš, šö à šöüŕçé éđîţéđ ŵĥîļé ţĥé ŕüñ ŵöŕķéđ îš
đŕîƒţ àĝàîñšţ ţĥé ƃàšîš ŕàţĥéŕ ţĥàñ ţĥé ƃàšîš. À ţŕàñšļàţîöñ ţĥé ŕüñ ŕéþŕöđüçéđ
üñçĥàñĝéđ îš ŕéçöŕđéđ ţöö, öñçé, ŵĥéñ ţĥé ƃļöçķ ĥîšţöŕý đöéš ñöţ àļŕéàđý šàý à
ƒļöŵ ŵŕöţé îţ ƒŕöḿ ţĥé šöüŕçé ţĥé ƃļöçķ ĥöļđš, àñđ ñöţ öṽéŕ à þéŕšöñ'š öŕ àñ
àĝéñţ'š ŵŕîţé öƒ ţĥé šàḿé ŵöŕđîñĝ, ŵĥîçĥ šţàýš ţĥéîŕš. Šö ţĥé ĥîšţöŕý ķééþš ţĥé
ƃàšîš öƒ éṽéŕý ţŕàñšļàţîöñ ţĥé ļööþ ḿàđé. Ţĥàţ ƃàšîš îš ŵĥàţ çöṽéŕàĝé ĝŕàđéš àñ
üñđéçîđéđ ţŕàñšļàţîöñ ƃý, ŵĥàţ à đéçîšîöñ öñ îţ šţàŕţš ƒŕöḿ, àñđ ŵĥéŕé ţĥé
šţàļéñéšš ĝàţé ƒîñđš ŵĥàţ ĝöṽéŕñéđ îţ. Ţĥé đéçîšîöñ ļéđĝéŕ ĥöļđš đéçîšîöñš
öñļý, šö ţĥé ƃļöçķ ĥîšţöŕý îš ţĥé öñļý þļàçé ţĥàţ ƃàšîš îš ķéþţ.
À đéšţîñàţîöñ ţĥàţ ḿöṽéđ ŵĥîļé ţĥé ŕüñ ŵöŕķéđ îš àþþļîéđ àĝàîñ ţĥŕöüĝĥ ţĥé
šéŕṽîçé ƒŕöḿ ţĥé ŕüñ'š öþéŕàţîöñš (set_content öñ éàçĥ éđîţîöñ ţĥé ŕüñ
çĥàñĝéđ, ĝüàŕđéđ ƃý ţĥé ŕéṽîšîöñ ŕéàđ ƃéƒöŕé ţĥé ŕüñ, ƒöļļöŵéđ ƃý ţĥé
þŕöṽéñàñçé ţĥé þŕöđüçîñĝ ţööļ ļéƒţ). Ţĥé šéŕṽîçé ŕéàđš ţĥé ƒîļé üñđéŕ îţš ļöçķ,
àñđ ţĥé đöçüḿéñţ ļàñđš ŵĥéñ ñö éđîţîöñ ţĥé ŕüñ çĥàñĝéđ ĥàš ḿöṽéđ ţöö, àñđ îš
ŕéƒüšéđ àš à ŵĥöļé öţĥéŕŵîšé: ŵĥéñ öñé ĥàš ḿöṽéđ (stale), öŕ ŵĥéñ ţĥé ŕüñ
ŵŕöţé à ƃļöçķ ţĥé ƒîļé đöéš ñöţ ĥöļđ ýéţ. Ţĥé ŕüñ ţĥéñ ŕéþöŕţš ţĥé đöçüḿéñţ àš
ḿöṽéđ, àñđ ţĥé ñéẋţ ŕüñ ŵŕîţéš îţ. À ţàŕĝéţ-ļàñĝüàĝé éđîţîöñ ţĥé ŕüñ ļéƒţ
ŵîţĥöüţ à ţŕàñšļàţîöñ îš ŕéñđéŕéđ ƒŕöḿ ţĥé šöüŕçé ƃý ţĥé ŵŕîţéŕ, àñđ îš ļéƒţ àš
ţĥé ƒîļé ĥöļđš îţ ŵĥéñ ţĥé ŕüñ'š çĥàñĝéš àŕé àþþļîéđ àĝàîñ.
Üñđéŕ --print-ops ţĥé ŕüñ çöḿḿîţš ţĥŕöüĝĥ à ĥöḿé ţĥàţ ŵŕîţéš ñöţĥîñĝ
(filehome.Options.WriteNothing) àñđ ŕéçöŕđš ñöţĥîñĝ. Ŵĥàţ îţ çĥàñĝéđ îñ éàçĥ
đöçüḿéñţ ƃéçöḿéš öþéŕàţîöñš, ţĥé đéŕéñçé ƃéţŵééñ éàçĥ ƃļöçķ àš ţĥé ŕéàđéŕ
ĝàṽé îţ àñđ àš ţĥé ŵŕîţéŕ ŕéçéîṽéđ îţ (change.Diff), éàçĥ ĝüàŕđéđ ƃý ţĥé
ŕéṽîšîöñ ţĥé šéŕṽîçé ŕéàđ ƃéƒöŕé ţĥé ŕüñ àñđ éàçĥ set_content öƒ à
ţŕàñšļàţîöñ çàŕŕýîñĝ îţš ƃàšîš àñđ, àš éàçĥ öþéŕàţîöñ öñ à ţŕàñšļàţîöñ đöéš,
ţĥé origin ţĥé þŕöđüçîñĝ ţööļ ļéƒţ. Ƃéƒöŕé à đöçüḿéñţ'š öþéŕàţîöñš ĵöîñ ţĥé çĥàñĝé
šéţ, ţĥéý àŕé àþþļîéđ ţö à þŕîṽàţé çöþý öƒ ţĥé ƒîļé ţĥŕöüĝĥ ţĥé šéŕṽîçé kapi apply ŕéàçĥéš, àñđ ţĥéý àŕé þŕîñţéđ öñļý ŵĥéñ ţĥé çöþý ţĥéñ ĥöļđš ţĥé ƃýţéš
ţĥé ŕüñ ŵöüļđ ĥàṽé ŵŕîţţéñ. À ŕüñ ŵŕîţéš à ţàŕĝéţ-ļàñĝüàĝé ƒîļé ŵĥöļé ƒŕöḿ îţš
šöüŕçé, ŵĥîļé ţĥé šéŕṽîçé éđîţš ţĥé ƒîļé àš îţ šţàñđš, šö ţĥé ţŵö đéŕ ŵĥéñ
ţĥé ƒîļé ĥöļđš àñ éñţŕý öŕ àñ öŕđéŕ öƒ îţš öŵñ, öŕ ŵĥéñ ţĥé šöüŕçé ĝàîñéđ à
ƃļöçķ ţĥé ƒîļé'š ŵŕîţéŕ àđđš ñöŵĥéŕé, öŕ ƃéšîđé àñöţĥéŕ ñéîĝĥƃöüŕ ţĥàñ ţĥé ŕüñ
ĝîṽéš îţ; šüçĥ à ƒîļé îš ñàḿéđ öñ šţàñđàŕđ éŕŕöŕ àñđ ļéƒţ öüţ. Šö îš à ƒîļé ţĥé ŕüñ ŵöüļđ ŵŕîţé ŵĥéŕé ţĥé šéŕṽîçé đöéš ñöţ ķééþ
ţĥé éđîţîöñ (àñ öüţþüţ þàţĥ ĝîṽéñ öñ ţĥé çöḿḿàñđ ļîñé îñ þļàçé öƒ ţĥé ŕéçîþé'š
ţàŕĝéţ), à çöñṽéŕšîöñ, àñ éẋþöŕţ àñđ àñ àŕçĥîṽé. kapi apply öƒ ţĥé çĥàñĝé šéţ
ŵŕîţéš ţĥé ƃýţéš ţĥé ŕüñ ŵöüļđ ĥàṽé ŵŕîţţéñ (üñđéŕ materialize: on-converge,
à ţŕàñšļàţîöñ ŵĥöšé ƒîļé đöéš ñöţ éẋîšţ ýéţ ļàñđš îñ ţĥé ŵöŕķšþàçé ĥöḿé, îţš
ĥöḿé üñţîļ à đéļîṽéŕý, àñđ kapi merge ŵŕîţéš ţĥöšé ƃýţéš), àñđ ŕéçöŕđš ţĥé
éđîţ àš îţš àþþļîéŕ'š: à þéŕšöñ'š öŕ àñ àĝéñţ'š éđîţ îš ţĥéîŕš, šö ţĥé
origin ţĥé öþéŕàţîöñš šţàţé îš ñöţ ķéþţ öñ ţĥé ţŕàñšļàţîöñ, àñđ kapi apply
þŕîñţš öñé ļîñé ñàḿîñĝ ţĥé ţööļš àñđ šàýîñĝ šö. À ŕüñ ŵîţĥ ñöţĥîñĝ ţö çĥàñĝé
þŕîñţš à çĥàñĝé šéţ ŵîţĥ ñö öþéŕàţîöñ, ŵĥîçĥ àþþļîéš àñđ ŵŕîţéš ñöţĥîñĝ.
À þŕîñţîñĝ kapi up ŕüñš öñé þàšš. À ĝàţéđ þàšš đŕàƒţš îñţö îţš þŕîṽàţé ţŕéé
àš àñý þàšš đöéš (Options.WriteUnder ļéţš ţĥé þŕîñţîñĝ ĥöḿé ŵŕîţé ţĥéŕé),
ţĥé ĝàţé éṽàļüàţéš ţĥé đŕàƒţš, àñđ đéļîṽéŕý þŕîñţš ŵĥàţ îţ ŵöüļđ çöḿḿîţ ƒöŕ
éàçĥ ļöçàļé ţĥàţ çļéàŕš îţš ĝàţé; à ĥéļđ-ƃàçķ ļöçàļé îš ñàḿéđ àñđ þŕîñţš ñöţĥîñĝ.
À þŕîñţîñĝ ŕüñ ŕéçöŕđš ñö çĥàñĝé, àƃšöŕƃš ñöţĥîñĝ îñţö ţĥé çöñţéñţ ḿéḿöŕý àñđ
šţàḿþš ñöţĥîñĝ. Àš àñý þàšš đöéš, îţ éẋţŕàçţš ţĥé šöüŕçé îñţö ţĥé đéŕîṽéđ šţöŕé
àñđ çàçĥéš üñđéŕ .kapi/work, àñđ ŕéçöŕđš ţĥé îđéñţîţý öƒ à đöçüḿéñţ îţ ŕéàđš
ƒöŕ ţĥé ƒîŕšţ ţîḿé (document.adopt). Îñ à
þŕöĵéçţ à kapi translate, pseudo-translate öŕ run ŵîţĥöüţ -o ŵŕîţéš ñö
ƒîļé, àñđ þŕîñţš ñöţĥîñĝ ŵîţĥ à ñöţé.
Ĥööķš
Ţĥé šéŕṽîçé çàļļš šîẋ ĥööķš à ĥöšţ šüþþļîéš. Éàçĥ îš öþţîöñàļ.
| Ĥööķ | Çàļļéđ | Ŵîţĥöüţ öñé |
|---|---|---|
Policy | ƒöŕ éṽéŕý öþéŕàţîöñ, ƃéƒöŕé àñýţĥîñĝ îš ŕéàđ | éṽéŕý öþéŕàţîöñ îš þéŕḿîţţéđ |
CommitCheck | öṽéŕ ţĥé çĥàñĝéđ éđîţîöñš, ƃéƒöŕé àñýţĥîñĝ îš ŵŕîţţéñ; îţ ŕéţüŕñš ƒîñđîñĝš ƃéƒöŕé àñđ àƒţéŕ, àñđ ţĥé ĝöṽéŕñàñçé ƒîñĝéŕþŕîñţ îţ üšéđ | ñöţĥîñĝ îš çĥéçķéđ |
Assets | ţö þŕéþàŕé decide, term, memory àñđ recipe ƃéƒöŕé àñýţĥîñĝ îš ŵŕîţţéñ, àñđ ţö àþþļý ţĥéḿ àƒţéŕ ţĥé çöñţéñţ ļàñđéđ | ţĥöšé öþéŕàţîöñš àŕé ŕéƒüšéđ àš unsupported |
Recorder | àƒţéŕ ţĥé ĥöḿéš çöḿḿîţţéđ, ŵîţĥ ţĥé ţŕàñšîţîöñš àñđ ţĥé ƒîñĝéŕþŕîñţ | ñöţĥîñĝ îš ŕéçöŕđéđ |
EditionStates | öñçé ƃý éàçĥ ŕéàđ öƒ à đöçüḿéñţ, ŵîţĥ ţĥé ḿöšţ ƃļöçķš ţĥé ŕéàđ šĥöŵš, ƒöŕ ţĥé šţàţüš àñđ ƃàšîš öƒ îţš đéŕîṽéđ éđîţîöñš | à ŕéàđ šĥöŵš ţĥé šţàţüš ţĥé đöçüḿéñţ ĥöļđš àñđ ñö ƃàšîš |
EditionHistories | ƃý History, ƒöŕ ţĥé ŕéçöŕđéđ çĥàñĝéš ţö àñ éđîţîöñ | à ĥîšţöŕý ļîšţš ñöţĥîñĝ |
Ţĥé šéŕṽîçé ŕéƒüšéš à çĥàñĝé öñļý ƒöŕ à ƒàîļîñĝ ƒîñđîñĝ îţ îñţŕöđüçéš
(change.Introduced). Üñđéŕ report ţĥé çĥàñĝé ļàñđš ŵîţĥ îţš ƒîñđîñĝš, àñđ à
þéŕšöñ'š öṽéŕŕîđđéñ ƒîñđîñĝš ĝö ţö ţĥé ŕéçöŕđ.
Ţĥé ķàþî ĥöšţ'š þöļîçý (ChangePolicy) ļéţš à þéŕšöñ šéñđ éṽéŕý öþéŕàţîöñ.
Àñ àĝéñţ ḿàý çĥàñĝé çöñţéñţ, àñđ îš ŕéƒüšéđ àš not_permitted ŵĥéñ îţ šéñđš à
term, memory öŕ recipe öþéŕàţîöñ, à decide ŵîţĥ àñý öüţçöḿé ƃüţ
advise, àñ if_match öƒ *, öŕ ţĥé report ĝàţé. À ţööļ îñ à ƒļöŵ ḿàý
çĥööšé report àñđ đéçîđéš öñļý ŵîţĥ advise, àñđ öñļý à ţööļ šéñđš ţĥé
îñ-þŕöçéšš þŕöṽéñàñçé öþéŕàţîöñ. À šéñđéŕ öƒ àñý öţĥéŕ ķîñđ îš ŕéƒüšéđ éṽéŕý
öþéŕàţîöñ.
Ţĥé ķàþî ĥöšţ'š ŕéçöŕđéŕ ŵŕîţéš éàçĥ çĥàñĝé šéţ îñţö ţĥé ŵöŕķšþàçé'š ļöĝ, öñé
content.edit öþéŕàţîöñ þéŕ đöçüḿéñţ, îñ öñé ŵŕîţé, àñđ ţĥé þŕöĵéçţöŕ ŵŕîţéš
îţ îñţö ţĥé ƃļöçķ ĥîšţöŕý: ŵĥö çĥàñĝéđ ŵĥîçĥ éđîţîöñ, ƒŕöḿ ŵĥîçĥ ŕéṽîšîöñ ţö
ŵĥîçĥ, ţĥŕöüĝĥ ŵĥîçĥ šüŕƒàçé (ţĥé öŕîĝîñ), àñđ üñđéŕ ŵĥîçĥ ĝöṽéŕñàñçé
ƒîñĝéŕþŕîñţ. À þéŕšöñ'š öŕ àñ àĝéñţ'š ŕéçöŕđ ķééþš ţĥé ŕüñš àŕöüñđ éàçĥ çĥàñĝé
àñđ ţĥé çĥàñĝé šéţ àš šéñţ; à ţööļ'š ķééþš ŕéṽîšîöñš àñđ ĥàšĥéš, àñđ ţĥé ƒîļé
ĥöļđš ţĥé ţéẋţ. À đöçüḿéñţ ţĥé ŵöŕķšþàçé ĥöḿé ĥöļđš îš ŕéçöŕđéđ ƃý ţĥàţ ĥöḿé'š
çöḿḿîţ, àñđ ţĥé ŕéçöŕđéŕ ŕéçöŕđš ţĥé ŕéšţ öƒ ţĥé çĥàñĝé šéţ. À þŕöĵéçţ ţĥàţ
đéçļàŕéš ŕéđàçţîöñ ŕéçöŕđš ţĥé ŕüñš àñđ ţĥé ñöţé ŕéđàçţéđ, öŕ ñéîţĥéŕ üñđéŕ à
þöļîçý ţĥàţ đéţéçţš éñţîţîéš, àñđ ķééþš ñö çöþý öƒ ţĥé çĥàñĝé šéţ àš šéñţ
(Ç-10).
Ţĥé ķàþî ĥöšţ ƃüîļđš ţĥé šéŕṽîçé ƒöŕ à šüŕƒàçé ŵîţĥ App.Changes àñđ
App.ChangeService. Îñšîđé à þŕöĵéçţ ţĥé ƒîļé ĥöḿé'š ļàýöüţ ŕéšöļṽéš à
ŕéƒéŕéñçé ţĥé ŵàý ţĥé ŕéçîþé đöéš: à šöüŕçé ƒîļé îš ŕéàđ ŵîţĥ ţĥé ƒöŕḿàţ àñđ
çöñƒîĝüŕàţîöñ îţš çöñţéñţ îţéḿ ƃîñđš, ţĥé ƒîļé öƒ à ţŕàñšļàţîöñ îš ţĥàţ éđîţîöñ
öƒ îţš šöüŕçé, ĵöîñéđ ƃý ķéý, ţĥéñ ƃý ţŕàñšļàţîöñ-îñṽàŕîàñţ àđđŕéšš, ţĥéñ ƃý
þöšîţîöñ, àñđ à ţŕàñšļàţîöñ ŵîţĥ ñö ƒîļé ýéţ îš ŵŕîţţéñ ƒŕöḿ ţĥé šöüŕçé'š
šķéļéţöñ. Öüţšîđé à þŕöĵéçţ à ŕéƒéŕéñçé îš à þàţĥ üñđéŕ ţĥé ŵöŕķîñĝ
đîŕéçţöŕý, ŕéàđ ŵîţĥ ţĥé ƒöŕḿàţ đéţéçţîöñ ƒîñđš ƃý ñàḿé, ţĥéñ ƃý çöñţéñţ. À
ƒîļé öƒ à ţŕàñšļàţîöñ îñţéŕçĥàñĝé ƒöŕḿàţ, öŕ öƒ à ḿüļţîļîñĝüàļ šţŕîñĝ çàţàļöĝ
(àñ Ẋçöđé .xcstrings ƒîļé), ĥöļđš îţš éđîţîöñš îñ ţĥé ƒîļé, üñļéšš ţĥé ŕéçîþé
ŵŕîţéš ţĥé šöüŕçé'š ţŕàñšļàţîöñš ţö ƒîļéš öƒ ţĥéîŕ öŵñ: ŵîţĥ à ţàŕĝéţ
po/{lang}.po, ţĥé Ƒŕéñçĥ öƒ po/en.po öŕ öƒ po/messages.pot îš ŕéàđ ƒŕöḿ àñđ
ŵŕîţţéñ ţö po/fr.po, îñ Ƒŕéñçĥ, àñđ ţĥé šöüŕçé çàţàļöĝ ĥöļđš ñö éđîţîöñ, ƒöŕ
éṽéŕý šüŕƒàçé. Đéçîšîöñš àñđ àššéţ öþéŕàţîöñš
ļàñđ ţĥŕöüĝĥ ţĥé ĥöšţ'š ŕéṽîéŵ-ǫüéüé àñđ àššéţ ƒüñçţîöñš, à đéçîšîöñ ƃöüñđ ţö
ţĥé ŵöŕđîñĝ ţĥé çĥàñĝé šéţ ļàñđéđ ŕàţĥéŕ ţĥàñ ţö à ļàţéŕ ŕéàđ öƒ ţĥé ƒîļé; öñ
àñ éđîţîöñ ŵîţĥ ñö çöñţéñţ îñ îţš ĥöḿé, šüçĥ àš à ĥéļđ-ƃàçķ ļöçàļé'š đŕàƒţ, ţĥé
đéçîšîöñ ƃîñđš ţö ţĥé đŕàƒţ ţĥé þŕöĵéçţ šţöŕé ĥöļđš. Šüçĥ à đéçîšîöñ ñàḿéš ţĥé
éđîţîöñ îţ ŕéàđ àš absent, àñđ îš ŕéƒüšéđ àš šţàļé öñçé ţĥé ĥöḿé ĥöļđš ţĥé
éđîţîöñ. Ţĥé ĥööķš éàçĥ þļüĝ îñ àţ
öñé ƒüñçţîöñ öƒ ţĥé ĥöšţ: ţĥé çöḿḿîţ çĥéçķ îš App.CommitCheck, ŵĥîçĥ ĥöļđš à
šéŕṽîçé öüţšîđé à þŕöĵéçţ ţö ĥýĝîéñé àļöñé; ţĥé þöļîçý îš ChangePolicy; ţĥé
ŕéçöŕđéŕ îš App.EditRecorder, îñšîđé à þŕöĵéçţ; à ŕéàđ ţàķéš ţĥé ƃàšîš öƒ à
đéŕîṽéđ éđîţîöñ ţĥàţ çàŕŕîéš ñö đéŕîṽàţîöñ ƒŕöḿ ţĥé þŕöĵéçţ'š ƃļöçķ ĥîšţöŕý,
ŵĥéŕé ţĥé ḿöšţ ŕéçéñţ ŕéçöŕđéđ çĥàñĝé ţö ţĥé éđîţîöñ ļéƒţ ţĥé çöñţéñţ îţ ĥöļđš;
àñđ à ĥîšţöŕý ļîšţš ţĥé éđîţîöñ'š ŕöŵš öƒ ţĥàţ ƃļöçķ ĥîšţöŕý. À đéçîšîöñ ƃîñđš
ţö ţĥé ŕéṽîšîöñ öƒ ţĥé éđîţîöñ îţ đéçîđéš àñđ öƒ ţĥé àüţĥöŕîţàţîṽé éđîţîöñ
ƃéšîđé îţ (DecisionTarget.Rev àñđ SourceRev), ŵĥîçĥ ţĥé đéçîšîöñ ļéđĝéŕ
þàîŕš (Ç-04).
Öñ ţĥé çöḿḿàñđ ļîñé, kapi apply ĥàñđš à đéçöđéđ çĥàñĝé šéţ ţö ţĥé šéŕṽîçé,
kapi inspect þŕîñţš ţĥé šéŕṽîçé'š ŕéàđ ŕéçöŕđš, àñđ ksed çöḿþîļéš îţš
šüƃšţîţüţîöñš îñţö replace_text öþéŕàţîöñš àñđ àþþļîéš ţĥéḿ ţĥŕöüĝĥ îţ
(Š-01). Àļļ ţĥŕéé ƃüîļđ ţĥé šéŕṽîçé öñçé þéŕ
ŕüñ: ƒöŕ ţĥé þŕöĵéçţ ţĥé çöḿḿàñđ ñàḿéš öŕ đîšçöṽéŕý ƒîñđš, ƒöŕ ţĥé ƒîļéš üñđéŕ
îţš ŕööţ, àñđ öṽéŕ ţĥé ŵöŕķîñĝ đîŕéçţöŕý öţĥéŕŵîšé, ŵĥéŕé à ŕéƒéŕéñçé ḿàý ļéàđ
öüţ öƒ îţ àš à þàţĥ öñ à çöḿḿàñđ ļîñé đöéš. Îñšîđé à þŕöĵéçţ à ƒîļé öüţšîđé ţĥé
ŕööţ îš ñàḿéđ ƃý îţš àƃšöļüţé þàţĥ, àñđ kapi apply éđîţš à çĥàñĝé šéţ öƒ šüçĥ
ƒîļéš öṽéŕ ţĥé ŵöŕķîñĝ đîŕéçţöŕý. Ţĥé ĥööķš öƒ à šéŕṽîçé öüţšîđé à þŕöĵéçţ àŕé
ĝîṽéñ à çöḿḿàñđ ţĥàţ ŕéšöļṽéš ñö þŕöĵéçţ, šö đîšçöṽéŕý ñéṽéŕ þüţš àñ éđîţ ḿàđé
öüţšîđé öñé üñđéŕ à þŕöĵéçţ'š ĝöṽéŕñàñçé. Öñļý ksed ŕéàđš à ƒîļé ñö ƒöŕḿàţ
çļàîḿš àš þļàîñ ţéẋţ. À çöḿḿàñđ ţĥàţ þŕîñţš àñ éđîţéđ đöçüḿéñţ (ksed ŵîţĥöüţ
-i) àþþļîéš ţĥé çĥàñĝé ţö à þŕîṽàţé çöþý, ļöçàţéđ àñđ ŕéàđ éẋàçţļý àš ţĥé
ƒîļé îţšéļƒ, àñđ ŵŕîţéš ţĥé çöþý öüţ. À ŕéàđ ţàķéš ñö ļöçķ àñđ ļéàṽéš à þŕöĵéçţ
àš îţ ŵàš: ţĥé ļöçķ đîŕéçţöŕý, àñđ ţĥé îĝñöŕé ŕüļé ţĥàţ ķééþš îţ öüţ öƒ à
çöḿḿîţ, àŕé ŵŕîţţéñ ŵĥéñ à çĥàñĝé ƒîŕšţ çöḿḿîţš, àñđ ţĥé ŕéçöŕđéŕ öþéñš ţĥé
þŕöĵéçţ šţöŕé ţĥéñ, ƃéƒöŕé àñýţĥîñĝ îš ŵŕîţţéñ. À ŕéàđ ţàķéš à đéŕîṽéđ
éđîţîöñ'š ƃàšîš ƒŕöḿ à þŕöĵéçţ šţöŕé ţĥàţ éẋîšţš àñđ çŕéàţéš ñöñé. À þŕéṽîéŵ
ţàķéš ñö ļöçķ àñđ ŕéçöŕđš ñöţĥîñĝ, àñđ îţš çöḿḿîţ çĥéçķ ŕéàđš ţĥé þŕöĵéçţ
šţöŕé ŵĥéñ ţĥé þŕöĵéçţ ĥàš öñé àñđ çŕéàţéš ñöñé. Ŵĥéñ ţĥé þŕöĵéçţ ĥàš ñö šţöŕé
ýéţ, à þŕéṽîéŵ çĥéçķš àñ éđîţ ŵîţĥöüţ ţĥé ṽöîçé àñđ ţĥé ţéŕḿš à šţöŕé ƃîñđš
ƒŕöḿ ţĥé ŵöŕķšþàçé.
À set_content öñ à çöđé çöḿḿéñţ, îñ à šöüŕçé ƒîļé öñļý ţĥé çöḿḿéñţ ļàýéŕ
ŕéàđš, ĝöéš ţĥŕöüĝĥ ţĥé çöḿḿéñţ ŵŕîţé þàţĥ, ŵĥîçĥ ķééþš îţš öŵñ ĝüàŕàñţééš: ţĥé
ƒîļé îš ŕéàđ àĝàîñ ƃéƒöŕé îţ îš ŵŕîţţéñ, ţĥé ŕéšüļţ ḿüšţ þàŕšé, àñđ ţĥé
ļàñĝüàĝé'š ƒöŕḿàţţéŕ ḿüšţ àĝŕéé. À ƒîļé îš ŕéàđ ƒöŕ îţš çöḿḿéñţš ŵĥéñ ñö ƒöŕḿàţ
ŕéàđš îţ: ñöñé ţĥàţ --format ñàḿéš, ţĥé ŕéçîþé ƃîñđš, öŕ đéţéçţîöñ ƒîñđš ƃý
éẋţéñšîöñ öŕ çöñţéñţ, àš à Ǫţ Ļîñĝüîšţ çàţàļöĝ îš ƒöüñđ îñ à .ts ƒîļé. Ŵĥàţ
ŵàš ŵŕîţţéñ îš çĥéçķéđ, šçöþéđ ţö ţĥé çĥàñĝé, àñđ üñđéŕ ţĥé éñƒöŕçîñĝ ĝàţé à
ƒàîļîñĝ ƒîñđîñĝ, öŕ à çĥéçķ ţĥàţ ŕéàđ ñöţĥîñĝ, éẋîţš 3. Ţĥé çöḿḿéñţ þàţĥ ŕüñš
ñéîţĥéŕ ţĥé çöḿḿîţ çĥéçķ ñöŕ ţĥé ŕéçöŕđéŕ: ţĥé çĥéçķ ŕüñš àƒţéŕ ţĥé ŵŕîţé, àñđ
ñöţĥîñĝ ŕéçöŕđš à çöḿḿéñţ éđîţ.
Ţĥé ḾÇÞ ţööļš read_blocks, apply_edits àñđ describe_format ƃüîļđ ţĥé
šéŕṽîçé ƒöŕ éàçĥ çàļļ'š þŕöĵéçţ àñđ šéñđ éṽéŕý çĥàñĝé šéţ àš ţĥé çàļļîñĝ àĝéñţ
(Š-03). Ţĥé ƃŕöŵšéŕ éñĝîñé'š kapiRead,
kapiApply àñđ kapiDescribe ƃüîļđ îţ ţĥŕöüĝĥ ţĥé šàḿé ƒüñçţîöñ àñđ çàŕŕý
ţĥé çöñţŕàçţ àš ĴŠÖÑ îñ àñđ öüţ: à ŕéƒüšàļ, à çĥàñĝé šéţ ţĥàţ đöéš ñöţ đéçöđé
îñçļüđéđ, îš àñšŵéŕéđ àš à ŕéšüļţ. À çàļļ öƒ éîţĥéŕ šüŕƒàçé ŕéàđš à ƃîļîñĝüàļ
ƒîļé ţĥàţ ĥöļđš îţš ţŕàñšļàţîöñ, šüçĥ àš à ÞÖ çàţàļöĝ, îñ ţĥé öñé ļàñĝüàĝé
öţĥéŕ ţĥàñ ţĥé šöüŕçé ţĥàţ îţš ŕéàđ'š éđîţîöñš öŕ îţš öþéŕàţîöñš ñàḿé, àš
kapi apply đöéš. Ţĥé þàĝé ñàḿéš
ţĥé šéñđéŕ, à þéŕšöñ üñļéšš îţ šàýš àñ àĝéñţ, àñđ îñ à þŕöĵéçţ àñ àþþļîéđ
çĥàñĝé îš ŕéçöŕđéđ îñ ţĥé ƃŕöŵšéŕ'š ŵöŕķšþàçé ļöĝ
(ŴÀŠḾ Éñĝîñé ÀƂÎ).
Ţĥé ṽéŕƃš ţĥàţ ŵŕîţé ŵĥöļé ţŕàñšļàţîöñš ƃüîļđ ţĥé šéŕṽîçé ŵîţĥ
Materialize šéţ, šö ţĥé ƒîļé ĥöḿé ŵŕîţéš éàçĥ ţŕàñšļàţîöñ'š ƒîļé ƒŕöḿ îţš
šöüŕçé'š šķéļéţöñ, ķééþîñĝ ŵĥàţ éàçĥ ƃļöçķ'š þàŕţñéŕ îñ ţĥé ƒîļé ĥéļđ ŵĥéŕé ţĥé
çĥàñĝé šéţ ļéàṽéš îţ, àñđ à ţŕàñšļàţîöñ ƒöļļöŵš ţĥé šöüŕçé'š šţŕüçţüŕé, éṽéñ
ŵĥéŕé ţĥé çĥàñĝé šéţ çĥàñĝéš ñö çöñţéñţ îñ à ƒîļé ŵĥöšé ƃļöçķš ĥàṽé šţöþþéđ þàîŕîñĝ
ŵîţĥ ţĥé šöüŕçé'š. À ƃîļîñĝüàļ ţŕàñšļàţîöñ ƒîļé ţĥàţ šţîļļ ĥöļđš éṽéŕý üñîţ
öƒ îţš šöüŕçé ķééþš îţš öŵñ šķéļéţöñ, ĥéàđéŕ îñçļüđéđ.
kapi merge -i çöḿþîļéš à ŕéţüŕñéđ ẊĻÎƑƑ, ÞÖ öŕ .kpz îñţö set_content
öþéŕàţîöñš çàŕŕýîñĝ ţĥé if_match àñđ basis éàçĥ éñţŕý ŵàš éẋţŕàçţéđ àĝàîñšţ,
üñđéŕ require_basis àñđ ţĥé éñƒöŕçé ĝàţé, àñđ šéñđš ţĥéḿ àš à þéŕšöñ;
kapi extract šţàḿþš éàçĥ éñţŕý ŵîţĥ ţĥé ŕéṽîšîöñ öƒ ţĥé šöüŕçé îţ çàŕŕîéš àñđ
ţĥé ţŕàñšļàţîöñ'š ŕéṽîšîöñ à ŕéàđ ţĥŕöüĝĥ ţĥé šéŕṽîçé ĝîṽéš
(Ḿ-01). kapi merge ŵîţĥ ñö -i
šéñđš ţĥé ţàŕĝéţš ţĥé ƃļöçķ šţöŕé ĥöļđš ƒöŕ à šöüŕçé àñđ ļàñĝüàĝé àš öñé
çĥàñĝé šéţ ƒŕöḿ ţĥé ţööļ merge, àñđ kapi pull šéñđš ţĥé ŕüñš ţĥé šéŕṽéŕ
ĥöļđš ƒöŕ éàçĥ þüļļéđ ţŕàñšļàţîöñ àš ţĥé ţööļ pull, éàçĥ if_match ţĥé
ŕéṽîšîöñ ţĥé ŕéàđ ƃéƒöŕé îţ ƒöüñđ. À þüļļ ĥàñđš ţĥé ŵŕîţéŕ öƒ à đöçüḿéñţ ŵîţĥ
ļöçàļé-ṽàŕîàñţ ḿéđîà ţĥŕöüĝĥ ChangeServiceOptions.WriterHook, àñđ ŵŕîţéš à
ţàŕĝéţ îñ àñöţĥéŕ ƒöŕḿàţ ţĥàñ îţš šöüŕçé, ŵĥîçĥ ñö éđîţîöñ ŕéàçĥéš, ŵîţĥ ţĥé
ţàŕĝéţ'š öŵñ ŵŕîţéŕ. Ţĥé ŕéçöŕđ ñàḿéš ţĥé šüŕƒàçé àš ţĥé öŕîĝîñ: merge öŕ
pull.
Ķàþî Đéšķţöþ ŕéàçĥéš ţĥé šéŕṽîçé ţĥŕöüĝĥ ƒöüŕ ƃîñđîñĝš, Read, Apply,
Describe àñđ History, éàçĥ ţàķîñĝ àñđ ŕéţüŕñîñĝ ţĥé çöñţŕàçţ'š ĴŠÖÑ àš à
šţŕîñĝ. Îţ ƃüîļđš ţĥé šéŕṽîçé ƒöŕ ţĥé ţàƃ'š þŕöĵéçţ ŵîţĥ desktop àš ţĥé
öŕîĝîñ àñđ šéñđš éṽéŕý çĥàñĝé šéţ àš ţĥé þéŕšöñ àţ ţĥé ķéýƃöàŕđ: àñ éđîţ îñ ţĥé
ŕéṽîéŵ þàñé öŕ ţĥé đöçüḿéñţ ṽîéŵ, à çĥéçķ ƒîñđîñĝ'š ƒîẋ, àñđ Àþþŕöṽé àñđ Ŕéĵéçţ
àš decide (Š-02).
kapi check ĝîṽéš à ƒîñđîñĝ ŵĥöšé ŕüļé ñàḿéš à ŕéþļàçéḿéñţ ţĥé öþéŕàţîöñ ţĥàţ
àþþļîéš îţ (check.Fix): à replace_text öƒ ţĥé ŵöŕđš ţĥé ƒîñđîñĝ öƃĵéçţš ţö,
ƃý ţĥé ŕüñ ŕàñĝé ţĥé çĥéçķéŕ ŕéþöŕţéđ, üñđéŕ ţĥé ŕéṽîšîöñ öƒ ţĥé ƃļöçķ'š öŵñ
éđîţîöñ ţĥé çĥéçķ ŕéàđ. Šéñţ àš îţ îš, îţ ļàñđš ŵĥîļé ţĥé ƃļöçķ šţîļļ šàýš ŵĥàţ
ţĥé çĥéçķ ŕéàđ, àñđ îš ŕéƒüšéđ àš šţàļé öñçé îţ đöéš ñöţ. Ţĥé ƒîẋéš öƒ öñé ƃļöçķ
ñàḿé þļàçéš îñ ţĥé šàḿé ţéẋţ, šö ţĥéý çöḿþöšé àš ţĥé éđîţš öƒ öñé öþéŕàţîöñ;
àš šéþàŕàţé öþéŕàţîöñš öƒ öñé çĥàñĝé šéţ, éàçĥ ŵöüļđ šéé ţĥé ţéẋţ ţĥé öñé
ƃéƒöŕé îţ ļéƒţ. À ŕéþļàçéḿéñţ îš þļàîñ ţéẋţ, àñđ ApplyTextEdits ķééþš à çöđé
öñļý àţ éîţĥéŕ éñđ öƒ ţĥé ţéẋţ îţ ŕéþļàçéš, šö à ƒîñđîñĝ ŵĥöšé ŵöŕđš ĥàṽé àñ
îñļîñé çöđé àḿöñĝ ţĥéḿ ĝéţš ñö ƒîẋ. Ţĥé ƒîẋ ñàḿéš îţš đöçüḿéñţ àš ţĥé þŕöĵéçţ'š
çĥàñĝé šéŕṽîçé ŕéšöļṽéš öñé, ƃý îţš þàţĥ ƒŕöḿ ţĥé þŕöĵéçţ ŕööţ, àñđ ţĥé ƒîļé öƒ
à ţŕàñšļàţîöñ ĝéţš ñö ƒîẋ: ţĥé šéŕṽîçé ŕéàđš ţĥàţ ƒîļé àš ţĥé ţŕàñšļàţîöñ'š
éđîţîöñ, ŵĥîļé ţĥé çĥéçķ ŕéàđ îţ àš šöüŕçé àñđ ĥéļđ îţ ţö ţĥé šöüŕçé
ļàñĝüàĝé'š ŕüļéš.
Ŕéšüļţš àñđ éŕŕöŕš
À ŕéšüļţ ĥàš à šţàţüš (applied, refused, previewed, öŕ partial ŵĥéñ àñ
Î/Ö éŕŕöŕ šţöþþéđ ţĥé ƒîñàļ ŕéñàḿéš àƒţéŕ šöḿé ƒîļéš ļàñđéđ, öŕ à šţöŕé ŕéƒüšéđ
à đéçîšîöñ öŕ àñ àššéţ öþéŕàţîöñ àƒţéŕ ţĥé çöñţéñţ ļàñđéđ), à ŕéçöŕđ îđ, öñé
éñţŕý þéŕ ƒîļé ŵŕîţţéñ öŕ ŕéàđ ŵîţĥ îţš ĥöḿé, îţš đîĝéšţš ƃéƒöŕé àñđ àƒţéŕ àñđ
ŵĥéţĥéŕ îţ ŵàš ŵŕîţţéñ, àñđ öñé ŕéšüļţ þéŕ öþéŕàţîöñ. Àñ öþéŕàţîöñ'š šţàţüš îš
applied, unchanged (îţš if_match ĥöļđš àñđ ţĥé éđîţîöñ àļŕéàđý šàýš ŵĥàţ
îţ šéñđš), refused, not_applied (ƃļöçķéđ ƃý àñöţĥéŕ öþéŕàţîöñ'š ŕéƒüšàļ) öŕ
previewed; îţ çàŕŕîéš îţš ŕéṽîšîöñš, ţĥé þöšîţîöñš îţ ŕéšöļṽéđ, ţĥé đéŕîṽéđ
éđîţîöñš îţ ļéƒţ öñ àñ öļđéŕ ƃàšîš (invalidates), àñđ öñ à ŕéƒüšàļ àñ éŕŕöŕ
ƒŕöḿ à çļöšéđ šéţ öƒ çöđéš, éàçĥ ḿàþþéđ öñçé ţö àñ éẋîţ çöđé àñđ àñ ĤŢŢÞ šţàţüš
(Code.ExitCode, Code.HTTPStatus):
| Çöđé | Ḿéàñš | Éẋîţ | ĤŢŢÞ |
|---|---|---|---|
invalid | ţĥé çĥàñĝé šéţ đöéš ñöţ đéçöđé, ƒàîļš îţš šçĥéḿà öŕ çöñţŕàđîçţš îţšéļƒ | 2 | 400 |
not_found | à ŕéƒéŕéñçé ŕéšöļṽéš ţö ñö đöçüḿéñţ, ƃļöçķ öŕ éđîţîöñ, öŕ à find ḿàţçĥéš ñöţĥîñĝ | 3 | 404 |
ambiguous | à ķéý öŕ à find ḿàţçĥéš ḿöŕé ţĥàñ öñé ţĥîñĝ | 3 | 409 |
stale | àñ if_match ƒàîļš ţö ĥöļđ, öŕ üñđéŕ require_basis ţĥé ƃàšîš ḿöṽéđ | 3 | 409 |
doc_changed | ţĥé đöçüḿéñţ çĥàñĝéđ üñđéŕ ţĥé çöḿḿîţ àñđ öñé ḿöŕé þàšš çöüļđ ñöţ šéţţļé îţ | 3 | 409 |
guard | ţĥé ŕéšüļţ ƃŕéàķš àñ îñļîñé çöđé, à þļüŕàļ öŕ šéļéçţ, öŕ à þöšîţîöñ (šüƃçöđé codes_changed, structure_lost, bad_position öŕ overlap) | 3 | 422 |
gate_failed | ţĥé çöḿḿîţ çĥéçķ ƒöüñđ à ƒàîļîñĝ ƒîñđîñĝ ţĥé çĥàñĝé îñţŕöđüçéš | 3 | 422 |
unsupported | ţĥé ƒöŕḿàţ, ţĥé éđîţîöñ öŕ ţĥé ĥöḿé ļàçķš ţĥé çàþàƃîļîţý ţĥé öþéŕàţîöñ ñééđš | 3 | 422 |
not_permitted | ţĥé þöļîçý ŕéƒüšéš ţĥé öþéŕàţîöñ ţö îţš šéñđéŕ | 3 | 403 |
budget_exceeded | à ŕéšöüŕçé ƃöüñđ ŵàš ŕéàçĥéđ | 3 | 413 |
unreachable | à ƃàçķéñđ đîđ ñöţ àñšŵéŕ | 5 | 503 |
À ŕéƒüšéđ öþéŕàţîöñ ŕéþöŕţš ñö ŕéṽîšîöñ öŕ þöšîţîöñ,
šîñçé ñöţĥîñĝ ŵàš ŵŕîţţéñ; à çĥàñĝé šéţ ŕéƒüšéđ àƒţéŕ îţš đöçüḿéñţš ŵéŕé ŕéàđ
ļîšţš éàçĥ ŵîţĥ written: false. À ŕéšöļṽéđ þöšîţîöñ þŕîñţš îţš ŕüñ àñđ îţš
öƒƒšéţ, à žéŕö öƒƒšéţ îñçļüđéđ. Éàçĥ đöçüḿéñţ çàŕŕîéš ţĥé ƒîñđîñĝš ţĥé éđîţ
îñţŕöđüçéđ, ƒàîļîñĝ öŕ ñöţ (change.NewFindings), éàçĥ ŵîţĥ ţĥé ŕàñĝé îţ ƒöüñđ
ŵĥéŕé ţĥé ŕüļé ļöçàţéš öñé àñđ, ƒöŕ à ţéŕḿ ŕüļé, ţĥé ŵöŕđîñĝ îţ àšķš ƒöŕ: àñ
éḿþţý ļîšţ ŵĥéñ ţĥé çĥéçķ ŕàñ àñđ ƒöüñđ ñöţĥîñĝ, àñđ ñöñé ŵĥéŕé ñö çĥéçķ
àþþļîéš. À gate_failed ŕéƒüšàļ çöüñţš ţĥé
ƒàîļîñĝ ƒîñđîñĝš àñđ ļéàṽéš ţĥéḿ öñ ţĥé đöçüḿéñţ. À find ţĥàţ ḿàţçĥéš ñöţĥîñĝ
îš ŕéƒüšéđ not_found ŵîţĥ ţĥé þàţĥ àñđ ţĥé ţéẋţ îţ šéàŕçĥéđ àñđ üþ ţö ţĥŕéé
çàñđîđàţéš. Îñ à partial ŕéšüļţ ţĥé öþéŕàţîöñš öñ ţĥé ƒîļéš ţĥàţ
ŵéŕé ñöţ ŵŕîţţéñ àŕé not_applied, àñđ šö àŕé ţĥé đéçîšîöñš àñđ àššéţ
öþéŕàţîöñš, ŵĥîçĥ ŵàîţ ƒöŕ çöñţéñţ ţĥàţ àļļ ļàñđéđ; ţĥé ŕéçöŕđ ĥöļđš ŵĥàţ đîđ.
À stale ŕéƒüšàļ çàŕŕîéš ţĥé éđîţîöñ àš îţ šţàñđš, šö ţĥé šéñđéŕ çàñ ŕéƃàšé
ŵîţĥöüţ àñöţĥéŕ ŕéàđ. À ŕéšöüŕçé ƃöüñđ core/safeio ŕéþöŕţš îš
budget_exceeded. À çĥàñĝé šéţ ŕéƒüšéđ ƃéƒöŕé àñý öþéŕàţîöñ îš çöñšîđéŕéđ,
ƃéçàüšé îţ đöéš ñöţ đéçöđé öŕ ţĥé ŕéǫüéšţ çàŕŕýîñĝ îţ îš ŕéƒüšéđ, îš àñšŵéŕéđ
ŵîţĥ ţĥé šàḿé ŕéšüļţ šĥàþé (change.ErrorResult): šţàţüš refused, ñö ŕéçöŕđ,
ñö ƒîļéš öŕ öþéŕàţîöñš, àñđ ţĥé éŕŕöŕ. kapi apply --json þŕîñţš ţĥàţ ŕéšüļţ
ƒöŕ à çĥàñĝé šéţ ţĥàţ đöéš ñöţ đéçöđé öŕ çöñţŕàđîçţš îţšéļƒ, àñđ éẋîţš 2, àš
ḾÇÞ àñđ ţĥé ƃŕöŵšéŕ àñšŵéŕ öñé.
Çöñšéǫüéñçéš
- À šéñđéŕ àļŵàýš ļéàŕñš ŵĥéţĥéŕ îţš çĥàñĝé ļàñđéđ àñđ, ŵĥéñ îţ đîđ ñöţ, ŵĥîçĥ öƒ à ƒéŵ ţĥîñĝš ţö đö ñéẋţ: ŕéţàŕĝéţ, ŕé-ŕéàđ àñđ ŕéšéñđ, ƒîẋ ţĥé çöñţéñţ, öŕ àšķ à þéŕšöñ.
- Çöñçüŕŕéñţ ķàþî ŵŕîţéŕš öƒ öñé ƒîļé ļöšé ñöţĥîñĝ: éàçĥ ƒîļé à çĥàñĝé ŕéàđš îš ĥàšĥéđ ƃéƒöŕé ţĥé ŕéàđ àñđ àĝàîñ üñđéŕ ţĥé ļöçķ. Ţĥé ļöçķ öŕđéŕš ķàþî'š öŵñ þŕöçéššéš, àñđ îñ ţĥé ƃŕöŵšéŕ, ŵĥîçĥ ŕüñš öñé, ţĥé çàļļš öƒ ţĥé þàĝé; àñ éđîţöŕ ţĥàţ šàṽéš ƃéţŵééñ ţĥé ŕé-ĥàšĥ àñđ ţĥé ŕéñàḿé ŕéḿàîñš à çöñƒļîçţ ţĥé ñéẋţ ŕéàđ šééš.
- Àñ öþéŕàţîöñ ŕéþöŕţéđ
appliedŕéàçĥéđ ţĥé ƒîļé. Öñé ţĥé ƒöŕḿàţ ĥàš ñö þļàçé ƒöŕ îñ ţĥàţ ƒîļé îš ŕéƒüšéđ. - Ƃýţéš ķàþî çöüļđ ñöţ ŕéàđ àš ÜŢƑ-8, îñ à ƒîļé îñ àñöţĥéŕ éñçöđîñĝ, àŕé ñéṽéŕ
öṽéŕŵŕîţţéñ ŵîţĥ ţĥé Ü+ƑƑƑĐ à ŕéàđ šĥöŵš ƒöŕ ţĥéḿ: àñ éđîţ ţĥàţ ŵöüļđ ŵŕîţé îţ
ţĥéŕé îš ŕéƒüšéđ àš
unsupported, àñđ éđîţš éļšéŵĥéŕé îñ ţĥé ƒîļé ķééþ ţĥéḿ. - À çĥàñĝé šéţ îš àļļ öŕ ñöţĥîñĝ àçŕöšš đöçüḿéñţš üþ ţö ţĥé ƒîñàļ ŕéñàḿéš. Ŕéçöŕđš ƒöļļöŵ ţĥé çöḿḿîţ, šö à ŕéçöŕđ ţĥàţ ƒàîļš ţö ŵŕîţé ļéàṽéš çöñţéñţ ţĥàţ ţĥé ñéẋţ ŕéàđ ƒîñđš àñđ ŕéçöŕđš àš öƃšéŕṽéđ.
- À šüŕƒàçé ţĥàţ àđđš à ŵŕîţé þàţĥ àđđš à ĥöḿé öŕ à ĥööķ, àñđ ţĥé çöñţŕàçţ, ţĥé àþþļîéŕ àñđ ţĥé ŕüļéš šţàý öñé.