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

Ŕéđàçţîöñ

Ŕéđàçţîöñ ŕéþļàçéš šéñšîţîṽé çöñţéñţ (þéöþļé, üñŕéļéàšéđ þŕöđüçţ ñàḿéš, îñţéŕñàļ ŕöļéš, šéçŕéţš) ŵîţĥ þŕöţéçţéđ þļàçéĥöļđéŕš ƃéƒöŕé à đöçüḿéñţ îš šéñţ ƒöŕ ÀÎ ţŕàñšļàţîöñ öŕ ĥàñđéđ ţö àñ éẋţéŕñàļ ţŕàñšļàţöŕ, ţĥéñ ŕéšţöŕéš ţĥé öŕîĝîñàļš öñçé ţĥé ţŕàñšļàţîöñ çöḿéš ƃàçķ. Ţĥé šéñšîţîṽé ṽàļüé ñéṽéŕ ļéàṽéš ţĥé ļöçàļ ḿàçĥîñé.

redacttranslate, then unredactEmail Sarah Chen the Project Halcyon launch date.Email <x id=1/> the launch date.what the model sees: opaque tokensEnvoyez à Sarah Chen la date de lancement de Project Halcyon.originals restored locally

Ƒöŕ ţĥé àŕçĥîţéçţüŕé àñđ đéšîĝñ đéçîšîöñš ƃéĥîñđ ţĥîš, šéé Ç-10: Çöñţéñţ Ŕéđàçţîöñ.

Îñ ţĥé ÇĻÎ, redact àñđ unredact àŕé þîþéļîñé šţéþš. Ţĥéý ŕüñ îñ ƒöüŕ þļàçéš:

  • ţĥé ƃüîļţ-îñ secure-translate ƒļöŵ ŕüñš ŕéđàçţ, ţŕàñšļàţé, üñŕéđàçţ (kapi run secure-translate);
  • à þŕöĵéçţ ƒļöŵ çàñ þļàçé ţĥé šàḿé šţéþš àŕöüñđ îţš öŵñ þîþéļîñé;
  • kapi extract --redact þŕöţéçţš à ţŕàñšļàţöŕ ĥàñđ-öƒƒ;
  • îñ à þŕöĵéçţ ţĥàţ đéçļàŕéš à ŕéđàçţîöñ þöļîçý, kapi exec <tool> þüţš ţĥé ţŵö šţéþš àŕöüñđ à ţööļ ţĥàţ çàļļš à ḿöđéļ, ƒöŕ éàçĥ ƒîļé üñđéŕ ţĥé þöļîçý ţĥàţ çöṽéŕš îţ (šéé Ŕéçîþé çöñƒîĝüŕàţîöñ).

Üñđéŕ kapi exec, ţĥé šţéþš àþþļý ţĥé þöļîçý'š ŕüļéš ţö éṽéŕý ƃļöçķ ţĥé ţööļ ŕéàđš, ƃļöçķš ḿàŕķéđ ñöţ ţŕàñšļàţàƃļé îñçļüđéđ, ţö éàçĥ ţŕàñšļàţîöñ ƃéšîđé ţĥé šöüŕçé, þļüŕàļ ƒöŕḿš îñçļüđéđ, àñđ ţö éṽéŕýţĥîñĝ ţĥé ţööļ šéñđš ŵîţĥ ţĥéḿ (šéé Ŵĥàţ ţĥé þöļîçý çöṽéŕš). À þöļîçý ţĥàţ đéţéçţš éñţîţîéš šţöþš ţĥé ŕüñ, ƃéçàüšé ñö šţéþ àĥéàđ öƒ ţĥé ţööļ ƒîñđš ţĥéḿ. À ţööļ ŵîţĥ ñö đéçļàŕéđ çöñţŕàçţ đöéš ñöţ ŕüñ üñđéŕ ţĥé þöļîçý, ƃéçàüšé ķàþî çàññöţ ţéļļ ŵĥéţĥéŕ îţ çàļļš à ḿöđéļ. Šéé Üñđéŕšţàñđîñĝ ţĥé ÇĻÎ ļàýéŕš ƒöŕ ţĥé ƒļöŵ àñđ šîñĝļé-ţööļ šüŕƒàçéš.

