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

É-04: Ƒļöŵš àñđ Î/Ö ƃîñđîñĝ

Šüḿḿàŕý

Ţĥŕéé ñöüñš đîṽîđé ţĥé ŵöŕķ çļéàñļý: à ţööļ îš ţĥé üñîţ öƒ ŵöŕķ, à ƒļöŵ îš à ñàḿéđ ŕéüšàƃļé çöḿþöšîţîöñ öƒ ţööļš, àñđ à ƃîñđîñĝ îš àñ éñđ: ŵĥéŕé çöñţéñţ éñţéŕš àñđ ļéàṽéš. À ƒļöŵ îš à þüŕé ţŕàñšƒöŕḿàţîöñ öṽéŕ à šţŕéàḿ öƒ Ƃļöçķš ƃàçķéđ ƃý à ƃļöçķ-šţöŕé šéššîöñ: îţ öŵñš ñö Î/Ö, àñđ à šîñĝļé ţööļ îš ñöţ à ƒļöŵ. Ŵĥéŕé çöñţéñţ éñţéŕš (ţĥé šöüŕçé ƃîñđîñĝ) àñđ ŵĥéŕé ŕéšüļţš ĝö (ţĥé šîñķ ƃîñđîñĝ) àŕé ŕéšöļṽéđ ƒŕöḿ îñṽöçàţîöñ çöñţéẋţ, ñöţ éñçöđéđ îñ ţĥé ƒļöŵ ĝŕàþĥ. Ţĥé šàḿé ƒļöŵ đéƒîñîţîöñ ŕüñš ŵĥéţĥéŕ îţš çöñţéñţ çöḿéš ƒŕöḿ à ƒîļé, à .kpz ŵöŕķšþàçé, ţĥé þŕöĵéçţ ƃļöçķ šţöŕé, öŕ àñ îḿþöŕţéđ îñţéŕçĥàñĝé ƒîļé, àñđ ŵĥéţĥéŕ îţš ŕéšüļţš àŕé ŵŕîţţéñ ţö à ƒîļé, çöḿḿîţţéđ àš öṽéŕļàýš ţö ţĥé šţöŕé, öŕ ƃöţĥ.

À šîñķ îš öþţîöñàļ. À þŕöçéšš-öñļý ŕüñ ļàñđš îţš ŵöŕķ àš öṽéŕļàýš îñ ţĥé þŕöĵéçţ öŕ .kpz àñđ éḿîţš ñö ƒîļé; ḿàţéŕîàļîžàţîöñ îš à šéþàŕàţé, ļàţéŕ šîñķ öþéŕàţîöñ (merge / export / pack). Ţĥîš ĝîṽéš ţĥé .kpz ļîƒéçýçļé à ƒîŕšţ-çļàšš šĥàþé: extract (šöüŕçé → šţöŕé), run / ţŕàñšƒöŕḿ (šţöŕé → šţöŕé), merge (šţöŕé → ƒîļé).

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

Ţŕàñšƒöŕḿéŕš (É-03) çöḿé îñ ţŵö ķîñđš: îđéḿþöţéñţ ḿöđéļ-šéţţļîñĝ ţŕàñšƒöŕḿš ţĥàţ ŕüñ öñçé àţ îñĝéšţ àñđ þéŕšîšţ ţö ţĥé šţöŕé, àñđ ŕöüñđ-ţŕîþ-þàîŕéđ ƃŕàçķéţš (ŕéđàçţ … üñŕéđàçţ) ţĥàţ àŕé þàŕţ öƒ à ŕüñ'š šöüŕçé/šîñķ ŵîŕîñĝ.

