Ķééþ ýöüŕ šöüŕçé çöñţéñţ öñ ƃŕàñđ
Ĝöàļ: ƒļàĝ ƒöŕƃîđđéñ, çöḿþéţîţöŕ, àñđ öƒƒ-þŕéƒéŕŕéđ ţéŕḿš îñ ýöüŕ šöüŕçé çöñţéñţ àñđ ŕéŵŕîţé ŵĥàţ ƒàîļš, šö ŵĥàţ ĝöéš ţö ţŕàñšļàţîöñ (öŕ þŕöđüçţîöñ) îš àļŕéàđý öñ-ƃŕàñđ. Ţĥîš îš šöüŕçé ĝöṽéŕñàñçé, ƃéƒöŕé àñý ţŕàñšļàţîöñ. Ţĥé þŕöƒîļé ƒöŕḿàţ ļîṽéš îñ Ṽöîçé þŕöƒîļé; šéţţîñĝ öñé üþ ţàķéš ţéñ ḿîñüţéš.
Ţĥé ṽîđéö ƃéļöŵ ŵàļķš ţĥé ŵĥöļé þàţĥ öñ öñé ŕéþöšîţöŕý, îñ öñé ļàñĝüàĝé. À
đŕàƒţéđ çöñţéẋţ ĝŕàþĥ (ŕéçîþé, ṽöîçé þŕöƒîļé, ṽöçàƃüļàŕý) îš ŕéṽîéŵéđ àñđ
çöḿḿîţţéđ; kapi check --strict ŕüñš àš à ĝàţé öṽéŕ öþéŕàţöŕ đöçüḿéñţàţîöñ,
îñţéŕƒàçé šţŕîñĝš àñđ à ḿàŕķéţîñĝ þàĝé; ţĥé ƒàîļüŕéš àŕé çöŕŕéçţéđ ţĥŕéé ŵàýš îñ
ţĥé šöüŕçé àñđ öñçé àš à ṽöçàƃüļàŕý đéçîšîöñ ţĥé ĝŕàþĥ ķééþš, šö ţĥé ñéẋţ çĥéçķ
éñƒöŕçéš ŵĥàţ ţĥé ļàšţ öñé þàššéđ. Ñö šéŕṽéŕ, ñö ḿöđéļ, ñö šéçöñđ ļàñĝüàĝé.
- Đéšķţöþ
- Àĝéñţ (Çļàüđé)
- ÇĻÎ
Ŵîţĥ à ṽöîçé þŕöƒîļé ƃöüñđ îñ ţĥé þŕöĵéçţ (Þŕöĵéçţ Šéţţîñĝš), ţĥé Çĥéçķš ṽîéŵ éñƒöŕçéš îţ öṽéŕ éṽéŕýţĥîñĝ ţĥé þŕöĵéçţ ţŕàçķš:
- Ŕüñ ţĥé çĥéçķš. Ṽöîçé ṽöçàƃüļàŕý ƒîñđîñĝš àþþéàŕ àļöñĝšîđé ĥýĝîéñé àñđ ļéñĝţĥ, éàçĥ ñàḿéđ ƃý ŕüļé, ļöçàţéđ ţö à ƃļöçķ, ŵîţĥ ţĥé šüĝĝéšţéđ ŵöŕđîñĝ.
- Ƒîẋ àţ ţĥé ƃļöçķ. Öþéñ ţĥé ƒļàĝĝéđ ƒîļé, çöŕŕéçţ ţĥé ŵöŕđîñĝ, ŕé-ŕüñ; ţĥé šçöŕé çļîḿƃš àš ƒîñđîñĝš çļéàŕ.
- Ƒîẋ ţĥé ŕüļé àš ŵéļļ àš ţĥé đŕàƒţ. À ŕéçüŕŕîñĝ öƒƒ-ƃŕàñđ ţéŕḿ ƃéļöñĝš îñ ţĥé þŕöƒîļé: àđđ îţ àš à ṽöçàƃüļàŕý ŕüļé üñđéŕ Çöñţéẋţ → Ṽöîçé šö éṽéŕý ļàţéŕ çĥéçķ éñƒöŕçéš îţ.
Àšķ ƒöŕ ţĥé šŵééþ:
Çĥéçķ
blog/àĝàîñšţ öüŕ ṽöîçé þŕöƒîļé àñđ ƒîẋ àñýţĥîñĝ öƒƒ-ƃŕàñđ.
Ţĥé àššîšţàñţ ļöàđš ţĥé ṽöîçé ƒîŕšţ (kapi voice guide, îñĵéçţéđ îñţö îţš çöñţéẋţ šö îţ ŕéŵŕîţéš öñ-ṽöîçé ŕàţĥéŕ ţĥàñ ḿéŕéļý ŕüļé-çöḿþļîàñţ), ŕüñš check_file, ŕéŵŕîţéš éàçĥ ƒļàĝĝéđ ƃļöçķ, àñđ ļàñđš ţĥé éđîţš ŵîţĥ apply_edits (šţŕüçţüŕé îñţàçţ, ñö šéçöñđ ḿöđéļ). Ŵĥéñ à ţéŕḿ ŕéçüŕš, îţ þŕöþöšéš à voice çĥàñĝé-šéţ éñţŕý ţĥàţ àđđš ţĥé ṽöçàƃüļàŕý ŕüļé ţö ýöüŕ çöḿḿîţţéđ þŕöƒîļé; git diff îš ţĥé ŕéṽîéŵ šüŕƒàçé. Îţ ŕé-çĥéçķš üñţîļ ţĥé ĝàţé îš ĝŕééñ.
Çĥéçķ àĝàîñšţ à þŕöƒîļé (ýöüŕš, öŕ à ƃüîļţ-îñ šţàŕţéŕ þàçķ) þļüš àñý îñļîñé çöñšţŕàîñţš:
kapi check blog-post.md --profile-file brand/voice.yaml
kapi check blog-post.md --pack marketing-blog
kapi check product-brief.md --forbid "synergy" --forbid "disrupt" --max-words 500
Éẋîţ 0 îš à þàšš, 3 à ĝàţé ƒàîļüŕé; --json éḿîţš ţĥé kapi.check/v1 Ŕéþöŕţ ŵîţĥ öñé ƒîñđîñĝ þéŕ ƃļöçķ (Çĥéçķš đöçüḿéñţš ţĥé šçĥéḿà). Ţĥéñ ƒîẋ àñđ ŕé-çĥéçķ:
kapi inspect blog-post.md --jsonl > blocks.jsonl
# rewrite each flagged block's "text" (keep the <x id="…"/> tags) into edits.jsonl
kapi apply edits.jsonl --diff # preview
kapi apply edits.jsonl # write through the faithful round-trip
kapi check blog-post.md --profile-file brand/voice.yaml
Àñ éđîţ ŵĥöšé çöñţéñţ ĥàšĥ đŕîƒţéđ, öŕ ţĥàţ ŵöüļđ çöŕŕüþţ àñ îñļîñé çöđé, îš ļéƒţ üñçĥàñĝéđ àñđ ŕéþöŕţéđ; šéé Éđîţ çöñţéñţ. Ƒöŕ đéţéŕḿîñîšţîç ţéŕḿ šüƃšţîţüţîöñ ŵîţĥ ñö àššîšţàñţ (ṽöçàƃüļàŕý öñļý), kapi voice rewrite --profile-file brand/voice.yaml ŕéàđš šţđîñ öŕ --input-text àñđ ŕéþöŕţš éàçĥ çĥàñĝé. Ţö àļšö àđđ ţĥé ḿîššîñĝ ŕüļé ŵĥîļé ƒîẋîñĝ ţĥé đŕàƒţ, šĥîþ ƃöţĥ îñ öñé çĥàñĝé-šéţ:
{"kind":"content","file":"blog-post.md","id":"paragraph-0","content_hash":"b74d19…","text":"Today we use our infrastructure..."}
{"kind":"voice","op":"add-rule","list":"forbidden","term":"leverage","replacement":"use","severity":"minor"}
Ţĥé voice éñţŕý ļàñđš îñ ţĥé çöḿḿîţţéđ þŕöƒîļé ÝÀḾĻ ţĥé ŕéçîþé ƃîñđš àñđ çöḿþîļéš îñţö ţĥé ļöçàļ šţöŕé, šö ţĥé ñéẋţ çĥéçķ éñƒöŕçéš îţ (ŕéǫüîŕéš à kapi þŕöĵéçţ).
Îñ à þŕöĵéçţ
Ƃîñđ ţĥé þŕöƒîļé öñçé (defaults.voice.profile_file) àñđ éṽéŕý šüŕƒàçé þîçķš îţ üþ: ţĥé Çĥéçķš ṽîéŵ, ţĥé àššîšţàñţ'š ļööþ, ƃàŕé kapi check, àñđ ţĥé šĥîþ ĝàţé'š ṽöîçé ĝàţé. Ŵĥéñ ţŕàñšļàţîñĝ, à ƃöüñđ ṽöîçé îš àļšö îñĵéçţéđ îñţö ţĥé ţŕàñšļàţîöñ þŕöḿþţ, šö ţàŕĝéţ-ļàñĝüàĝé öüţþüţ šţàŕţš öñ-ƃŕàñđ.
Ñéẋţ
- Šéţ üþ ýöüŕ ƃŕàñđ ĝüîđé îñ 10 ḿîñüţéš: ƒŕöḿ šţàŕţéŕ þàçķ ţö ƃöüñđ þŕöƒîļé.
- Çöñţéñţ ĝöṽéŕñàñçé ƒöŕ ÀÎ: ṽöîçé + ţéŕḿš + çĥéçķš àš öñé ĝüàŕđŕàîļ šéţ.
- Çĥéçķ çöñţéñţ ļîķé ţéšţš: ţĥé ĝàţé ḿéçĥàñîçš àñđ éẋîţ çöđéš.