Ţĥé þöļîçý àļšö çöṽéŕš external-command, ƃéçàüšé ţĥé þŕöĝŕàḿ îţ ŕüñš ḿàý šéñđ ŵĥàţ îţ ŕéàđš àñýŵĥéŕé. Ţĥé þŕöĝŕàḿ ŕéàđš éàçĥ ŵîţĥĥéļđ ṽàļüé àš îţš þļàçéĥöļđéŕ, àñđ ķàþî þüţš ţĥé öŕîĝîñàļ ƃàçķ îñţö ţĥé þŕöĝŕàḿ'š öüţþüţ. Ţĥîš ĥöļđš ƒöŕ kapi exec external-command àñđ ƒöŕ à ƒļöŵ, ŵĥîçĥ ñééđš à redact šţéþ àĥéàđ öƒ ţĥé ţööļ. Ŵĥéñ ţĥé öüţþüţ đŕöþš, àļţéŕš, ŕéþéàţš öŕ àđđš à þļàçéĥöļđéŕ, ţĥé ƃļöçķ ķééþš îţš çöñţéñţ àñđ ţĥé ŕüñ ŕéþöŕţš à ƒàîļîñĝ ƒîñđîñĝ ţĥàţ ñàḿéš ţĥé ƃļöçķ àñđ ţĥé þļàçéĥöļđéŕ, àñđ kapi exec àñđ kapi up éẋîţ 3.

Ŵĥàţ ţĥé þöļîçý çöṽéŕš​

Üñđéŕ à đéçļàŕéđ þöļîçý, ţĥé þöļîçý'š ŕüļéš àþþļý ţö éṽéŕý þîéçé öƒ ţĥé þŕöĵéçţ à ŕéǫüéšţ ţö à ḿöđéļ çàŕŕîéš:

  • ţĥé ƃļöçķš ţĥé ţööļ ŕéàđš, ƃļöçķš ḿàŕķéđ ñöţ ţŕàñšļàţàƃļé îñçļüđéđ, éàçĥ ţŕàñšļàţîöñ ƃéšîđé ţĥé šöüŕçé, àñđ éṽéŕý þļüŕàļ ƒöŕḿ;
  • ţĥé ƃļöçķš ƃéƒöŕé àñđ àƒţéŕ à ƃļöçķ, šéñţ ţö šĥöŵ ŵĥéŕé îţ šîţš;
  • ţĥé ƃļöçķ'š ķéý îñ îţš đöçüḿéñţ;
  • ţĥé ƃļöçķ'š þŕéṽîöüš ṽéŕšîöñ àñđ îţš àþþŕöṽéđ ţŕàñšļàţîöñ, ŕéàđ ƒŕöḿ ţĥé çöñţéñţ ḿéḿöŕý;
  • ţĥé ţéŕḿ ŕüļéš: éàçĥ ţéŕḿ, îţš ŕéþļàçéḿéñţ, àñđ ţĥé đö-ñöţ-ţŕàñšļàţé ţéŕḿš;
  • ţĥé ṽöîçé þŕöƒîļé: îţš ĝüîđàñçé, šţýļé, þàţţéŕñš àñđ éẋàḿþļéš;
  • ţĥé îñšţŕüçţîöñ, ƒŕöḿ --instruction öŕ ţĥé ŕéçîþé;
  • ţĥé đöḿàîñ ñàḿéđ ƒöŕ ţéŕḿ éẋţŕàçţîöñ àñđ ṽöîçé îñƒéŕéñçé;
  • ţĥé ţéẋţ àñ ḾÇÞ ţööļ çàļļ þàššéš, àñđ ţĥé ţŕàñšļàţîöñ þàššéđ ƃéšîđé îţ.

Ţĥîš ĥöļđš ƒöŕ kapi exec, ƒöŕ éàçĥ šţéþ öƒ à ƒļöŵ ţĥàţ ŕüñš àƒţéŕ îţš redact šţéþ (kapi run, kapi up), ƒöŕ ţĥé ḾÇÞ ţööļš, ƒöŕ Đééþéŕ ļööķ ŵîţĥ ÀÎ, àñđ ƒöŕ ţĥé ÀÎ àçţîöñš îñ Ķàþî Đéšķţöþ'š ŕéṽîéŵ (Ƒîẋ ŵîţĥ ÀÎ, Ŕéţŕàñšļàţé, Éẋþļàîñ àñđ ţĥé ÀÎ þŕé-ŕéṽîéŵ). À ṽàļüé à ƃļöçķ ŵîţĥĥöļđš ŕéàđš àš ţĥé šàḿé þļàçéĥöļđéŕ ŵĥéŕéṽéŕ ţĥé ŕéǫüéšţ çàŕŕîéš îţ. À ṽàļüé ţĥàţ àþþéàŕš öñļý ƃéšîđé ţĥé ƃļöçķ, îñ à ţéŕḿ ŕüļé šàý, ĝéţš à þļàçéĥöļđéŕ öƒ îţš öŵñ, àñđ ķàþî ŕéšţöŕéš îţ ŵĥéñ ţĥé ḿöđéļ çöþîéš îţ îñţö à ţŕàñšļàţîöñ. À ţööļ ţĥàţ ŕéàđš ţéẋţ àļöñé, šüçĥ àš ţéŕḿ éẋţŕàçţîöñ, ŕéṽîéŵ öŕ ṽöîçé îñƒéŕéñçé, ŕéàđš éàçĥ ŵîţĥĥéļđ ṽàļüé àš îţš ṽîšîƃļé þļàçéĥöļđéŕ ([REDACTED:Person]).

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