Ƃîñđîñĝš àŕé ñàḿéđ ƃý öñé šçĥéḿé ṽöçàƃüļàŕý àçŕöšš ţĥé ÇĻÎ, ţĥé ƒļöŵ đöçüḿéñţ, àñđ ţĥé éẋîšţîñĝ ŕéšöüŕçé ÜŔΚ. À çöñçŕéţé ƃîñđîñĝ ŕéšöļṽéš ƃý þŕéçéđéñçé (éẋþļîçîţ ƒļàĝ, ţĥéñ þŕöĵéçţ öŕ .kpz çöñţéẋţ, ţĥéñ ţĥé ƒļöŵ'š îñţéñţ, ţĥéñ àüţö-đéţéçţîöñ), àñđ kapi run --explain àļŵàýš šĥöŵš ţĥé ŕéšöļṽéđ source → sink šö ñöţĥîñĝ îš ĥîđđéñ. À ƒļöŵ đéçļàŕéš öñļý îñţŕîñšîç îñţéñţ (sink: none ƒöŕ àñ àñàļýšîš ƒļöŵ), ñéṽéŕ à þàţĥ.

Çöñţéẋţ

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

Ţĥé þŕöçéššîñĝ éñĝîñé îš ƃüîļţ àŕöüñđ ţĥàţ ƒàçţ. flow.DefaultExecutor öŕçĥéšţŕàţéš ţööļš öṽéŕ à blockstore.Session àñđ ĥàš ñö ñöţîöñ öƒ ƒîļéš, ŕéàđéŕš, öŕ ŵŕîţéŕš; Î/Ö ļîṽéš àţ ţĥé éđĝéš, öüţšîđé ţĥé ƒļöŵ. Ţĥîš ÀĐ ñàḿéš ţĥöšé éđĝéš àñđ šéţţļéš ţŵö ǫüéšţîöñš:

  1. Ţĥé ƒļöŵ'š šĥàþé îš source → {flow} → sink: ţĥé éñđš àŕé çöñţéẋţ-ŵîŕéđ ƃîñđîñĝš, ñöţ à ƒîẋéđ ŕéàđ → þŕöçéšš → ŵŕîţé ƃàķéđ îñţö ţĥé ĝŕàþĥ.
  2. À ŕüñ ñééđ ñöţ þŕöđüçé à ƒîļé: îţ çàñ ƃé þŕöçéšš-öñļý, ļàñđîñĝ îţš ŵöŕķ îñ ţĥé šţöŕé.

Đéçîšîöñ

Ţĥŕéé ñöüñš: ţööļ, ƒļöŵ, ƃîñđîñĝ

Î/Ö šîţš öüţšîđé ţĥé ƒļöŵ, ļéàṽîñĝ ţĥŕéé çöñçéþţš, éàçĥ ŵîţĥ éẋàçţļý öñé ĵöƃ:

  • Ţööļ: ţĥé üñîţ öƒ ŵöŕķ. À šîñĝļé çàþàƃîļîţý-ţýþéđ ţŕàñšƒöŕḿàţîöñ öṽéŕ ţĥé Þàŕţ šţŕéàḿ: Annotate, Produce, öŕ Transform (É-03). À ţööļ ŕüñš öñ îţš öŵñ; îţ ñééđš ñö ƒļöŵ.
  • Ƒļöŵ: à ñàḿéđ, ŕéüšàƃļé çöḿþöšîţîöñ öƒ ţööļš. À ƒļöŵ çàŕŕîéš ţĥé öŕđéŕîñĝ, ţĥé ƃŕàñçĥîñĝ (parallel:, ţéé, ƃàţçĥ), àñđ ţĥé þéŕ-ţööļ çöñƒîĝüŕàţîöñ, àñđ ñöţĥîñĝ éļšé. Îţ îš ţĥé ŕéçîþé.
  • Ƃîñđîñĝ: ţĥé éñđš. Ŵĥéŕé çöñţéñţ éñţéŕš (šöüŕçé) àñđ ŵĥéŕé ŕéšüļţš ļéàṽé (šîñķ). À ƃîñđîñĝ ƃéļöñĝš ţö ñéîţĥéŕ ţĥé ţööļ ñöŕ ţĥé ƒļöŵ; îţ îš šüþþļîéđ ƃý ţĥé îñṽöçàţîöñ àñđ ţĥé þŕöĵéçţ.

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

  • Çöñƒîĝüŕàţîöñ: à ƒļöŵ þîñš éàçĥ ţööļ'š šéţţîñĝš, šö îţ îš à çöñƒîĝüŕéđ ŕéçîþé (recycle{fuzzy:75}translate{provider:anthropic}qa), ñöţ ḿéŕéļý àñ öŕđéŕéđ šéţ öƒ ţööļ ñàḿéš.
  • Ţöþöļöĝý: à ƒļöŵ îš à ĐÀĜ. parallel: ƒàñ-öüţ, ţéé, àñđ ƃàţçĥ àŕé ĝŕàþĥ šĥàþéš à šéǫüéñçé çàññöţ éẋþŕéšš.
  • Îđéñţîţý àñđ ŕéüšé: à ƒļöŵ ĥàš à ñàḿé àñđ à šöüŕçé (ƃüîļţ-îñ, üšéŕ, þŕöĵéçţ). À þŕöĵéçţ'š flows: ƃļöçķ îš îţš ṽöçàƃüļàŕý öƒ ñàḿéđ öþéŕàţîöñš, ṽéŕšîöñéđ ŵîţĥ ţĥé ŕéçîþé àñđ šĥàŕéđ ļîķé àñý öţĥéŕ àŕţîƒàçţ. À ƒļöŵ îš þöŕţàƃļé, đéçļàŕàţîṽé îñţéñţ àñđ öŵñš ñö Î/Ö, šö îţ ţŕàṽéļš îñ à þŕöĵéçţ'š þöŕţàƃļé ţŵîñ, ţĥé .kpz þàçķàĝé (Ḿ-06), ļîķé àñý öţĥéŕ ŕéçîþé ƒîéļđ.
  • Ţŕàñšƒöŕḿéŕ ŕöļéš: îñĝéšţ-ţîḿé šéţţļéŕš àñđ ţĥé ŕöüñđ-ţŕîþ ƃŕàçķéţš (§4) àŕé đîšţîñçţ ţŕàñšƒöŕḿéŕ ŕöļéš, ṽàļîđàţéđ ƃý ţĥé þļàçéḿéñţ þàšš (É-03), ñöţ à ƒļàţ ŕüñ öƒ ţööļš.

Ŵĥàţ à ƒļöŵ îš ñöţ: îţ îš ñöţ àñ Î/Ö ĥàŕñéšš (ţĥàţ îš ţĥé ƃîñđîñĝ), îţ îš ñöţ à ŕüñţîḿé þŕîḿîţîṽé ƃéýöñđ àñ öŕđéŕéđ ţööļ çĥàîñ öṽéŕ à šéššîöñ (É-01), àñđ îţ îš ñéṽéŕ ŕéǫüîŕéđ ţö ŕüñ öñé ţööļ.

1. Ţĥé ƒļöŵ îš ţĥé ḿîđđļé; šöüŕçé àñđ šîñķ àŕé ƃîñđîñĝš

À ƒļöŵ öþéŕàţéš öñļý öñ à šţŕéàḿ öƒ Þàŕţš ƃàçķéđ ƃý à šéššîöñ. Ţĥé éñđþöîñţš àŕé à šḿàļļ, šéþàŕàţé ƃîñđîñĝ ṽöçàƃüļàŕý (core/flow.BindingKind), ŕéšöļṽéđ ƒŕöḿ îñṽöçàţîöñ çöñţéẋţ:

ƂîñđîñĝŠöüŕçé ŕöļé (îñ)Šîñķ ŕöļé (öüţ)
fileDataFormatReader öṽéŕ ƒîļé ƃýţéšDataFormatWriter + šķéļéţöñ ŕöüñđ-ţŕîþ (É-02)
store (àļšö šþéļļéđ kpz)éẋîšţîñĝ ƃļöçķš + öṽéŕļàýš ƒŕöḿ à þéŕšîšţéñţ šţöŕéçöḿḿîţ öṽéŕļàýš; ñö ḿàţéŕîàļîžàţîöñ
interchange (xliff, po, tmx, tbx)öṽéŕļàýš ļàñđéđ ƒŕöḿ àñ îñţéŕçĥàñĝé ƒîļé (Ḿ-01)éḿîţ îñţéŕçĥàñĝé
noneñöñéđîšçàŕđ (öƃšéŕṽàţîöñ àñđ ḿéţŕîçš öñļý)

Àñ àŕçĥîṽé þàţĥ îš ñöţ à ƒîƒţĥ ķîñđ: îţ ƒàñš öüţ ţö öñé file ƃîñđîñĝ þéŕ îññéŕ éñţŕý (§6).

Ţĥé đéƒîñîñĝ þŕöþéŕţý: à ƒļöŵ đéƒîñîţîöñ îš îđéñţîçàļ àçŕöšš ƃîñđîñĝš. Ţĥé šàḿé translate-qa ƒļöŵ ŕüñš îñ ţĥé ƒîļé ÇĻÎ, àĝàîñšţ à .kpz ŵöŕķšþàçé, àñđ àĝàîñšţ à þŕöĵéçţ; öñļý ţĥé ƃîñđîñĝ đéŕš.

Éàçĥ ƃîñđîñĝ àļšö àđṽéŕţîšéš ţĥé þöŕţš îţ þŕöṽîđéš (Ƒ-02, É-03): à þļàîñ file šöüŕçé çàŕŕîéš šöüŕçé çöñţéñţ öñļý; à ƃîļîñĝüàļ îñţéŕçĥàñĝé šöüŕçé àđđš à çöḿḿîţţéđ target, šéĝḿéñţàţîöñ, àñđ àļîĝñḿéñţ; ţĥé çöñţéñţ šţöŕé àđđš éṽéŕý þéŕšîšţéđ šţàñđ-öƒƒ ļàýéŕ. Ţĥé ƒļöŵ ļöàđéŕ üšéš ţĥîš ţö ṽàļîđàţé ţĥé çöñţŕàçţ éñđ ţö éñđ: à ƒļöŵ ŵĥöšé ƒîŕšţ ţööļ ñééđš à þöŕţ ţĥé šöüŕçé çàññöţ šüþþļý, ŵîţĥ ñö üþšţŕéàḿ ţööļ ţö þŕöđüçé îţ, îš ŕéĵéçţéđ àţ ƃüîļđ (FlowDefinition.ValidateDataFlow). Šö qa, ŵĥîçĥ ŕéǫüîŕéš à target, îš ṽàļîđ àĝàîñšţ à ƃîļîñĝüàļ šöüŕçé öŕ àƒţéŕ à ţŕàñšļàţé šţéþ, ƃüţ ŕéĵéçţéđ àĝàîñšţ à þļàîñ ḿöñöļîñĝüàļ file šöüŕçé öñ îţš öŵñ.

2. Ŕéàđéŕ àñđ ŵŕîţéŕ àŕé ƃîñđîñĝš, ñöţ ĝŕàþĥ ñöđéš

Ţĥé ƒļöŵ đöçüḿéñţ çàŕŕîéš öñļý îţš šţéþš. Ŵĥéŕé çöñţéñţ éñţéŕš àñđ ļéàṽéš îš à ţöþ-ļéṽéļ source: / sink: šþéç, ñöţ à ñöđé îñ ţĥé ţööļ ĝŕàþĥ. Ţĥé file ƃîñđîñĝ îš ţĥé đéƒàüļţ, šö àñ üñǫüàļîƒîéđ kapi run <flow> -i file.json -o out.json îš source: file, sink: file. À .kpz ŵöŕķšþàçé îš source: store; merge îš source: store ŵîţĥ sink: file. Öñé ƃîñđéŕ îñţéŕƒàçé ƃàçķš ţĥéḿ àļļ, šö ţĥé éñĝîñé ñéṽéŕ šþéçîàļ-çàšéš àñ öŕîĝîñ.

apiVersion: v1
kind: FlowDefinition
metadata:
name: Production Pipeline
spec:
source: file # default; or `store`, `kpz`, `xliff`
sink: store # process-only: commit overlays, emit nothing
steps:
- tool: recycle
- tool: translate
- tool: qa

3. Šîñķ îš öþţîöñàļ → þŕöçéšš-öñļý ŕüñš

À ŕüñ ŵĥöšé sink îš store, öŕ àƃšéñţ, çöḿḿîţš îţš öṽéŕļàýš ţö ţĥé þŕöĵéçţ öŕ .kpz ƃļöçķ šţöŕé àñđ éḿîţš ñö ƒîļé. Ḿàţéŕîàļîžàţîöñ îš à đîšţîñçţ šîñķ öþéŕàţîöñ: merge (šţöŕé → ƒîļé ṽîà šķéļéţöñ), export (šţöŕé → îñţéŕçĥàñĝé), öŕ pack (šţöŕé → .kpz). Ţĥîš šéþàŕàţéš đöîñĝ ţĥé ŵöŕķ ƒŕöḿ ĥàñđîñĝ îţ öüţ, àñđ ĝîṽéš ţĥé ŵöŕķšþàçé ļîƒéçýçļé îţš ñàţüŕàļ ĝŕàîñ:

ÇöḿḿàñđŠöüŕçéŠîñķ
extractƒîļéšţöŕéîñĝéšţ šöüŕçéš îñţö ţĥé šţöŕé
run / ţŕàñšƒöŕḿšţöŕéšţöŕéþŕöçéšš-öñļý: çöḿḿîţ öṽéŕļàýš, éḿîţ ñöţĥîñĝ
mergešţöŕéƒîļéḿàţéŕîàļîžé ṽîà ţĥé šķéļéţöñ

Ƃéçàüšé ţĥé ƃļöçķ šţöŕé îš àþþéñđ-öñļý àñđ çöñţéñţ-àđđŕéššéđ, à þŕöçéšš-öñļý ŕüñ îš îđéḿþöţéñţ àñđ ŕéšüḿàƃļé: ŕé-ŕüññîñĝ šķîþš ŵöŕķ ŵĥöšé öṽéŕļàý àļŕéàđý éẋîšţš, àñçĥöŕéđ ţö ţĥé çüŕŕéñţ ƃļöçķ ĥàšĥéš (Ḿ-06). Ţĥé šţöŕé îš ţĥé ŵöŕķšþàçé.

4. Ţŕàñšƒöŕḿéŕš: šéţţļéŕš àñđ ƃŕàçķéţš

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

  • Îñĝéšţ-ţîḿé šéţţļéŕš: îđéḿþöţéñţ, ḿöđéļ-šéţţļîñĝ ţŕàñšƒöŕḿš (šéĝḿéñţàţîöñ, ñöŕḿàļîžàţîöñ) ƃéļöñĝ ţö ƃŕîñĝîñĝ çöñţéñţ îñţö ţĥé šţöŕé, ñöţ ţö éàçĥ ƒļöŵ. Ţĥéý ŕüñ öñçé àţ îñĝéšţ àñđ þéŕšîšţ àš öṽéŕļàýš; ļàţéŕ ƒļöŵš šéé ţĥé šéţţļéđ ḿöđéļ àñđ ñéṽéŕ ŕéçöḿþüţé îţ. Ţĥîš àṽöîđš ŕéđüñđàñţ þéŕ-ŕüñ ŵöŕķ àñđ ţĥé đŕîƒţ ĥàžàŕđ öƒ ŕé-šéţţļîñĝ ţĥé çàñöñîçàļ ḿöđéļ öñ éṽéŕý ŕüñ.
  • Ŕüñ ƃŕàçķéţš: þàîŕéđ, þöļîçý-ƃéàŕîñĝ ţŕàñšƒöŕḿš (ŕéđàçţ … üñŕéđàçţ, Ç-10) ƃŕàçķéţ à šîñĝļé ŕüñ àñđ ḿàý ṽàŕý þéŕ ŕüñ öŕ þŕöṽîđéŕ. Ţĥéý àŕé þàŕţ öƒ ţĥé ŕüñ'š šöüŕçé/šîñķ ŵîŕîñĝ: ţĥé öþéñîñĝ šţéþ ŕéđàçţš ŵĥàţ ţĥé šöüŕçé ƃîñđîñĝ þŕöđüçéđ, àñđ ţĥé çļöšîñĝ šţéþ ŕéšţöŕéš ƃéƒöŕé ţĥé šîñķ ƃîñđîñĝ ŵŕîţéš. Ţĥé ƃüîļţ-îñ secure-translate ƒļöŵ (ŕéđàçţ · ţŕàñšļàţé · üñŕéđàçţ) îš éẋàçţļý ţĥîš šĥàþé.

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

5. Ŕéšöļṽîñĝ à ƃîñđîñĝ àçŕöšš ţĥé ÇĻÎ àñđ ƒļöŵ šüŕƒàçéš

À ƃîñđîñĝ îš ñàḿéđ ƃý ţĥé šàḿé šḿàļļ šçĥéḿé ṽöçàƃüļàŕý (§1) öñ éṽéŕý šüŕƒàçé (ţĥé ÇĻÎ, ţĥé ƒļöŵ đöçüḿéñţ, àñđ ţĥé ŕéšöüŕçé ÜŔΚ ţĥé ţööļ ŕéšöļṽéŕ üñđéŕšţàñđš): ţĥé çöñţéñţ ḿéḿöŕý (memory:), ţĥé ţéŕḿš šţöŕé (terms:), àñđ šéĝḿéñţàţîöñ ŕüļéš (srx:), àļļ ŕéšöļṽéđ îñ core/flow/resolve.go. Ţĥîš ƒöļļöŵš ţŵö çöñṽéñţîöñš à üšéŕ àļŕéàđý ķñöŵš: đéţéçţ-ƃý-éẋţéñšîöñ ŵîţĥ àñ éẋþļîçîţ öṽéŕŕîđé (àš îñ ƒöŕḿàţ-çöñṽéŕţîñĝ ţööļš) àñđ šçĥéḿé-þŕéƒîẋéđ éñđþöîñţš (àš îñ ƒîļé-šýñç ţööļš).

Þŕéçéđéñçé. À çöñçŕéţé ƃîñđîñĝ ŕéšöļṽéš ƒŕöḿ ţĥé ƒîŕšţ šöüŕçé ţĥàţ ñàḿéš öñé, îñ öŕđéŕ: àñ éẋþļîçîţ ÇĻÎ ƒļàĝ, ţĥé þŕöĵéçţ öŕ .kpz çöñţéẋţ, ţĥé ƒļöŵ'š đéçļàŕéđ îñţéñţ, ţĥéñ àüţö-đéţéçţîöñ. kapi run --explain þŕîñţš ţĥé ŕéšöļṽéđ source → sink àñđ éẋéçüţéš ñöţĥîñĝ, šö ţĥé çĥöšéñ ƃîñđîñĝ îš àļŵàýš ṽîšîƃļé.

Ţĥé ÇĻÎ çàŕŕîéš ţĥé ļöçàţöŕ; ƃàŕé þàţĥš àŕé đéţéçţéđ, šçĥéḿéš àŕé éẋþļîçîţ. -i / -o àççéþţ éîţĥéŕ à þļàîñ þàţĥ öŕ à scheme: ļöçàţöŕ. À þļàîñ þàţĥ îš ƃöüñđ ƃý đéţéçţîöñ: îţš éẋţéñšîöñ öŕ ķîñđ đéçîđéš îţ (.kpz → ţĥé ŵöŕķšþàçé šţöŕé, .xliff / .po → îñţéŕçĥàñĝé, à þļàîñ đöçüḿéñţ → file). À scheme: ļöçàţöŕ ƒöŕçéš ţĥé ƃîñđîñĝ àñđ ŕéḿöṽéš àñý àḿƃîĝüîţý: -o store: îš ţĥé ƃļöçķ šţöŕé, ŵĥîļé -o locales/ îš à đîŕéçţöŕý öƒ ƒîļéš. file: ƒöŕçéš à þàţĥ ţĥàţ ŵöüļđ öţĥéŕŵîšé ŕéàđ àš à šçĥéḿé, àñđ àñý üñŕéçöĝñîšéđ prefix: îš ţŕéàţéđ àš þàŕţ öƒ à þàţĥ, šö à Ŵîñđöŵš đŕîṽé ļéţţéŕ ñéṽéŕ þàŕšéš àš à šçĥéḿé. Éàçĥ éẋàḿþļé ƃéļöŵ šĥöŵš ţĥé ŕéšöļṽéđ source → sink:

kapi run translate -i a.json -o b.json # file(a.json) → file(b.json)
kapi run translate -i a.json # file(a.json) → store (in a project: process-only)
kapi run translate -i work.kpz # store(work.kpz) → store (.kpz transformed in place)
kapi run translate -i work.kpz --pack # store(work.kpz) → store, then ejected to the .kpz
kapi run translate -i store: -o xliff:hand.xlf # store → interchange(hand.xlf)
kapi run qa -i a.json -o none # file(a.json) → none (analysis; report only)
kapi extract src/*.json -o work.kpz # file(glob) → store(work.kpz)
kapi merge -o locales/{lang}/{name}.{ext} # store → file(template)

extract, merge, àñđ pack àŕé ñàḿéđ þŕéšéţš ƒöŕ ţĥé ƃîñđîñĝš ţĥéîŕ ñàḿéš îḿþļý; run îš ţĥé ĝéñéŕàļ ƒöŕḿ. Àļļ ŕéšöļṽé ţĥŕöüĝĥ ţĥé šàḿé þŕéçéđéñçé àñđ ŕéþöŕţ ţĥé šàḿé --explain ļîñé.

Ţĥé ƒļöŵ đéçļàŕéš îñţéñţ, ñéṽéŕ à ļöçàţîöñ. À ƒļöŵ đöçüḿéñţ çàŕŕîéš à ƃîñđîñĝ öñļý ŵĥéñ îţ îš îñţŕîñšîç ţö ŵĥàţ ţĥé ƒļöŵ îš, àñđ ţĥéñ öñļý ţĥé ķîñđ, ñéṽéŕ à þàţĥ öŕ à çöñçŕéţé šţöŕé. À ţŕàñšļàţîöñ ƒļöŵ ḿàţéŕîàļîžéš, šö îţ ļéàṽéš îţš šîñķ üñšéţ àñđ ļéţš ţĥé îñṽöçàţîöñ þļàçé ţĥé ŕéšüļţ; àñ àñàļýšîš öŕ çĥéçķ ƒļöŵ þŕöđüçéš ñö đöçüḿéñţ, šö îţ đéçļàŕéš sink: none; à ƒļöŵ ţĥàţ öñļý ḿàķéš šéñšé öṽéŕ àñ éẋîšţîñĝ ŵöŕķšþàçé ḿàý đéçļàŕé source: store.

# A translate flow: binding-agnostic. The ends come from where it is run.
spec:
steps:
- tool: recycle
- tool: translate
- tool: qa
# A check flow: intrinsically process-only. It never emits a document, anywhere.
spec:
sink: none
steps:
- tool: qa

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

Îñ à þŕöĵéçţ, à ŕüñ ļàñđš îñ ţĥé šţöŕé. Ŵĥéñ à kapi.yaml ŕéçîþé îš îñ šçöþé, à ŕüñ ŵîţĥ ñö éẋþļîçîţ šîñķ çöḿḿîţš îţš ŵöŕķ àš öṽéŕļàýš ţö ţĥé þŕöĵéçţ ƃļöçķ šţöŕé àñđ éḿîţš ñö đöçüḿéñţ. Ḿàţéŕîàļîžîñĝ ţĥé þéŕ-ļöçàļé ƒîļéš îš à šéþàŕàţé, éẋþļîçîţ šţéþ (kapi merge). Ţĥé šţöŕé îš ţĥé ŵöŕķîñĝ çöþý: à ŕé-ŕüñ ŕéüšéš ţĥé öṽéŕļàýš àļŕéàđý þŕéšéñţ àñđ ŕéçöḿþüţéš öñļý ŵĥàţ çĥàñĝéđ (Ḿ-06).

6. Àŕçĥîṽéš: à šöüŕçé ţĥàţ ƒàñš öüţ, à šîñķ ţĥàţ ŕéþàçķš

Šöḿé îñþüţš àŕé ñöţ öñé đöçüḿéñţ ƃüţ à ñàḿéšþàçé öƒ đöçüḿéñţš: à ŽÎÞ, à ŢÀŔ, à .tar.gz. Ţĥéšé àŕé ñöţ ƒöŕḿàţš: à ƒöŕḿàţ îš ţĥé îḿþļéḿéñţàţîöñ öƒ ţĥé file ƃîñđîñĝ ƒöŕ à šîñĝļé đöçüḿéñţ (É-02). Àñ àŕçĥîṽé îš à ƃîñđîñĝ šĥàþé: îţ đéçîđéš ŵĥéŕé çöñţéñţ éñţéŕš àñđ ļéàṽéš, àñđ îţ éẋþàñđš ţö ḿàñý file ƃîñđîñĝš.

Ţĥîš îš ţĥé šàḿé šĥàþé àš kapi extract src/*.json -o work.kpz (file(glob) → store), à šöüŕçé ţĥàţ ƒàñš öüţ ţö Ñ đöçüḿéñţš. Àñ àŕçĥîṽé šöüŕçé îš ţĥàţ þàţţéŕñ ŵîţĥ ţĥé ñàḿéšþàçé îñšîđé à çöñţàîñéŕ îñšţéàđ öƒ öñ ţĥé ƒîļéšýšţéḿ. Ţĥé đéçîšîṽé þŕöþéŕţý ƒöļļöŵš ƒöŕ ƒŕéé: éàçĥ îññéŕ éñţŕý îš à ŕéàļ, šţàñđàļöñé file ŕüñ, šö îţ îñĥéŕîţš ţĥé ŵĥöļé ƒîļé ḿàçĥîñéŕý: þéŕ-éñţŕý ƒöŕḿàţ đéţéçţîöñ, þéŕ-éñţŕý çöñƒîĝüŕàţîöñ, àñđ ţĥé file šîñķ'š šķéļéţöñ ŕöüñđ-ţŕîþ. À þàçķàĝéđ, šķéļéţöñ-ƃöüñđ ƒöŕḿàţ (ÖþéñẊḾĻ, ÉÞÜƂ, ÖĐƑ) îñšîđé ţĥé àŕçĥîṽé ţĥéŕéƒöŕé ŕöüñđ-ţŕîþš ƒàîţĥƒüļļý, ƃéçàüšé îţ îš þŕöçéššéđ ƃý îţš öŵñ ŕéàđéŕ àñđ ŵŕîţéŕ, ñöţ ƒļàţţéñéđ îñţö à þàŕéñţ đöçüḿéñţ.

  • Šöüŕçé (ƒàñ-öüţ). Éñüḿéŕàţé ţĥé àŕçĥîṽé'š ŕéĝüļàŕ-ƒîļé éñţŕîéš; éàçĥ îš ŕéšöļṽéđ àñđ ŕüñ àš îţš öŵñ file šöüŕçé. Àñ éñţŕý ŵĥöšé ƒöŕḿàţ îš ƃîñàŕý (îḿàĝé, àüđîö, ṽîđéö), à ƃîļîñĝüàļ îñţéŕçĥàñĝé ƒîļé, à ñéšţéđ àŕçĥîṽé, öŕ üñŕéçöĝñîšéđ îš ñöţ þŕöçéššéđ; îţ îš çàŕŕîéđ ţö ţĥé šîñķ üñţöüçĥéđ. Éñüḿéŕàţîöñ îš ƃöüñđéđ ƃý ţĥé šĥàŕéđ žîþ-ƃöḿƃ, šîžé, àñđ éñţŕý-çöüñţ ĝüàŕđš.
  • Šîñķ (ƃàŕŕîéŕ ŕéþàçķ). Üñļîķé à ƒöļđéŕ šîñķ, ŵĥîçĥ ŵŕîţéš Ñ îñđéþéñđéñţ ƒîļéš, àñ àŕçĥîṽé šîñķ ḿüšţ éḿîţ öñé ṽàļîđ çöñţàîñéŕ àţöḿîçàļļý. Îţ îš à ƃàŕŕîéŕ: îţ ƃüƒƒéŕš ţĥé þŕöçéššéđ éñţŕîéš, ţĥéñ ŕéƃüîļđš ţĥé çöñţàîñéŕ ƒŕöḿ ţĥé öŕîĝîñàļ ƃýţéš, šþļîçîñĝ îñ öñļý ţĥé éñţŕîéš ţĥàţ ŵéŕé þŕöçéššéđ àñđ çöþýîñĝ éṽéŕý öţĥéŕ ḿéḿƃéŕ (šţŕüçţüŕé, éñţŕý öŕđéŕ, ḿéţàđàţà, çöḿþŕéššîöñ, ƃîñàŕîéš) ƃýţé-ƒöŕ-ƃýţé.

Ţĥé ƒàñ-öüţ àñđ ŕéþàçķ àŕé à šḿàļļ, þŕöṽîđéŕ-àĝñöšţîç šüƃšţŕàţé (core/container: Walk ƒöŕ àñ îñ-ḿéḿöŕý çöñţàîñéŕ, Transform ƒöŕ à šţŕéàḿîñĝ öñé, OpenEntry ƒöŕ à šîñĝļé éñţŕý) ŵîţĥ ñö đéþéñđéñçý öñ ţĥé ƒöŕḿàţ ŕéĝîšţŕý öŕ ţĥé ƒļöŵ éñĝîñé; ţĥé þéŕ-éñţŕý þŕöçéššîñĝ îš îñĵéçţéđ ƃý ţĥé çàļļéŕ. À ŕéàđ-öñļý archive ŕéàđéŕ îš ķéþţ àš ţĥé îñšþéçţîöñ ƒàçé öñļý: îţ šüŕƒàçéš éàçĥ éñţŕý'š çöñţéñţ šö kapi inspect bundle.zip šĥöŵš ŵĥàţ îš îñšîđé; îţ ĥàš ñö ŵŕîţéŕ, ƃéçàüšé þŕöçéššîñĝ àñ àŕçĥîṽé îš ţĥé ƃîñđîñĝ šĥàþé àƃöṽé, ñöţ à ƒöŕḿàţ ŕöüñđ-ţŕîþ.

Ḿéḿöŕý: ţĥé ŵĥöļé àŕçĥîṽé îš ñéṽéŕ ļöàđéđ. Transform öþéñš à ŽÎÞ ŵîţĥ ŕàñđöḿ àççéšš (çéñţŕàļ đîŕéçţöŕý þļüš šééķš) àñđ šţŕéàḿš à ŢÀŔ öŕ ŢÀŔ.ĜŽ; îţ ṽîšîţš öñé éñţŕý àţ à ţîḿé, ḿàţéŕîàļîšéš àñ éñţŕý'š ƃýţéš öñļý ŵĥéñ ţĥé þŕöçéššöŕ àçţüàļļý ŕéàđš îţ (šö üñţöüçĥéđ ḿéḿƃéŕš àŕé ŕàŵ-çöþîéđ ƒöŕ ŽÎÞ àñđ þîþéđ ţĥŕöüĝĥ ƒöŕ ŢÀŔ, ñéṽéŕ ƃüƒƒéŕéđ), àñđ ŵŕîţéš ţĥé öüţþüţ çöñţàîñéŕ îñçŕéḿéñţàļļý. Þéàķ ḿéḿöŕý îš à šîñĝļé éñţŕý, ñéṽéŕ ţĥé àŕçĥîṽé àñđ ñéṽéŕ ţĥé ƒüļļ šéţ öƒ éñţŕîéš öŕ ŕéšüļţš. Éàçĥ éñţŕý ŕüñš ţĥŕöüĝĥ FileRunner.RunStream (ƃýţéš îñ, ƃýţéš öüţ), ŵîţĥ ñö þéŕ-éñţŕý ţéḿþ ƒîļé šţàĝéđ öñ đîšķ. Ƒöŕ à šţŕéàḿîñĝ-çàþàƃļé îññéŕ ƒöŕḿàţ (É-02) ţĥé éñţŕý îš ñöţ éṽéñ ƃüƒƒéŕéđ ŵĥöļé: îţ îš ŕéàđ àñđ ŵŕîţţéñ àš à šţŕéàḿ. À ŵĥöļé-đöçüḿéñţ îññéŕ ƒöŕḿàţ îš šţîļļ ƃüƒƒéŕéđ ƒöŕ ţĥé đüŕàţîöñ öƒ îţš öŵñ þŕöçéššîñĝ (ţĥàţ îš ţĥé ƒöŕḿàţ éñĝîñé'š ŵĥöļé-đöçüḿéñţ çöñţŕàçţ), ƃüţ öñļý öñé éñţŕý îš ĥéļđ àţ öñçé. Ţĥé îñšþéçţîöñ ŕéàđ þàţĥ îš ţĥé öñé éẋçéþţîöñ: ţĥé éñĝîñé ĥàñđš à ƒöŕḿàţ ŕéàđéŕ ţĥé ƃüƒƒéŕéđ đöçüḿéñţ, šö ţĥé ŕéàđ-öñļý archive ŕéàđéŕ ŕéçéîṽéš ţĥé àŕçĥîṽé ƃýţéš üþ ƒŕöñţ, ţĥöüĝĥ îţ šţîļļ šţŕéàḿš éñţŕîéš öñé àţ à ţîḿé ṽîà Walk.

Àđđŕéššîñĝ. Àñ àŕçĥîṽé ƒîţš ţĥé ļöçàţöŕ ṽöçàƃüļàŕý (§5): à ƃàŕé .zip / .tar / .tgz / .tar.gz þàţĥ đéţéçţš àš à çöñţàîñéŕ, àñđ à šîñĝļé îññéŕ éñţŕý îš àđđŕéššéđ ŵîţĥ ţĥé ĴÀŔ-šţýļé ƃàñĝ šéþàŕàţöŕ: release.zip!docs/x.md. Ţĥé šþļîţ îš šîñĝļé-ļéṽéļ àñđ ŕéǫüîŕéš ţĥé ļéƒţ šîđé ţö ƃé àñ éẋîšţîñĝ çöñţàîñéŕ ƒîļé, šö à ŕéàļ ƒîļéñàḿé çöñţàîñîñĝ ! îš ñéṽéŕ ḿîšţàķéñ ƒöŕ à ļöçàţöŕ, àñđ ñéšţéđ-àŕçĥîṽé àđđŕéššîñĝ îš öüţ öƒ šçöþé. Ñö ñéŵ ÜŔĻ šçĥéḿé îš îñţŕöđüçéđ: kapi îñþüţš šţàý þàţĥš, šö à šçĥéḿé þŕéƒîẋ îš ŕéšéŕṽéđ ƒöŕ ĝéñüîñé ŕéḿöţé éñđþöîñţš (§7).

Ŕéàđš ĥöñöüŕ ţĥé ļöçàţöŕ ƃý öþéñîñĝ ĵüšţ ţĥàţ éñţŕý (container.OpenEntry: ŕàñđöḿ àççéšš ƒöŕ ŽÎÞ, šçàñ ƒöŕ ŢÀŔ; ţĥé àŕçĥîṽé îš ñöţ ļöàđéđ ŵĥöļé), šö kapi inspect release.zip!docs/x.md àñđ ţĥé ţööļƃöẋ üţîļîţîéš öñ öñé îññéŕ ƒîļé ŵöŕķ. Îññéŕ çöñţéñţ îš àţţŕîƃüţéđ ƃàçķ àš <archive>!<entry> éṽéŕýŵĥéŕé à šöüŕçé îš šĥöŵñ (kapi inspect ŕéçöŕđš, kapi stats ŕöŵš, ţööļƃöẋ ḿàţçĥ þŕéƒîẋéš), ṽîà à container.entry þŕöþéŕţý ţĥé àŕçĥîṽé ŕéàđéŕ šţàḿþš öñ éṽéŕý ƃļöçķ. Ŵŕîţéš ƒöļļöŵ ţĥé ƃîñđîñĝ: éđîţîñĝ à šîñĝļé éñţŕý šþļîçéš ĵüšţ ţĥàţ éñţŕý ƃàçķ ţĥŕöüĝĥ ţĥé ƃàŕŕîéŕ šîñķ, ļéàṽîñĝ éṽéŕý öţĥéŕ ḿéḿƃéŕ ƃýţé-ƒöŕ-ƃýţé; éđîţîñĝ à ŵĥöļé çöñţàîñéŕ éđîţš éàçĥ éļîĝîƃļé éñţŕý àñđ ŕéþàçķš. Ŵîţĥöüţ àñ îñ-þļàçé ƒļàĝ, à šîñĝļé-éñţŕý éđîţ þŕîñţš ţĥé éđîţéđ éñţŕý àñđ à ŵĥöļé-çöñţàîñéŕ éđîţ šţŕéàḿš ţĥé ŕéþàçķéđ àŕçĥîṽé ţö šţđöüţ (Š-04).

Þéŕ-éñţŕý çöñƒîĝüŕàţîöñ. Ƃéçàüšé éàçĥ éñţŕý îš àñ öŕđîñàŕý file ŕüñ, ţĥé ŕéçîþé'š éẋîšţîñĝ þéŕ-ƒöŕḿàţ çöñƒîĝ àñđ þŕéšéţš àþþļý ţö îññéŕ çöñţéñţ ţĥé šàḿé ŵàý ţĥéý àþþļý ţö ļööšé ƒîļéš; ţĥéŕé îš ñö þàŕàļļéļ "éñţŕîéš" çöñƒîĝüŕàţîöñ ļàñĝüàĝé.

7. Ƃéýöñđ ƒîļéš: þŕöṽîđéŕ šöüŕçéš àñđ šîñķš

Ţĥé àŕçĥîṽé šĥàþé (éñüḿéŕàţé à çöļļéçţîöñ îñţö îñđéþéñđéñţ îţéḿš, þŕöçéšš éàçĥ, ŵŕîţé ţĥé ŕéšüļţš ƃàçķ àš à ƃàţçĥ) îš ñöţ šþéçîƒîç ţö àŕçĥîṽéš. Îţ îš ţĥé šàḿé šĥàþé à ŕéḿöţé þŕöṽîđéŕ ĥàš: à ÇḾŠ, à ĥéàđļéšš ÀÞÎ, öŕ à ŠààŠ šéŕṽîçé éẋþöšéš à çöļļéçţîöñ (à šþàçé, à þŕöĵéçţ, à çöñţéñţ ţýþé) ŵĥöšé îţéḿš àŕé îñđîṽîđüàļ đöçüḿéñţš. À þļüĝîñ đéçļàŕéš öñé ŵîţĥ ţĥé source_connectors çàþàƃîļîţý (É-05); ţĥé ļöçàļ ƒîļé àñđ ĝîţ çöññéçţöŕš àŕé ţĥé ƒîļéšýšţéḿ îñšţàñçé öƒ ţĥé šàḿé îđéà.

Ţĥé ƃîñđîñĝ ṽöçàƃüļàŕý ĝéñéŕàļîžéš çļéàñļý:

àŕçĥîṽé (ƒîļé)þŕöṽîđéŕ (ŕéḿöţé/ÇḾŠ)
šöüŕçé ƒàñ-öüţéñüḿéŕàţé àŕçĥîṽé éñţŕîéšļîšţ çöļļéçţîöñ îţéḿš (þàĝîñàţéđ) ṽîà ţĥé ÀÞÎ
þéŕ-îţéḿ ŕüñîññéŕ file ŕüñ + šķéļéţöñ ŕöüñđ-ţŕîþîţéḿ ŕüñ; ţĥé çöññéçţöŕ šüþþļîéš ţĥé ƒöŕḿàţ (öƒţéñ à ŕîçĥ-ţéẋţ ĴŠÖÑ öŕ ĤŢḾĻ ƃöđý)
šîñķƃàŕŕîéŕ ŕéþàçķ îñţö öñé àŕçĥîṽéƃàţçĥ ŵŕîţé-ƃàçķ: üþđàţé éàçĥ çĥàñĝéđ îţéḿ, öŕ öñé ƃüļķ çàļļ
àđđŕéššîñĝrelease.zip!pathţĥé çöññéçţöŕ'š öŵñ ÜŔÎ šçĥéḿé
îđéñţîţý ƒöŕ ŕéšüḿééñţŕý þàţĥţĥé þŕöṽîđéŕ'š šţàƃļé îţéḿ îđ + ŕéṽîšîöñ

Ţŵö đéŕéñçéš ḿàţţéŕ, àñđ ţĥéý àŕé þŕöþéŕţîéš öƒ ţĥé þŕöṽîđéŕ, ñöţ öƒ ţĥé ƃîñđîñĝ çöñţŕàçţ:

  1. Ţĥé šîñķ îš ŕàŕéļý ƃýţé-éẋàçţ àñđ ŕàŕéļý àţöḿîç. À ƒîļéšýšţéḿ àŕçĥîṽé îš ŕéƃüîļţ ŵĥöļéšàļé ƒŕöḿ öŕîĝîñàļ ƃýţéš; à ŕéḿöţé šîñķ ŵŕîţéš éàçĥ îţéḿ ƃàçķ ţĥŕöüĝĥ ţĥé þŕöṽîđéŕ'š ÀÞÎ, îţéḿ ƃý îţéḿ, àñđ "éṽéŕýţĥîñĝ éļšé þŕéšéŕṽéđ" îš ţĥé þŕöṽîđéŕ'š ŕéšþöñšîƃîļîţý, ñöţ à ƃýţé çöþý. Šö à þŕöṽîđéŕ šîñķ îš àñ îñçŕéḿéñţàļ ƃàŕŕîéŕ (ŵŕîţé éàçĥ þŕöçéššéđ îţéḿ, ļéàṽé ţĥé ŕéšţ) ŕàţĥéŕ ţĥàñ à ŵĥöļé-àŕţîƒàçţ öñé.
  2. Îđéñţîţý îš þŕöṽîđéŕ-đéƒîñéđ àñđ ḿüšţ šüþþöŕţ ŕéšüḿé. Àñ àŕçĥîṽé éñţŕý îš àđđŕéššéđ ƃý þàţĥ; à ŕéḿöţé îţéḿ ƃý à šţàƃļé îđ þļüš à ŕéṽîšîöñ öŕ éţàĝ. Ţĥîš îš éẋàçţļý ŵĥàţ ţĥé store ƃîñđîñĝ àļŕéàđý ŵàñţš (çöñţéñţ-àđđŕéššéđ, ŕéšüḿàƃļé, þŕöçéšš-öñļý öṽéŕļàýš), šö ţĥé ñàţüŕàļ þàţţéŕñ îš þŕöṽîđéŕ šöüŕçé → šţöŕé (éẋţŕàçţ öñçé, ŕéšüḿàƃļé) àñđ à ļàţéŕ šţöŕé → þŕöṽîđéŕ þüƃļîšĥ, ḿîŕŕöŕîñĝ extract / merge ƒöŕ ƒîļéš.

Šö à ŕéḿöţé çöññéçţöŕ îš ţĥé þŕöṽîđéŕ ƒàḿîļý öƒ ţĥé šàḿé šöüŕçé/šîñķ àƃšţŕàçţîöñ: îţ ŕéüšéš ţĥé éñüḿéŕàţé → þŕöçéšš → ŵŕîţé-ƃàçķ çöñţŕàçţ àñđ ţĥé store ƃîñđîñĝ ƒöŕ îñçŕéḿéñţàļ šţàţé, àñđ šüþþļîéš éñüḿéŕàţîöñ, þéŕ-îţéḿ ƒöŕḿàţ, îţéḿ îđéñţîţý, àñđ ŵŕîţé-ƃàçķ. Ţĥé core/container šüƃšţŕàţé îš ţĥé ƒîļé îñšţàñçé; à çöññéçţöŕ îš ţĥé ŕéḿöţé îñšţàñçé. Ŵĥàţ îš ñöţ šĥàŕéđ îš ţĥé ƃýţé-éẋàçţ ŵĥöļé-àŕţîƒàçţ ŕéþàçķ: ţĥàţ îš à þŕöþéŕţý öƒ à šéļƒ-çöñţàîñéđ ƒîļé, àñđ à ŕéḿöţé þŕöṽîđéŕ šüƃšţîţüţéš îţš öŵñ ÀÞÎ ŵŕîţé-ƃàçķ.

Çöñšéǫüéñçéš

  • À ƒļöŵ đéƒîñîţîöñ îš þöŕţàƃļé àçŕöšš öŕîĝîñš: ţĥé šàḿé ƒļöŵ ŕüñš îñ ţĥé ƒîļé ÇĻÎ, à .kpz ŵöŕķšþàçé, àñđ à þŕöĵéçţ, ƃéçàüšé îţ öñļý éṽéŕ šééš à šéššîöñ öƒ Ƃļöçķš.
  • À .kpz ŵöŕķšþàçé, extract, àñđ merge àŕé öŕđîñàŕý source / sink ƃîñđîñĝš, ñöţ šþéçîàļ çàšéš.
  • Þŕöçéšš-öñļý ŕüñš ḿàķé îñçŕéḿéñţàļ, ŕéšüḿàƃļé ŵöŕķƒļöŵš ţĥé đéƒàüļţ; à ƒîļé îš ḿàţéŕîàļîžéđ öñļý ŵĥéñ à šîñķ àšķš ƒöŕ îţ.
  • kapi run <flow> -i file.json -o out.json îš ţĥé file ƃîñđîñĝ öñ ƃöţĥ éñđš: ţĥé žéŕö-çéŕéḿöñý çöḿḿöñ çàšé.
  • Îñĝéšţ-ţîḿé šéţţļîñĝ àṽöîđš þéŕ-ŕüñ šéĝḿéñţàţîöñ àñđ ñöŕḿàļîžàţîöñ ŕéçöḿþüţàţîöñ àñđ ķééþš ţĥé çàñöñîçàļ ḿöđéļ šţàƃļé àçŕöšš à þŕöĵéçţ'š ļîƒéţîḿé.
  • Ţĥé ƒļöŵ éđîţöŕ šüŕƒàçéš šöüŕçé àñđ šîñķ àš éñđþöîñţ þîçķéŕš (ƒîļé · šţöŕé · îñţéŕçĥàñĝé · ñöñé) ŕàţĥéŕ ţĥàñ ŕéàđéŕ/ŵŕîţéŕ ñöđéš; ţŕàñšƒöŕḿéŕ þļàçéḿéñţ (É-03) àñđ öṽéŕļàý çàþàƃîļîţý (Ƒ-02) àŕé îñđéþéñđéñţ öƒ ƃîñđîñĝš.
  • Ţĥé éẋéçüţöŕ ƃîñđš ñöţĥîñĝ: îţ öŕçĥéšţŕàţéš ţööļš öṽéŕ à šéššîöñ, àñđ ţĥé ƃîñđîñĝš šîţ öüţšîđé îţ.
  • Àñ àŕçĥîṽé îš à ƒàñ-öüţ öṽéŕ ţĥé file ƃîñđîñĝ, ñöţ à ƒöŕḿàţ: þéŕ-éñţŕý đéţéçţîöñ, çöñƒîĝ, àñđ šķéļéţöñ ŕöüñđ-ţŕîþ çöḿé ƒöŕ ƒŕéé (à þàçķàĝéđ ƒöŕḿàţ îñšîđé àñ àŕçĥîṽé ŕöüñđ-ţŕîþš ƒàîţĥƒüļļý), àñđ à ƃàŕŕîéŕ šîñķ ŕéþàçķš, þŕéšéŕṽîñĝ üñţöüçĥéđ ḿéḿƃéŕš ƃýţé-ƒöŕ-ƃýţé. Ţĥé ƒàñ-öüţ àñđ ŕéþàçķ àŕé à þŕöṽîđéŕ-àĝñöšţîç šüƃšţŕàţé; à ŕéàđ-öñļý archive ŕéàđéŕ ŕéḿàîñš öñļý àš ţĥé îñšþéçţîöñ ƒàçé.
  • Ţĥé šàḿé éñüḿéŕàţé → þŕöçéšš → ŵŕîţé-ƃàçķ šĥàþé éẋţéñđš ţö ŕéḿöţé çöññéçţöŕš (§7), ŵĥîçĥ ŕéüšé ţĥé store ƃîñđîñĝ ƒöŕ ŕéšüḿàƃļé šţàţé. Ţĥé ƃýţé-éẋàçţ ŵĥöļé-àŕţîƒàçţ ŕéþàçķ îš ţĥé ƒîļé-öñļý šþéçîàļîžàţîöñ.
  • Ţĥé ƒļöŵ ñöüñ ḿéàñš çöḿþöšîţîöñ: ŵîţĥ Î/Ö àţ ţĥé éđĝéš, à ƒļöŵ çàŕŕîéš çöñƒîĝüŕàţîöñ, ţöþöļöĝý, îđéñţîţý, àñđ þĥàšé šţŕüçţüŕé. À šîñĝļé ţööļ šţàýš à ţööļ.
  • Öñé šçĥéḿé ṽöçàƃüļàŕý šþàñš ţĥé ÇĻÎ ļöçàţöŕ, ţĥé ƒļöŵ đöçüḿéñţ, àñđ ţĥé ţööļ ŕéšöļṽéŕ, šö à ƃîñđîñĝ ŕéàđš ţĥé šàḿé ŵĥéŕéṽéŕ îţ àþþéàŕš. Ƃàŕé þàţĥš ķééþ ţĥé žéŕö-çéŕéḿöñý çöḿḿöñ çàšé; scheme: îš ţĥé üñàḿƃîĝüöüš éšçàþé ĥàţçĥ.
  • À đöçüḿéñţéđ þŕéçéđéñçé þļüš --explain ķééþš ţĥé ŕéšöļṽéđ ƃîñđîñĝ ṽîšîƃļé, šö ļàýéŕéđ đéƒàüļţš (ƒļöŵ îñţéñţ üñđéŕ þŕöĵéçţ çöñţéẋţ üñđéŕ àñ éẋþļîçîţ ƒļàĝ) àŕé ñéṽéŕ ĥîđđéñ çöñƒîĝüŕàţîöñ.

Ŕéļàţéđ