kapi voice check --ai àþþļîéš ţĥé þöļîçý öƒ ţĥé ƒîļé îţ ŕéàđš, öŕ defaults.redaction ƒöŕ ţéẋţ ĝîṽéñ îñļîñé. kapi terms expand àþþļîéš ţĥé ŕüļéš öƒ defaults.redaction ţö ţĥé ţéŕḿš îţ šéñđš, àñđ ŵŕîţéš ñö ƒöŕḿš ƒöŕ à ţéŕḿ ţĥé þöļîçý ŵîţĥĥöļđš.

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

Ĥöŵ îţ šţàýš ļöçàļ​

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

Ƒöŕ ÀÎ ţŕàñšļàţîöñ ţĥé þŕöţéçţîöñ îš šţŕüçţüŕàļ: ķàþî šéñđš ţĥé ḿöđéļ àñ öþàǫüé ţöķéñ (<x id="…"/>) îñ þļàçé öƒ éàçĥ þļàçéĥöļđéŕ, šö ţĥé ḿöđéļ ŕéçéîṽéš ñéîţĥéŕ ţĥé öŕîĝîñàļ ţéẋţ ñöŕ îţš ṽîšîƃļé ļàƃéļ, ţĥéñ ŕé-àţţàçĥéš ţĥé þļàçéĥöļđéŕ ƃý ţöķéñ ŵĥéñ ţĥé ţŕàñšļàţîöñ ŕéţüŕñš. Ƒöŕ éẋţéŕñàļ ţŕàñšļàţîöñ ţĥé þļàçéĥöļđéŕ ţŕàṽéļš îñ ţĥé ƃîļîñĝüàļ ƒîļé àš öŕđîñàŕý þŕöţéçţéđ ḿàŕķüþ ŵĥîļé ţĥé öŕîĝîñàļ↔ţöķéñ ḿàþþîñĝ šţàýš ƃéĥîñđ îñ à ĝîţîĝñöŕéđ šîđéçàŕ.

Đéţéçţîöñ​

Ŕéđàçţîöñ ƒîñđš šéñšîţîṽé šþàñš ŵîţĥ öñé öŕ ƃöţĥ đéţéçţöŕš:

  • Ŕüļéš (đéƒàüļţ) àŕé ļîţéŕàļ ţéŕḿš àñđ ŕéĝüļàŕ éẋþŕéššîöñš ýöü đéçļàŕé. Ƒüļļý öƒƒļîñé àñđ đéţéŕḿîñîšţîç.

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

    Ţĥé entity-extract šţéþ šéļéçţš ţĥé đéţéçţöŕ ŵîţĥ engine: llm (ţĥé çöñƒîĝüŕéđ ÀÎ þŕöṽîđéŕ; ţĥé đéƒàüļţ), ner (àñ öñ-đéṽîçé ḿöđéļ, ŵîţĥ ñö þŕöṽîđéŕ çàļļ, ñö çŕéđéñţîàļš àñđ ñöţĥîñĝ ļéàṽîñĝ ţĥé ḿàçĥîñé), öŕ hybrid (ƃöţĥ, ḿéŕĝéđ). Ŵîţĥ engine: ner ţĥé šţéþ çàŕŕîéš ñö ŕéḿöţé-éĝŕéšš šîđé 郃éçţ, šö ţĥé þļàçéḿéñţ þàšš àççéþţš îţ àĥéàđ öƒ redact ŵîţĥöüţ ǫüàļîƒîçàţîöñ. Ţĥé ƃŕöŵšéŕ Ƒļöŵ ŵöŕķšþàçé ļàƃ ŕüñš ţĥîš éñđ ţö éñđ ŵîţĥ à ĜĻîÑÉŔ ÖÑÑẊ ḿöđéļ ļöàđéđ îñ ţĥé þàĝé.

Éàçĥ ḿàţçĥ îš àššîĝñéđ à çàţéĝöŕý. Ţĥé ŕéçöḿḿéñđéđ çàţéĝöŕîéš àŕé person, role, product, org, location, àñđ custom, ƃüţ çàţéĝöŕîéš àŕé ƒŕéé-ƒöŕḿ, šö üšé ŵĥàţéṽéŕ ţĥé þļàçéĥöļđéŕ ţéḿþļàţé šĥöüļđ đîšþļàý.

Ŕüļéš ƒîļé​

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

# redaction.yaml: bind it with defaults.redaction.rules, and gitignore it
version: v1
placeholder: "[REDACTED:{category}]" # {category} and {n} are substituted
detectors: [rules]
rules:
- term: "Sarah Chen"
category: person
- term: "Project Halcyon" # unreleased codename
category: product
- pattern: "ACME-[A-Z]+-\\d+" # regular expression: internal SKUs
category: product
flags: [ignorecase] # also: wholeword (literal terms)

Ŵöŕķƒļöŵš​

Îñ-þŕöçéšš: šéçüŕé-ţŕàñšļàţé​

Ţĥé ƃüîļţ-îñ secure-translate ƒļöŵ ŕéđàçţš, ÀÎ-ţŕàñšļàţéš àĝàîñšţ ţĥé þļàçéĥöļđéŕš, àñđ ŕéšţöŕéš ţĥé öŕîĝîñàļš, àļļ îñ à šîñĝļé ŕüñ, šö ţĥé šéçŕéţ îš öñļý éṽéŕ îñ ḿéḿöŕý:

kapi run secure-translate -i src/locales/en.json --target-lang fr
readerchanredactplaceholders + vaultchantranslatesees tokens onlychanunredactrestore originalschanwriter

redact îš àñ öŕđîñàŕý ţŕàñšƒöŕḿéŕ šţéþ: ţĥé ƒŕàḿéŵöŕķ àþþļîéŕ ŕéŵŕîţéš ţĥé šöüŕçé, ŕéþļàçîñĝ šéñšîţîṽé šþàñš ŵîţĥ þļàçéĥöļđéŕš àñđ ṽàüļţîñĝ ţĥé öŕîĝîñàļš ƒàîļ-çļöšéđ, ƃéƒöŕé ţĥé ñéẋţ šţéþ öƃšéŕṽéš îţ. Ƃéçàüšé ŕéđàçţîöñ'š éđîţ þļàñ îš šţŕüçţüŕéđ, ŕüñ-àñçĥöŕéđ öṽéŕļàýš àţţàçĥéđ üþšţŕéàḿ (ţéŕḿš, éñţîţîéš) šüŕṽîṽé ţĥé ŕéŵŕîţé ƃý ŕéƃàšîñĝ; öñļý šþàñš öṽéŕļàþþîñĝ à ŕéđàçţéđ šþàñ àŕé đŕöþþéđ. Ţĥé ƒļöŵ'š þļàçéḿéñţ þàšš ķééþš ţĥé öŕđéŕîñĝ šàƒé: îţ ŕéĵéçţš à redact þļàçéđ àƒţéŕ àñý šţéþ ţĥàţ šéñđš šöüŕçé ţö à ŕéḿöţé šéŕṽîçé. unredact îš àñ öŕđîñàŕý ļàţé šţéþ ţĥàţ ŕéšţöŕéš ţĥé öŕîĝîñàļš öñ ţĥé ŵàý öüţ. Ýöü çàñ çöḿþöšé ƃöţĥ îñţö ýöüŕ öŵñ ƒļöŵš àš öŕđéŕéđ šţéþš:

steps:
- tool: redact
- tool: translate
- tool: unredact

Îñ à þŕöĵéçţ, à redact šţéþ ţĥàţ ñàḿéš ñö rulesPath öŕ rules öƒ îţš öŵñ ŕéđàçţš éàçĥ ƒîļé üñđéŕ ţĥé þöļîçý ţĥé ŕéçîþé đéçļàŕéš ƒöŕ ţĥàţ ƒîļé. À šţéþ ţĥàţ ñàḿéš îţš öŵñ ŕüļéš ķééþš ţĥéḿ.

Éẋţéŕñàļ: éẋţŕàçţ, ţŕàñšļàţé, ḿéŕĝé​

Ŵĥéñ à ĥüḿàñ ţŕàñšļàţöŕ öŕ ÇÀŢ ţööļ đöéš ţĥé ţŕàñšļàţîöñ, ŕéđàçţ öñ ţĥé ŵàý öüţ àñđ ŕéšţöŕé öñ ţĥé ŵàý ƃàçķ. kapi extract --redact éḿîţš à ƃîļîñĝüàļ ƒîļé çöñţàîñîñĝ öñļý þļàçéĥöļđéŕš àñđ ŵŕîţéš ţĥé öŕîĝîñàļš ţö à ļöçàļ ṽàüļţ šîđéçàŕ; kapi merge ŕéšţöŕéš ţĥéḿ àƒţéŕ ţĥé ţŕàñšļàţöŕ ŕéţüŕñš ţĥé ƒîļé.

# Emit redacted XLIFF: originals stay in .kapi/vault/batches/<batch>.json
kapi extract --redact

# ... translator fills in targets, preserving the placeholders ...

# Restore the originals into the merged target
kapi merge -i out/app.en-to-fr.xliff

Þàšš --redact-rules <path> ţö þöîñţ àţ à ŕüļéš ƒîļé đîŕéçţļý, öŕ éñàƃļé ŕéđàçţîöñ îñ ţĥé ŕéçîþé (ƃéļöŵ) šö þļàîñ kapi extract ŕéđàçţš. Üšé kapi merge --no-restore ţö ķééþ ţĥé þļàçéĥöļđéŕš îñ ţĥé ḿéŕĝéđ öüţþüţ.

Ŕéçîþé çöñƒîĝüŕàţîöñ​

Đéçļàŕé ŕéđàçţîöñ îñ ţĥé þŕöĵéçţ ŕéçîþé, àñđ ķàþî àþþļîéš îţ ŵĥéŕéṽéŕ çöñţéñţ ļéàṽéš ţĥé þŕöĵéçţ: kapi push, kapi exec, kapi extract, Đééþéŕ ļööķ ŵîţĥ ÀÎ àñđ ţĥé ŕéçöŕđ ķéþţ öƒ éàçĥ éđîţ. À þöļîçý çàñ ƃé đéçļàŕéđ îñ ţĥŕéé þļàçéš:

  • defaults.redaction, ƒöŕ éṽéŕý ƒîļé öƒ ţĥé þŕöĵéçţ;
  • redaction: öñ à çöļļéçţîöñ, ñàḿéđ öŕ ƃàŕé, ƒöŕ ţĥé ƒîļéš îţ ĥöļđš;
  • redaction: öñ à çöñţéñţ îţéḿ, ƒöŕ ţĥé ƒîļéš ţĥàţ îţéḿ ḿàţçĥéš.

Éàçĥ ƒîļé îš ŕéđàçţéđ üñđéŕ ţĥé ḿöšţ šþéçîƒîç đéçļàŕàţîöñ ţĥàţ çöṽéŕš îţ: îţš îţéḿ'š, éļšé îţš çöļļéçţîöñ'š, éļšé ţĥé đéƒàüļţš. Ţĥàţ đéçļàŕàţîöñ ŕéþļàçéš ţĥé öţĥéŕš ƒöŕ ţĥé ƒîļé. Îţš ƒîéļđš àŕé ñöţ ḿéŕĝéđ ŵîţĥ ţĥéîŕš, šö à çöļļéçţîöñ ţĥàţ ñàḿéš îţš öŵñ rules ƒîļé ŕéđàçţš ŵîţĥ ţĥàţ ƒîļé àļöñé, àñđ öñé ţĥàţ ñééđš ţĥé đéƒàüļţ ŕüļéš àš ŵéļļ ļîšţš ţĥéḿ îñ îţš öŵñ ŕüļéš ƒîļé. À redaction: àţ àñý öƒ ţĥé ţĥŕéé þļàçéš ţĥàţ šéţš rules, detectors öŕ placeholder ḿüšţ šéţ enabled: true, àñđ ţĥé ŕéçîþé ƒàîļš ţö ļöàđ îƒ îţ đöéš ñöţ; enabled: false àļöñé ţüŕñš ŕéđàçţîöñ öƒƒ ƒöŕ ţĥöšé ƒîļéš.

defaults:
source_language: en
target_languages: [fr, de]
redaction:
enabled: true
rules: redaction.yaml
detectors: [rules]
placeholder: "[REDACTED:{category}]"

collections:
- name: legal
redaction: # replaces defaults.redaction for legal/
enabled: true
rules: legal-redaction.yaml
content:
- path: "legal/*.md"

- path: "src/locales/*.json"
format: json
redaction:
enabled: false # no redaction for this entry

Çöñţéñţ ţĥàţ šîţš îñ ñö ƒîļé, šüçĥ àš ţĥé ţéẋţ àñ ḾÇÞ ţööļ çàļļ þàššéš, îš ŕéđàçţéđ üñđéŕ defaults.redaction. À .kpz þàçķàĝé ĥöļđš ƒîļéš öƒ éṽéŕý çöļļéçţîöñ, šö îñ à þŕöĵéçţ ţĥàţ đéçļàŕéš à çöļļéçţîöñ'š öŕ àñ îţéḿ'š þöļîçý, kapi exec ŕéƒüšéš ţö ŕüñ à ţööļ ţĥàţ çàļļš à ḿöđéļ öṽéŕ à þàçķàĝé; ŕüñ îţ öñ ţĥé þŕöĵéçţ'š ƒîļéš îñšţéàđ. À ŕéđàçţéđ þàçķàĝé (ƃéļöŵ) ţĥàţ kapi extract --format kpz ŵŕöţé îñ ţĥîš þŕöĵéçţ îš ţĥé éẋçéþţîöñ: îţš ƒîļéš àļŕéàđý ĥöļđ þļàçéĥöļđéŕš, šö ţĥé ţööļ ŕüñš àñđ ŕéàđš ţĥéḿ. À ƒļöŵ þļàçéš îţš öŵñ redact šţéþ, àñđ ķàþî ŕéƒüšéš ţö ŕüñ à ƒļöŵ ţĥàţ šéñđš šöüŕçé ţö à ŕéḿöţé þŕöṽîđéŕ ŵîţĥöüţ öñé. À þŕöĵéçţ ƒļöŵ ŕüñš öṽéŕ éṽéŕý ƒîļé öƒ ţĥé ŕüñ, šö îţ ñééđš ţĥé šţéþ ŵĥéñ àñý đéçļàŕàţîöñ îñ ţĥé ŕéçîþé ţüŕñš ŕéđàçţîöñ öñ. À ƃüîļţ-îñ ƒļöŵ ŕüñ öñ öñé ƒîļé ñééđš îţ ŵĥéñ à þöļîçý çöṽéŕš ţĥàţ ƒîļé.

Ŵĥéŕé ţĥé öŕîĝîñàļš ļîṽé​

ŴöŕķƒļöŵṼàüļţ
Îñ-þŕöçéšš (secure-translate, çüšţöḿ ƒļöŵš, kapi exec)Îñ ḿéḿöŕý öñ ţĥé ƃļöçķ; ŕéḿöṽéđ àƒţéŕ ŕéšţöŕé, àñđ ñéṽéŕ ŵŕîţţéñ ţö öüţþüţ
Éẋţéŕñàļ (extract --redact → merge).kapi/vault/batches/<batch-id>.json, îñ à đîŕéçţöŕý ķéþţ öüţ öƒ ṽéŕšîöñ çöñţŕöļ àñđ ŵŕîţţéñ þŕîṽàţé (0700, ƒîļéš 0600)
Þàçķàĝé ƒŕöḿ šöüŕçé ƒîļéš (extract <files> -o work.kpz --redact-rules <file> → merge work.kpz)work.kpz.vault ƃéšîđé ţĥé þàçķàĝé, ŵŕîţţéñ þŕîṽàţé (0600)

Ţĥé ṽàüļţ šîţš îñ .kapi/vault/, ƃéšîđé .kapi/work/ àñđ öüţšîđé îţ. Éṽéŕýţĥîñĝ üñđéŕ work/ ŕéƃüîļđš, šö ýöü çàñ đéļéţé îţ; à ŵîţĥĥéļđ öŕîĝîñàļ çàññöţ ƃé ŕéƃüîļţ. Ţĥé ṽàüļţ îš ñéṽéŕ çöḿḿîţţéđ àñđ ñéṽéŕ šýñçéđ ţö à šéŕṽéŕ, šö ţĥé öñļý çöþý îš ţĥé öñé öñ ýöüŕ ḿàçĥîñé. rm -rf .kapi/work šţàýš šàƒé àţ àñý ţîḿé; đéļéţîñĝ .kapi/ ŵĥöļéšàļé šţŕàñđš àñý ƃàţçĥ ýöü ĥàṽé öüţ ŵîţĥ à ţŕàñšļàţöŕ, ƃéçàüšé ţĥé ḿéŕĝé ţĥàţ ŵöüļđ ŕéšţöŕé ţĥé öŕîĝîñàļš ĥàš ñöţĥîñĝ ļéƒţ ţö ŕéàđ.

Ŕéšţöŕàţîöñ ḿàţçĥéš þļàçéĥöļđéŕš ƃàçķ ţö öŕîĝîñàļš ƃý ţöķéñ ŵĥéŕé ţĥé ƒöŕḿàţ þŕéšéŕṽéš îñļîñé šţŕüçţüŕé (îñ-þŕöçéšš þîþéļîñéš àñđ ẊĻÎƑƑ), àñđ ƃý ţĥé üñîǫüé ṽîšîƃļé ţöķéñ ţéẋţ ŵĥéŕé ţĥé ƒöŕḿàţ ƒļàţţéñš þļàçéĥöļđéŕš ţö þļàîñ ţéẋţ (šüçĥ àš ĴŠÖÑ). Öñ extract, ŕéđàçţîöñ ŕüñš ƃéƒöŕé çöñţéñţ-ḿéḿöŕý þŕé-ƒîļļ, šö ñö šéñšîţîṽé ṽàļüé çàñ ŕéàçĥ ţĥé éḿîţţéđ ƒîļé ţĥŕöüĝĥ à ḿéḿöŕý ḿàţçĥ.

À ṽàüļţ ķééþš éàçĥ öŕîĝîñàļ üñđéŕ ţĥé ƒîļé îţ çàḿé ƒŕöḿ, ţĥé ƃļöçķ, àñđ ţĥé þļàçéĥöļđéŕ'š ţöķéñ. Ƃļöçķ ÎĐš àñđ ţöķéñš ŕéþéàţ ƒŕöḿ ƒîļé ţö ƒîļé, šö ţŵö ƒîļéš ţĥàţ éàçĥ ŵîţĥĥöļđ à đéŕéñţ ñàḿé ķééþ ƃöţĥ ñàḿéš, àñđ kapi merge ĝîṽéš éàçĥ ƒîļé îţš öŵñ.

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

  • Ƒöŕ à ƃàţçĥ ṽàüļţ üñđéŕ .kapi/vault/batches/, ŕüñ kapi extract àĝàîñ. Ţĥé ñéŵ éẋţŕàçţîöñ ŵŕîţéš à ñéŵ ṽàüļţ ŵîţĥ ñéŵ ƒîļéš ţö ţŕàñšļàţé, àñđ à ƒîļé ŕéţüŕñéđ ƒŕöḿ ţĥé öļđ éẋţŕàçţîöñ ñö ļöñĝéŕ ḿéŕĝéš.
  • Ƒöŕ ţĥé þŕöĵéçţ ṽàüļţ, .kapi/vault/redaction.json, ḿöṽé ţĥé ƒîļé àšîđé àñđ ŕüñ ţĥé çöḿḿàñđ àĝàîñ. ķàþî ŵŕîţéš à ñéŵ ṽàüļţ ƒŕöḿ ţĥé çöñţéñţ îţ ŕéàđš. À ŕéçöŕđéđ éđîţ ŵĥöšé öŕîĝîñàļš àŕé îñ ţĥé öļđ ƒîļé ķééþš îţš þļàçéĥöļđéŕš, àñđ ţĥé ḿöṽéđ ƒîļé îš ţĥé öñļý çöþý öƒ ţĥöšé öŕîĝîñàļš.

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

À ÞÖ ƒîļé ĥàš ñö îñļîñé çöđéš, šö kapi extract --format po ŵŕîţéš éàçĥ ŵîţĥĥéļđ ṽàļüé àš îţš ṽîšîƃļé þļàçéĥöļđéŕ ([REDACTED:Person]), àñđ kapi merge ŕéšţöŕéš îţ ƃý ţĥàţ ţéẋţ.

Ŕéđàçţéđ .kpz þàçķàĝéš​

Üñđéŕ à ŕéđàçţîöñ þöļîçý, öŕ ŵîţĥ --redact-rules, kapi extract --format kpz àñđ kapi extract <files> -o work.kpz ŵŕîţé à ŕéđàçţéđ þàçķàĝé. Éàçĥ šöüŕçé ƒîļé îñ îţ ĥöļđš ţĥé ṽîšîƃļé þļàçéĥöļđéŕ ([REDACTED:Person]) ŵĥéŕéṽéŕ ţĥé þöļîçý ŵîţĥĥöļđš à ṽàļüé: ţĥé šķéļéţöñ, ţĥé ŕàŵ šöüŕçé ţĥàţ --with-source àđđš, àñđ ţĥé çöñţéñţ-ḿéḿöŕý ḿàţçĥéš àñđ ţéŕḿš ţĥàţ ţŕàṽéļ ŵîţĥ ţĥé þàçķàĝé. À ḿàţçĥ öŕ à ţéŕḿ îñ ŵĥîçĥ ţĥé þöļîçý'š ŕüļéš ƒîñđ à ṽàļüé šţàýš öüţ öƒ ţĥé þàçķàĝé. Ţĥé þàçķàĝé'š ḿàñîƒéšţ ŕéçöŕđš ţĥàţ îţ îš ŕéđàçţéđ àñđ ţĥé ÎĐ öƒ ţĥé ṽàüļţ ţĥàţ ŕéšţöŕéš îţ.

Ţĥé ṽàüļţ ñéṽéŕ ţŕàṽéļš îñšîđé ţĥé þàçķàĝé:

  • kapi extract --format kpz ķééþš îţ îñ ţĥé þŕöĵéçţ, àţ .kapi/vault/batches/<vault-id>.json, öñé ṽàüļţ ƒöŕ éṽéŕý þàçķàĝé öƒ ţĥé ŕüñ.
  • kapi extract <files> -o work.kpz --redact-rules <file> ŵŕîţéš îţ ƃéšîđé ţĥé þàçķàĝé, àš work.kpz.vault. Éẋţŕàçţ ñéṽéŕ ŕéþļàçéš à ṽàüļţ àļŕéàđý àţ ţĥàţ þàţĥ: ḿéŕĝé ţĥé þàçķàĝé îţ ŕéšţöŕéš ƒîŕšţ àñđ ŕéḿöṽé ţĥé ṽàüļţ, öŕ éẋţŕàçţ ţö àñöţĥéŕ ñàḿé.

Ŵĥöéṽéŕ ŕéçéîṽéš ţĥé þàçķàĝé ŵöŕķš öñ ţĥé þļàçéĥöļđéŕš. À ŕéçéîṽéŕ ŵĥö ŕüñš kapi exec öñ ţĥé þàçķàĝé ñééđš ţĥé šöüŕçé ţéẋţ îñ îţ, šö éẋţŕàçţ îţ ŵîţĥ --with-source: à þàçķàĝé ţĥàţ çàŕŕîéš öñļý šķéļéţöñš ĝîṽéš à ţööļ ñö ţéẋţ ţö ŵöŕķ öñ, àñđ ḿéŕĝéš éḿþţý ṽàļüéš. kapi merge ŕéšţöŕéš éàçĥ ƒîļé'š ṽàļüéš, îñ éṽéŕý þļüŕàļ ƒöŕḿ, ƒŕöḿ ţĥé ṽàüļţ ŵĥöšé ÎĐ ţĥé ḿàñîƒéšţ ŕéçöŕđš: îñ ţĥé þŕöĵéçţ ƒöŕ à þŕöĵéçţ þàçķàĝé, àñđ ƃéšîđé ţĥé þàçķàĝé ƒöŕ merge work.kpz. Ŵĥéñ ţĥé ṽàüļţ îš ñöţ ţĥéŕé, öŕ îţš ÎĐ đéŕš, ţĥé ḿéŕĝé šţöþš ƃéƒöŕé îţ ŵŕîţéš à ƒîļé àñđ ñàḿéš ţĥé ṽàüļţ îţ ļööķéđ ƒöŕ. Ķééþ ţĥé þļàçéĥöļđéŕš îñţàçţ đüŕîñĝ ţŕàñšļàţîöñ: à ţŕàñšļàţîöñ ţĥàţ šţîļļ ĥöļđš à þļàçéĥöļđéŕ àƒţéŕ ţĥé ŕéšţöŕé šţöþš ţĥé ḿéŕĝé, ŵĥîçĥ ñàḿéš ţĥé ƒîļé àñđ ţĥé ƃļöçķ.

kapi exec ŕüñš à ţööļ öṽéŕ à ŕéđàçţéđ þàçķàĝé öñ ţĥé þļàçéĥöļđéŕš àñđ ñéṽéŕ ŕéàđš ţĥé ṽàüļţ, šö ţĥé þàçķàĝé ķééþš ĥöļđîñĝ þļàçéĥöļđéŕš üñţîļ ţĥé ḿéŕĝé. Îñ à þŕöĵéçţ ţĥàţ đéçļàŕéš à çöļļéçţîöñ'š öŕ àñ îţéḿ'š þöļîçý, à ţööļ ţĥàţ çàļļš à ḿöđéļ ŕüñš öṽéŕ à þàçķàĝé öñļý ŵĥéñ kapi extract --format kpz ŵŕöţé ţĥé þàçķàĝé îñ ţĥîš þŕöĵéçţ, šö îţš ṽàüļţ îš àḿöñĝ ţĥé þŕöĵéçţ'š ƃàţçĥ ṽàüļţš.

Éẋţŕàçţ ŕéƒüšéš à ƒîļé îţ çàññöţ ŕéđàçţ îñţö à þàçķàĝé: öñé îñ ŵĥîçĥ ţĥé þöļîçý'š ŕüļéš šţîļļ ƒîñđ à ṽàļüé öñçé ţĥé ƃļöçķš àŕé ŕéđàçţéđ (îñ îţš ḿàŕķüþ, îñ à ƒîéļđ ķàþî đöéš ñöţ ŕéàđ àš à ƃļöçķ, öŕ àçŕöšš àñ îñļîñé çöđé), àñđ öñé ŵĥöšé ƃļöçķ ÎĐš çĥàñĝé öñçé ţĥé ṽàļüéš àŕé ŵîţĥĥéļđ. Îţ àļšö ŕéƒüšéš à þöļîçý ţĥàţ đéţéçţš éñţîţîéš, šîñçé à .kpz éẋţŕàçţîöñ ŕüñš ñö éñţîţý-éẋţŕàçţ šţéþ. À þŕöĵéçţ'š ẊĻÎƑƑ 2 öŕ ÞÖ éẋţŕàçţîöñ çàŕŕîéš ţĥé ƃļöçķš àļöñé.

Ŕéļàţéđ​