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

Ç-10: Ŕéđàçţîöñ àñđ çļéàŕàñçé

Šüḿḿàŕý​

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

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

Çöñţéẋţ​

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

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

Đéçîšîöñ​

Ţĥé þļàçéĥöļđéŕ ḿöđéļ​

À ŕéđàçţéđ šþàñ ƃéçöḿéš à model.PlaceholderRun ŵîţĥ à Type öƒ ţĥé ƒöŕḿ redaction:<category>, ḿîŕŕöŕîñĝ ţĥé entity: þŕéƒîẋ çöñṽéñţîöñ öƒ ţĥé šéḿàñţîç ṽöçàƃüļàŕý (Ƒ-02). Ţĥé ŕüñ çàŕŕîéš à šţàƃļé îđ (ţĥé ţöķéñ), à ṽîšîƃļé šţàñđ-îñ šţŕîñĝ (đéƒàüļţ ţéḿþļàţé [REDACTED:{category}]), àñđ çöñšţŕàîñţš ḿàŕķîñĝ îţ ñöñ-đéļéţàƃļé àñđ ñöñ-çļöñéàƃļé. Çàţéĝöŕîéš àŕé ƒŕéé-ƒöŕḿ šţŕîñĝš; à ŕéçöḿḿéñđéđ šéţ îš šüŕƒàçéđ îñ ţĥé đéƒàüļţš.

Ţĥé öŕîĝîñàļ ţéẋţ îš ñöţ þŕéšéñţ öñ ţĥé ŕüñ îñ àñý ƒîéļđ.

Ţĥé ļöçàļîţý ĝüàŕàñţéé​

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

ƂàçķîñĝŴĥéŕéƑöŕ
Àñ îñ-þŕöçéšš šéçŕéţ àññöţàţîöñ öñ ţĥé ƃļöçķḿéḿöŕýšîñĝļé-ŕüñ ƒļöŵš
À þéŕ-ƃàţçĥ ĴŠÖÑ šîđéçàŕ.kapi/vault/batches/<batch-id>.jsonţĥé éẋţŕàçţ → éẋţéŕñàļ ţööļ → ḿéŕĝé ŕöüñđ ţŕîþ, à þŕöĵéçţ'š ŕéđàçţéđ .kpz þàçķàĝéš àḿöñĝ ţĥéḿ
À þàçķàĝé šîđéçàŕ<package>.kpz.vault, ƃéšîđé ţĥé þàçķàĝéà ŕéđàçţéđ .kpz éẋţŕàçţéđ ƒŕöḿ šöüŕçé ƒîļéš öüţšîđé à þŕöĵéçţ
Ţĥé þŕöĵéçţ ṽàüļţ.kapi/vault/redaction.jsonçöñţîñüöüš îñĝéšţ, ŵĥîçĥ ĥàš ñö ƃàţçĥ îđ ţö ļööķ üñđéŕ

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

À šîđéçàŕ öŕ ţĥé þŕöĵéçţ ṽàüļţ ķéýš éàçĥ öŕîĝîñàļ ƃý đöçüḿéñţ, ƃļöçķ ÎĐ àñđ ţöķéñ (redaction.RedactedValue.Doc, ţĥé þŕöĵéçţ-ŕéļàţîṽé þàţĥ). Ƃļöçķ ÎĐš ŕéþéàţ àçŕöšš ƒîļéš àñđ ţĥé ţöķéñ çöüñţéŕ šţàŕţš àĝàîñ îñ éṽéŕý ƃļöçķ, šö à ķéý ŵîţĥöüţ ţĥé đöçüḿéñţ ļéţš öñé ƒîļé'š öŕîĝîñàļ öṽéŕŵŕîţé àñöţĥéŕ'š. Çöñţéñţ ţĥàţ šîţš îñ ñö ƒîļé (àñ éđîţ ŕéçöŕđ, à ñöţé) ñàḿéš îţšéļƒ îñ îţš ƃļöçķ ÎĐ àñđ ŕéçöŕđš ñö đöçüḿéñţ. Flush ŵŕîţéš ṽéŕšîöñ 2 (fileVaultVersion), ŵĥîçĥ ŕéçöŕđš ţĥé đöçüḿéñţ àñđ, ƒöŕ à ṽàüļţ à ŕéđàçţéđ þàçķàĝé ñàḿéš, ţĥé ṽàüļţ'š ÎĐ (redaction.FileVault.ID, öþţîöñàļ), àñđ redaction.OpenFileVault ŕéàđš ƒŕöḿ ṽéŕšîöñ 2 (oldestVaultVersion) üþ ţö ţĥé ṽéŕšîöñ îţ ŵŕîţéš; ţĥé ƒļööŕ šţàýš þüţ ŵĥéñ ţĥé ŵŕîţţéñ ṽéŕšîöñ ḿöṽéš. À ƒîļé ŵîţĥ ñö ṽéŕšîöñ, öŕ ƃéļöŵ ţĥé ƒļööŕ, ŵàš ŵŕîţţéñ ƃý àñ éàŕļîéŕ ķàþî, àñđ îţ îš ŕéƒüšéđ ŵîţĥ àñ *OlderVaultError (ErrOlderVault) ţĥàţ ñàḿéš ţĥé ṽéŕšîöñ ƒöüñđ; öñé àƃöṽé ţĥé ŵŕîţţéñ ṽéŕšîöñ ŵàš ŵŕîţţéñ ƃý à ñéŵéŕ ķàþî, àñđ îţ îš ŕéƒüšéđ ŵîţĥ ErrNewerVault. Éîţĥéŕ ŵàý ḿéŕĝé ƒàîļš ƒöŕ ţĥàţ ƒîļé, àñđ à ŵŕîţé ţö ţĥé ŵöŕķšþàçé ĥöḿé àñđ à ŕéàđ öƒ à ķéþţ éđîţîöñ ƒàîļ. Ţĥé çàļļéŕ ñàḿéš ţĥé çöḿḿàñđ ţĥàţ ŵŕîţéš à ñéŵ ṽàüļţ (redaction.WithRun): kapi extract ƒöŕ à ƃàţçĥ šîđéçàŕ öŕ à þàçķàĝé šîđéçàŕ, ŵĥöšé éñţŕîéš ƃéļöñĝ ţö ţĥé ƒîļéš ţĥàţ éẋţŕàçţîöñ ŵŕöţé, àñđ, ƒöŕ ţĥé þŕöĵéçţ ṽàüļţ, à ŕüñ àƒţéŕ ḿöṽîñĝ ţĥé ƒîļé àšîđé, šîñçé ţĥé öļđ ƒîļé ĥöļđš ţĥé öñļý çöþý öƒ éṽéŕý ŕéçöŕđéđ éđîţ'š öŕîĝîñàļš. Ţĥé ṽàüļţ îš ţĥé öñļý çöþý öƒ ţĥé öŕîĝîñàļš, ñéṽéŕ à çàçĥé, šö ķàþî ļéàṽéš à ŕéƒüšéđ ƒîļé àš îţ îš.

vault/ šîţš ƃéšîđé work/, öüţšîđé îţ. work/ îš đéƒîñéđ ƃý ƃéîñĝ đîšþöšàƃļé: ļöšîñĝ îţ çöšţš ÇÞÜ. Ţĥé ṽàüļţ îš đéƒîñéđ ƃý àñ éẋçļüšîöñ: à ñàḿéđ đéšţîñàţîöñ ḿüšţ ñéṽéŕ ŕéàđ îţ, àñđ ļöšîñĝ îţ ḿéàñš ŕéđàçţéđ çöñţéñţ çàñ ñéṽéŕ ƃé ŕéšţöŕéđ. Šö rm -rf .kapi/work šţàýš ƒŕéé, àñđ ķàþî ñéṽéŕ đéļéţéš ţĥé ṽàüļţ öñ îţš öŵñ îñîţîàţîṽé. core/project.Layout.PrepareVault ŵŕîţéš ţĥé đîŕéçţöŕý öŵñéŕ-öñļý àñđ àđđš îţ ţö .kapi/.gitignore ŵĥéñ ţĥàţ ƒîļé îĝñöŕéš ļéšš ţĥàñ ţĥé ŵĥöļé öƒ .kapi/, ƃéƒöŕé àñýţĥîñĝ îš ŵîţĥĥéļđ îñţö îţ.

Ƒöŕ ḿöđéļ çàļļš ţĥé ĝüàŕàñţéé îš šţŕüçţüŕàļ, ñöţ àđṽîšöŕý: à ƃļöçķ ŵîţĥ îñļîñé çöđéš îš ŕéñđéŕéđ ţĥŕöüĝĥ ţĥé þļàçéĥöļđéŕ þŕöţöçöļ, ŵĥîçĥ þŕéšéñţš éàçĥ þļàçéĥöļđéŕ àš àñ öþàǫüé ţöķéñ (ţĥé ḿöđéļ šééš ñéîţĥéŕ ţĥé öŕîĝîñàļ ñöŕ éṽéñ ţĥé ṽîšîƃļé ļàƃéļ), àñđ ţĥé ŕéţüŕñ îš ḿàţçĥéđ ƃàçķ ţö ţĥé šöüŕçé ŕüñ ƃý îđ, šö ţĥé þļàçéĥöļđéŕ šüŕṽîṽéš ţĥé ŕöüñđ ţŕîþ ŵîţĥ ƒüļļ ƒîđéļîţý (Ḿ-05).

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

À .kpz çàŕŕîéš éàçĥ šöüŕçé ƒîļé àš à šķéļéţöñ (ŵĥöšé éñţŕîéš ĥöļđ ţĥé ţéẋţ öƒ éṽéŕý ƃļöçķ, ŕéñđéŕéđ àñđ àš ŵŕîţţéñ), ŵîţĥ ţĥé ŕàŵ ƃýţéš üñđéŕ --with-source, àñđ à šķéļéţöñ ĥàš ñö þļàçéĥöļđéŕ ƒöŕḿ. Šö à þàçķàĝé ŵŕîţţéñ üñđéŕ à þöļîçý çàŕŕîéš à đéŕéñţ ƒîļé: host.redactSourceForKpz ŕüñš ţĥé redact ţööļ öṽéŕ ţĥé šöüŕçé îñ éẋţéŕñàļ ḿöđé, à šţéþ ţĥàţ đŕàŵš éàçĥ ŕéđàçţîöñ þļàçéĥöļđéŕ àš îţš ṽîšîƃļé ţöķéñ (redaction.ShowTokens), àñđ ţĥé ƒöŕḿàţ ŵŕîţéŕ, ŵĥîçĥ ŵŕîţéš ţĥé ţöķéñ àš ţéẋţ ŵĥàţéṽéŕ ţĥé ƒöŕḿàţ. Ţĥé šķéļéţöñ, ţĥé ŕàŵ šöüŕçé àñđ ţĥé çöñţéñţ-ḿéḿöŕý ļööķüþš àļļ ŕéàđ ţĥàţ ƒîļé. Ţĥé þöļîçý'š ŕüļéš, çöḿþîļéđ îñţö à đéţéçţöŕ, ŕéàđ éàçĥ ḿéḿöŕý ḿàţçĥ àñđ éàçĥ ţéŕḿš çöñçéþţ àš ĴŠÖÑ, àñđ öñé ţĥéý ƒîñđ à ṽàļüé îñ îš ļéƒţ öüţ öƒ ţĥé þàçķàĝé, ŵĥîçĥéṽéŕ ƒîļé ţĥé ṽàļüé çöḿéš ƒŕöḿ.

Ţĥé þàçķàĝé ŵöŕķš öñ ţöķéñš ƒŕöḿ ţĥéŕé öñ, šö ḿéŕĝé ŕéšţöŕéš ƃý ṽîšîƃļé ţöķéñ ŵîţĥîñ ţĥé ƃļöçķ, îñ éṽéŕý þļüŕàļ ƒöŕḿ àñđ šéļéçţ çàšé (redaction.RestoreTree), àš îţ đöéš ƒöŕ ÞÖ, ķéýéđ ƃý ţĥé ƒîļé'š ñàḿé îñ ţĥé þàçķàĝé àñđ ţĥé ƃļöçķ ÎĐ. Ţĥé ƃļöçķ ÎĐš öƒ ţĥé ŕéđàçţéđ ƒîļé àŕé ţĥöšé öƒ ţĥé öŕîĝîñàļ: éẋţŕàçţ ŕéàđš ƃöţĥ àñđ ŕéƒüšéš ţĥé ƒîļé ŵĥéñ ţĥéý đéŕ, šîñçé ḿéŕĝé ḿàţçĥéš ƃý ƃļöçķ. Ţĥé šàḿé đéţéçţöŕ ţĥéñ ŕéàđš ţĥé ŕéđàçţéđ ƃýţéš àñđ ţĥé ţéẋţ öƒ éṽéŕý ŕéđàçţéđ ƃļöçķ, àñđ éẋţŕàçţ ŕéƒüšéš ţĥé ƒîļé ŵĥéñ îţ ƒîñđš à ṽàļüé: öñé îñ ţĥé ḿàŕķüþ öŕ îñ à ƒîéļđ ţĥé ŕéàđéŕ đöéš ñöţ éẋţŕàçţ, ŵĥîçĥ ţĥé ŕéđàçţ šţéþ ñéṽéŕ šééš, öŕ öñé àçŕöšš àñ îñļîñé çöđé, ŵĥéŕé redaction.Redact šķîþš à ḿàţçĥ. À þöļîçý ţĥàţ đéţéçţš éñţîţîéš îš ŕéƒüšéđ ƃéƒöŕé àñýţĥîñĝ îš ŕéàđ, šîñçé éẋţŕàçţ ŕüñš ñö éñţîţý-éẋţŕàçţ šţéþ ţö ƒîñđ ţĥéḿ.

Ţĥé ḿàñîƒéšţ ŕéçöŕđš redaction.vaultId (kpz.Redaction), àñđ ţĥé ṽàüļţ ƒîļé ŕéçöŕđš ţĥé šàḿé ÎĐ. Ţĥé ṽàüļţ šţàýš ŵĥéŕé ţĥé ŕöüţé ķééþš îţš öŕîĝîñàļš: ţĥé þŕöĵéçţ'š ƃàţçĥ ṽàüļţ, ñàḿéđ ƃý îţš ÎĐ, ƒöŕ kapi extract --format kpz, àñđ <package>.vault ƃéšîđé ţĥé þàçķàĝé ƒöŕ àñ éẋţŕàçţ ƒŕöḿ šöüŕçé ƒîļéš, ŵĥîçĥ ŕéƒüšéš ţö ŕéþļàçé à ṽàüļţ àļŕéàđý àţ ţĥàţ þàţĥ. À ŵöŕķšþàçé çàçĥé çàŕŕîéš ţĥé ŕéçöŕđ îñ îţš ḿéţàđàţà, ŵîţĥ ţĥé þàçķàĝé'š ķîñđ, îñţéŕçĥàñĝé ţàšķ àñđ éàçĥ ƒîļé'š þŕöĵéçţ þàţĥ, àñđ à þàçķ ŵŕîţéš ţĥéḿ ƃàçķ, šö à þàçķàĝé ţĥàţ à ŕéçéîṽéŕ ŕàñ à ţööļ öṽéŕ àñđ þàçķéđ šţîļļ ḿéŕĝéš àš ŵĥàţ îţ îš. kapi merge ŕéƒüšéš à ŕéđàçţéđ þàçķàĝé ƃéƒöŕé îţ ŵŕîţéš àñýţĥîñĝ ŵĥéñ ţĥé ṽàüļţ îš àƃšéñţ öŕ îţš ÎĐ đéŕš (host.packageVault); à ṽàüļţ ţĥàţ ŕéçöŕđš ñö ÎĐ îš ŕéƒüšéđ ţĥé šàḿé ŵàý. Ḿéŕĝé ţĥéñ ŕéšţöŕéš ţĥŕöüĝĥ ţĥé ƃàţçĥ-ṽàüļţ þàţĥ ƒöŕ àñ îñţéŕçĥàñĝé þàçķàĝé (restoreRedactedBlocks) àñđ àñ unredact šţéþ îñ éẋţéŕñàļ ḿöđé ƒöŕ à ŵöŕķšþàçé. À ţŕàñšļàţîöñ ţĥàţ šţîļļ ĥöļđš à þļàçéĥöļđéŕ þŕéƒîẋ àƒţéŕ ţĥé ŕéšţöŕé šţöþš ţĥé ḿéŕĝé ŵîţĥ ţĥé ƒîļé àñđ ţĥé ƃļöçķ: à ţŕàñšļàţöŕ çĥàñĝéđ ţĥé þļàçéĥöļđéŕ. Ţĥé ŵöŕķšþàçé ŕöüţé ḿéŕĝéš öñçé îñţö ţĥé çàçĥé ţö ƒîñđ öñé ƃéƒöŕé îţ ŵŕîţéš àñý ƒîļé.

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

kapi exec ñéṽéŕ ŕéàđš ţĥé ṽàüļţ: à ţööļ öṽéŕ à ŕéđàçţéđ þàçķàĝé ŕéàđš àñđ ŵŕîţéš ţöķéñš, àñđ ţĥé öŕîĝîñàļš ŕéàçĥ à ƒîļé öñļý àţ ḿéŕĝé. Ţĥé ŕéƒüšàļ öƒ à ţööļ ţĥàţ šéñđš ƃļöçķš öüţ öṽéŕ à þàçķàĝé îñ à þŕöĵéçţ ŵîţĥ à çöļļéçţîöñ'š öŕ àñ îţéḿ'š þöļîçý đöéš ñöţ àþþļý ţö à þàçķàĝé ŵĥöšé ṽàüļţ îš àḿöñĝ ţĥé þŕöĵéçţ'š ƃàţçĥ ṽàüļţš (host.packageVaultHere): kapi extract --format kpz ŵŕöţé îţ îñ ţĥîš þŕöĵéçţ àñđ ŵîţĥĥéļđ éàçĥ ƒîļé'š ṽàļüéš üñđéŕ ţĥàţ ƒîļé'š þöļîçý. À ṽàüļţ ƃéšîđé à þàçķàĝé þŕöṽéš ñöţĥîñĝ àƃöüţ ŵĥîçĥ ŕüļéš ŵîţĥĥéļđ îţš ṽàļüéš, šö àñý öţĥéŕ ŕéđàçţéđ þàçķàĝé îš ŕéƒüšéđ ļîķé àñý öţĥéŕ þàçķàĝé.

Đéţéçţîöñ​

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

  • Ŕüļéš (đéƒàüļţ, ƒüļļý öƒƒļîñé): ļîţéŕàļ ţéŕḿš àñđ ŕéĝüļàŕ éẋþŕéššîöñš ƒŕöḿ à đéđîçàţéđ ŕüļéš ƒîļé. Đéţéŕḿîñîšţîç, àñđ ţĥé öñļý ƃàçķéñđ ţĥàţ þŕéšéŕṽéš ţĥé ļöçàļîţý ĝüàŕàñţéé ŵîţĥöüţ ǫüàļîƒîçàţîöñ.

  • Éñţîţîéš (öþţ-îñ): redact ŕéàđš ţĥé éñţîţý àññöţàţîöñš àļŕéàđý öñ ţĥé ƃļöçķ, þŕöđüçéđ üþšţŕéàḿ ƃý entity-extract, àñđ ŕéđàçţš ţĥé çöñƒîĝüŕéđ çàţéĝöŕîéš. Ţĥé đéţéçţîöñ ḿöđéļ îš ţĥé çàļļéŕ'š çĥöîçé: à ļöçàļ ḿöđéļ ķééþš éṽéŕýţĥîñĝ öñ ţĥé ḿàçĥîñé, à çļöüđ ḿöđéļ ţŕàđéš ţĥàţ ƒöŕ çöṽéŕàĝé đüŕîñĝ ţĥé đéţéçţîöñ šţéþ öñļý.

    Ţĥé çàţéĝöŕîéš àŕé ţĥé öþţîöñ šüŕƒàçé à üšéŕ þîçķš (ŕéđàçţ þéöþļé, ŕéđàçţ đàţéš) ţĥŕöüĝĥ redact'š éñţîţý-ţýþé ļîšţ, ŵîţĥ àļîàšéš àñđ ţĥé ḿöđéļ'š entity: þŕéƒîẋ ñöŕḿàļîžéđ àñđ ṽàļîđàţéđ. Ñàḿîñĝ àñý çàţéĝöŕý éñàƃļéš éñţîţý đéţéçţîöñ, šö ţĥé üšéŕ đöéš ñöţ àļšö ĥàṽé ţö ļîšţ ţĥé đéţéçţöŕ. Đàţéš, ţîḿéš, çüŕŕéñçîéš àñđ ḿéàšüŕéḿéñţš àŕé éẋçļüđéđ ƒŕöḿ ţĥé đéƒàüļţš, ƃéçàüšé ţĥéý üšüàļļý ñééđ ļöçàļé ƒöŕḿàţţîñĝ ŕàţĥéŕ ţĥàñ ĥîđîñĝ, ƃüţ àŕé àṽàîļàƃļé.

    Çöñđîţîöñàļ ŕéǫüîŕéḿéñţ, ñöţ à ñéŵ šçĥéḿà ļàñĝüàĝé. Ţŵö đîšţîñçţ ŕéǫüîŕéḿéñţš àŕé îñ þļàý àñđ ñéîţĥéŕ ñééđš à çöñđîţîöñ ĐŠĻ. Ţĥé ŕéšöüŕçé ŕéǫüîŕéḿéñţ (ñàḿéđ-éñţîţý ŕéçöĝñîţîöñ îḿþļîéš à çŕéđéñţîàļ) ļîṽéš šţàţîçàļļý öñ entity-extract; redact çàļļš ñö þŕöṽîđéŕ àñđ đéçļàŕéš ñö ŕéǫüîŕéḿéñţ öƒ îţš öŵñ, šö éñàƃļîñĝ à çàţéĝöŕý àđđš ñöñé ţö ŕéđàçţ. Ýöü àđđ ţĥé éẋţŕàçţîöñ ţööļ ţö ţĥé ƒļöŵ, ŵĥîçĥ îš çöḿþöšîţîöñ. Ţĥé îñþüţ ŕéǫüîŕéḿéñţ (ŕéđàçţ ñééđš àñ éñţîţý öṽéŕļàý ŵĥéñ éñţîţý đéţéçţîöñ îš öñ) îš à çöñƒîĝ-đéŕîṽéđ ÎÖ çöñţŕàçţ: à çöñţŕàçţ ŕéšöļṽéŕ ƒļîþš ŕéđàçţ'š entity çöñšüḿéđ þöŕţ ƒŕöḿ öþţîöñàļ ţö ŕéǫüîŕéđ ŵĥéñ îţš çöñƒîĝ éñàƃļéš éñţîţîéš, šö à ƒļöŵ ţĥàţ ŕéđàçţš éñţîţîéš ŵîţĥ ñö üþšţŕéàḿ þŕöđüçéŕ ƒàîļš đàţà-ƒļöŵ ṽàļîđàţîöñ îñšţéàđ öƒ šîļéñţļý ļéàṽîñĝ ţĥé çöñţéñţ üñŕéđàçţéđ àñđ ļéàķîñĝ îţ đöŵñšţŕéàḿ. Ŵîţĥ ŕüļé-ƃàšéđ đéţéçţîöñ öñļý, ŕéđàçţ ŕéàđš ñö üþšţŕéàḿ þöŕţ àñđ ţĥé çöñţŕàçţ îš üñçĥàñĝéđ.

Ŕéđàçţîöñ îš à šţŕüçţüŕéđ éđîţ​

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

Ŕéšţöŕàţîöñ​

unredact àñđ kapi merge ŕéšţöŕé ţĥŕöüĝĥ ţŵö çöḿþļéḿéñţàŕý þàţĥš, ƃéçàüšé ƒöŕḿàţš đéŕ îñ ŵĥéţĥéŕ ţĥéý þŕéšéŕṽé îñļîñé šţŕüçţüŕé öñ ŵŕîţé:

  • Ƃý þļàçéĥöļđéŕ îđ, ƒöŕ šţŕüçţüŕé-þŕéšéŕṽîñĝ çàŕŕîéŕš: îñ-þŕöçéšš þîþéļîñéš, àñđ ẊĻÎƑƑ, ŵĥéŕé ţĥé þļàçéĥöļđéŕ îš à ŕéàļ îñļîñé éļéḿéñţ.
  • Ƃý ṽîšîƃļé ţöķéñ ţéẋţ, ƒöŕ çàŕŕîéŕš ţĥàţ ƒļàţţéñ ţĥé þļàçéĥöļđéŕ ţö îţš šţŕîñĝ öñ ŵŕîţé. Ţĥé ṽîšîƃļé ţöķéñ îš ḿàđé üñîǫüé ŵîţĥîñ à ƃļöçķ šö ţĥé ḿàţçĥ îš üñàḿƃîĝüöüš.

Ţöĝéţĥéŕ ţĥéý çöṽéŕ éṽéŕý šüþþöŕţéđ çàŕŕîéŕ.

Ţĥé þöļîçý àñđ îţš ŕéàđéŕš​

Ţĥé ŕéçîþé đéçļàŕéš ŕéđàçţîöñ üñđéŕ defaults.redaction, öñ à çöļļéçţîöñ (ñàḿéđ öŕ ƃàŕé) àñđ öñ à çöñţéñţ îţéḿ, éàçĥ þöîñţîñĝ àţ à šéþàŕàţé ŕüļéš ƒîļé šö ţĥé šéñšîţîṽé ţéŕḿ ļîšţ šţàýš öüţ öƒ ţĥé çöḿḿîţţéđ ŕéçîþé:

defaults:
redaction:
enabled: true
rules: redaction.yaml # binds any path; keep it out of version control
detectors: [rules] # opt in: entities
placeholder: "[REDACTED:{category}]"
collections:
- name: legal
redaction: # replaces defaults.redaction for these files
enabled: true
rules: legal-redaction.yaml
content:
- path: "legal/*.md"

À ƒîļé'š þöļîçý îš ţĥé ḿöšţ šþéçîƒîç đéçļàŕàţîöñ ţĥàţ çöṽéŕš îţ: ţĥé îţéḿ ţĥàţ çļàîḿš ţĥé ƒîļé (ţĥé çļàîḿ ItemForPath ḿàķéš), éļšé ţĥàţ îţéḿ'š çöļļéçţîöñ, éļšé ţĥé đéƒàüļţš (KapiProject.RedactionForPath, ŵĥîçĥ host.RedactionFor ŵŕàþš). Ţĥé đéçļàŕàţîöñ ŕéþļàçéš ţĥé öţĥéŕš ŵĥöļé. Ŕüļé ƒîļéš, đéţéçţöŕš àñđ þļàçéĥöļđéŕš àŕé ñöţ ḿéŕĝéđ àçŕöšš ļéṽéļš, šö ŵĥàţ à çöļļéçţîöñ đéçļàŕéš îš ţĥé çöḿþļéţé þöļîçý ƒöŕ îţš ƒîļéš, àñđ enabled: false ţàķéš ţĥéḿ öüţ öƒ ŕéđàçţîöñ. Öñé çĥéçķ (RedactionSpec.validateAt) ĥöļđš éṽéŕý ļéṽéļ ţö ţĥé šàḿé šĥàþé: à đéçļàŕàţîöñ ţĥàţ šéţš rules, detectors öŕ placeholder ŵîţĥöüţ enabled: true ƒàîļš ţĥé ŕéçîþé ļöàđ. Çöñţéñţ îñ ñö ƒîļé (àñ ḾÇÞ çàļļ'š ţéẋţ) ƒàļļš üñđéŕ ţĥé đéƒàüļţš.

À þöļîçý ŵîţĥ öñé ŕéàđéŕ îš à þöļîçý ţĥàţ ƒàîļš öþéñ éṽéŕýŵĥéŕé éļšé, šö ţĥé þöļîçý îš ŕéàđ àţ éṽéŕý þöîñţ çöñţéñţ çàñ ļéàṽé, àñđ éàçĥ ŕéàđéŕ àšķš ƒöŕ ţĥé þöļîçý öƒ ţĥé ƒîļé îţ ĥöļđš:

  1. kapi extract ŕéšöļṽéš îţ þéŕ šöüŕçé, ƃéƒöŕé îţ ŕéàđš àñý, àñđ àþþļîéš îţ, éḿîţţîñĝ à ŕéđàçţéđ ƃîļîñĝüàļ ƒîļé àñđ ŵŕîţîñĝ ţĥé ƃàţçĥ šîđéçàŕ. Ţĥé --redact àñđ --redact-rules ƒļàĝš ļàýéŕ öṽéŕ ţĥé þöļîçý éàçĥ šöüŕçé ŕéšöļṽéš. Ŕéđàçţîöñ ŕüñš ƃéƒöŕé ḿéḿöŕý þŕé-ƒîļļ, šö ţĥé çöñţéñţ ḿéḿöŕý îš ǫüéŕîéđ ŵîţĥ ŕéđàçţéđ ţéẋţ àñđ þŕé-ƒîļļš ţàŕĝéţš ƒŕöḿ îţ, àñđ ñö šéñšîţîṽé ṽàļüé ŕéàçĥéš ţĥé éḿîţţéđ ƒîļé ƃý ŵàý öƒ à ḿéḿöŕý ḿàţçĥ. Öñ kapi merge ţĥé îñçöḿîñĝ šöüŕçé îš àļŵàýš ŕéšţöŕéđ, šö þéŕ-ƃļöçķ šţàļéñéšš çöḿþàŕéš öŕîĝîñàļ àĝàîñšţ öŕîĝîñàļ; ţĥé ţàŕĝéţ îš ŕéšţöŕéđ üñļéšš --no-restore îš šéţ.

  2. Îñĝéšţ, ŵĥîçĥ îš ţĥé þüšĥ ţö à ṽéñüé (host/venue/source). host.RedactionFor ŕéšöļṽéš éàçĥ ƒîļé'š þöļîçý àñđ host.RedactAtIngest àþþļîéš îţ àš ţĥé ƒîļé îš ŕéàđ îñ, ṽàüļţîñĝ îñţö ţĥé þŕöĵéçţ ṽàüļţ. Îñĝéšţ îš çöñţîñüöüš ŕàţĥéŕ ţĥàñ ƃàţçĥéđ, ŵĥîçĥ îš ŵĥý îţš ṽàüļţ îš þŕöĵéçţ-šçöþéđ: à ļàţéŕ ŕéšţöŕé ĥàš ñö ƃàţçĥ îđ ţö ļööķ üñđéŕ.

  3. Ţĥé ƒļöŵ þļàçéḿéñţ ĝàţé. À þŕöĵéçţ ţĥàţ đéçļàŕéš ŕéđàçţîöñ ŕéĵéçţš àñý ƒļöŵ ţĥàţ šéñđš šöüŕçé ţö à ŕéḿöţé đéšţîñàţîöñ ŵîţĥöüţ à redact šţéþ (FlowDefinition.CheckRedactionCoverage, éñƒöŕçéđ îñ ƒļöŵ þļàçéḿéñţ). Ţĥîš îš à ĝàţé ŕàţĥéŕ ţĥàñ àñ îḿþļîçîţ ŕéŵŕîţé: šîļéñţļý îñšéŕţîñĝ à šţéþ îñţö à üšéŕ'š ƒļöŵ ŵöüļđ çĥàñĝé ŵĥàţ ţĥéîŕ ƒļöŵ ḿéàñš, ŵĥîļé ŕéƒüšîñĝ ţö ŕüñ îţ šàýš šö. À þŕöĵéçţ ƒļöŵ'š ţööļš àŕé ƃüîļţ öñçé ƒöŕ éṽéŕý ƒîļé öƒ à þàšš, šö ţĥé ĝàţé ĥöļđš îţ ŵĥéñ àñý đéçļàŕàţîöñ ţüŕñš ŕéđàçţîöñ öñ (KapiProject.DeclaresRedaction); à ƃüîļţ-îñ ƒļöŵ ƃüîļţ ƒöŕ öñé îñþüţ ƒîļé îš ĥéļđ ŵĥéñ à þöļîçý çöṽéŕš ţĥàţ ƒîļé. À þŕöĵéçţ ƒļöŵ'š îñþüţ šéţ šþļîţš ƃý ţĥé þöļîçý ţĥàţ ĝöṽéŕñš éàçĥ ƒîļé (groupInputsByBinding), àñđ à redact šţéþ ţĥàţ ñàḿéš ñö rulesPath öŕ rules öƒ îţš öŵñ ŕéđàçţš éàçĥ þàŕţ üñđéŕ ţĥàţ þàŕţ'š þöļîçý (App.applyFlowRedaction); à šţéþ ţĥàţ ñàḿéš îţš öŵñ ŕüļéš ķééþš ţĥéḿ. kapi run, kapi up àñđ îţš þļàñ ŕéàçĥ ţĥé šţéþ ţĥŕöüĝĥ ţĥé šàḿé àššéḿƃļý, àñđ ţĥé ḾÇÞ run_flow ţööļ àñđ ţĥé đéšķţöþ'š ƒļöŵ þŕéṽîéŵ ƃüîļđ ţĥéîŕ çĥàîñš üñđéŕ ţĥé þöļîçý öƒ ţĥé öñé ƒîļé ţĥéý ŕüñ öṽéŕ. Ţĥé šţéþ đéţéçţš ŵîţĥ îţš öŵñ đéţéçţöŕš àñđ ţĥé þöļîçý'š ţöĝéţĥéŕ, àñđ à šţéþ ţĥàţ đéţéçţš éñţîţîéš ŵîţĥ ñö éñţîţý-éẋţŕàçţ šţéþ àĥéàđ öƒ îţ îš ŕéƒüšéđ. À šţéþ ţĥàţ šéñđš šöüŕçé öüţ àƒţéŕ unredact, ŵîţĥ ñö ŕéđàçţ šţéþ ƃéţŵééñ ţĥéḿ, ƒàîļš þļàçéḿéñţ (egress-after-restore).

  4. À šîñĝļé-ţööļ ŕüñ. kapi exec <tool>, àñđ ţĥé ḾÇÞ ţööļš ţĥàţ ŕüñ öñé ŕéĝîšţŕý ţööļ öṽéŕ à çàļļéŕ'š ţéẋţ, çöḿþöšé ñö ƒļöŵ öƒ ţĥé üšéŕ'š, šö ţĥé ŕüñ îţšéļƒ þļàçéš ţĥé šţéþš (host/toolrun_redact.go). Ŵĥéñ ţĥé ţööļ'š çöñţŕàçţ, ŕéƒîñéđ ƒöŕ îţš çöñƒîĝ, çàŕŕîéš àñ ÀÞÎ çàļļ, redact ŕüñš àĥéàđ öƒ îţ ŵîţĥ ţĥé ŕüļéš öƒ ţĥé þöļîçý ţĥàţ çöṽéŕš ţĥé ƒîļé, šéţţļéđ þéŕ ƒîļé ƃéƒöŕé àñý ƒîļé îš ŕéàđ, àñđ unredact àƒţéŕ îţ. À .kpz þàçķàĝé îš öñé çĥàîñ öṽéŕ éṽéŕý ƒîļé îţ ĥöļđš, šö üñđéŕ à çöļļéçţîöñ'š öŕ àñ îţéḿ'š þöļîçý šüçĥ à ŕüñ îš ŕéƒüšéđ. Ţĥé öŕîĝîñàļš ŕîđé öñ ţĥé ƃļöçķ îñ ƃéţŵééñ àš ţĥéý đö îñ secure-translate. Ţĥé ţööļš à ŕüñ ŕéàçĥéš ŕéàđ ţĥé ŵĥöļé ƃļöçķ, šö ţĥé šţéþ îš çöñƒîĝüŕéđ ƒöŕ îţ (WholeBlock): îţ ŕéđàçţš ƃļöçķš ḿàŕķéđ ñöţ ţŕàñšļàţàƃļé, àñđ éàçĥ ţàŕĝéţ ļöçàļé'š ŕüñš üñđéŕ ţöķéñš öƒ ţĥéîŕ öŵñ. Đéţéçţîöñ ŕéàđš à ŕüñ šéǫüéñçé'š öŵñ ţéẋţ ŕüñš, ţĥé çööŕđîñàţéš ţĥé çàŕṽé üšéš, àñđ éṽéŕý þļüŕàļ ƒöŕḿ àñđ šéļéçţ çàšé îš ŕéđàçţéđ ţĥé šàḿé ŵàý üñđéŕ à þŕéƒîẋ öƒ îţš öŵñ. Üñŕéđàçţ þüţš ƃàçķ àñ éđîţîöñ ŵĥöšé ŕéšţöŕéđ çöñţéñţ éǫüàļš ŵĥàţ ŕéđàçţ ŕéàđ éẋàçţļý àš îţ ŵàš ŕéàđ, àñđ ŕé-šţàḿþš à ţŕàñšļàţîöñ'š šţàţüš àñđ öŕîĝîñ, šö ţĥé ţŵö šţéþš àŕöüñđ à ţööļ ţĥàţ ļéƒţ à ţŕàñšļàţîöñ àļöñé çĥàñĝé ñöţĥîñĝ àƃöüţ îţ. À çöļļéçţöŕ ţĥàţ šéñđš ŵĥàţ îţ ĝàţĥéŕéđ ţö à ḿöđéļ (ṽöîçé-îñƒéŕ'š đŕàƒţ) ŕéàđš ţĥé ƃļöçķš ƃéţŵééñ ţĥé ţŵö šţéþš. À þöļîçý ţĥàţ đéţéçţš éñţîţîéš îš ŕéƒüšéđ, ƃéçàüšé éñţîţý đéţéçţîöñ ŕéàđš àññöţàţîöñš àñ éẋţŕàçţîöñ šţéþ ļéàṽéš àñđ à ŕüñ öƒ öñé ţööļ ĥàš ñöñé. À ţööļ ŵîţĥ ñö đéçļàŕéđ çöñţŕàçţ (ñö ŕéĝîšţŕý éñţŕý, öŕ à šçĥéḿà ŵîţĥ ñö toolMeta) îš ŕéƒüšéđ ƃéƒöŕé îţ ŕéàđš à ƃļöçķ, ƃéçàüšé ñöţĥîñĝ šàýš ŵĥéţĥéŕ îţ çàļļš à þŕöṽîđéŕ: öṽéŕ à ƒîļé à þöļîçý çöṽéŕš, àñđ öṽéŕ à .kpz þàçķàĝé îñ à þŕöĵéçţ ţĥàţ đéçļàŕéš àñý þöļîçý. À ţööļ ţĥàţ çàļļš ñö þŕöṽîđéŕ ŕüñš àļöñé. Ţĥé çĥàîñ éàçĥ ŕüñ ƃüîļđš îš ĥéļđ ţö CheckRedactionCoverage àñđ CheckPlacement, šö à ŕüñ ŵîţĥöüţ ţĥé ŕéđàçţ šţéþ ƒàîļš ţĥé ĝàţé à ƒļöŵ ƒàîļš.

    external-command ĥàñđš éàçĥ ƃļöçķ ţö à þŕöĝŕàḿ ķàþî ŕüñš, ŵĥîçĥ ḿàý šéñđ îţ àñýŵĥéŕé, šö îţš çöñţŕàçţ đéçļàŕéš ţĥé process-exec šîđé 郃éçţ àñđ ţĥé þöļîçý çöṽéŕš îţ àš îţ çöṽéŕš à þŕöṽîđéŕ çàļļ: à ŕüñ þļàçéš redact àñđ unredact àŕöüñđ îţ, à ŕüñ öṽéŕ à .kpz þàçķàĝé îš ŕéƒüšéđ üñđéŕ à çöļļéçţîöñ'š öŕ àñ îţéḿ'š þöļîçý, àñđ à ƒļöŵ ţĥàţ ŕüñš îţ ñééđš à redact šţéþ àĥéàđ öƒ îţ. Ţĥé þŕöĝŕàḿ ŕéàđš éàçĥ þļàçéĥöļđéŕ àš îţš ṽîšîƃļé ţöķéñ (redaction.VisibleText). Ţĥé ţööļ çöḿþàŕéš ţĥé ţöķéñš öƒ îţš îñþüţ ŵîţĥ ţĥöšé öƒ ţĥé þŕöĝŕàḿ'š öüţþüţ (redaction.CompareTokens); à ţöķéñ ţĥé öüţþüţ đŕöþš, àļţéŕš, ŕéþéàţš öŕ àđđš ļéàṽéš ţĥé ƃļöçķ àš îţ ŵàš àñđ ŕéçöŕđš à ƒàîļîñĝ external-command.redaction-placeholder ƒîñđîñĝ, ŵĥîçĥ kapi exec ŕéþöŕţš ŵîţĥ éẋîţ çöđé 3 àñđ à ƒļöŵ ŕüñ ŕéþöŕţš ƃéšîđé îţš öţĥéŕ ƒîñđîñĝš. kapi up çöļļéçţš ţĥé šàḿé ƒîñđîñĝ öṽéŕ îţš þàššéš, þŕîñţš îţ üñđéŕ ţĥé ŕüñ'š šüḿḿàŕý îñ þļàçé öƒ ţĥé üþ-ţö-đàţé ļîñé, àñđ éẋîţš 3.

  5. Ţĥé đééþéŕ ļööķ. Îţ šéñđš çĥüñķš öƒ ţĥé þŕöĵéçţ'š ƃļöçķ ţéẋţš ţö à ḿöđéļ (host/contextdeeper.go). À çĥüñķ ĥöļđš ƃļöçķš öƒ ƒîļéš üñđéŕ öñé þöļîçý öñļý, àñđ éàçĥ çĥüñķ îš ŕéđàçţéđ üñđéŕ ţĥàţ þöļîçý ƃéƒöŕé ţĥé ḿöđéļ ŕéàđš îţ. Éàçĥ çĥüñķ ţĥéñ çàŕŕîéš ţĥàţ þöļîçý àñđ ţĥé ṽàļüéš ŕéàđ ƃàçķ ƒŕöḿ ţĥé ṽàüļţ, šö ţĥé ŕéšţ öƒ îţš ŕéǫüéšţš îš ŕéđàçţéđ àš ƃéļöŵ.

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

Éṽéŕýţĥîñĝ à ŕéǫüéšţ çàŕŕîéš​

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

ŠţŕîñĝŠöüŕçéÞŕöḿþţš
Ţĥé ƃļöçķ, îţš ţŕàñšļàţîöñš, îţš þļüŕàļ ƒöŕḿšţĥé ƃļöçķéṽéŕý þŕöḿþţ
Ţĥé ñéîĝĥƃöüŕîñĝ ƃļöçķšţĥé đöçüḿéñţţŕàñšļàţé
Ţĥé ƃļöçķ'š ķéýţĥé ƃļöçķ'š ñàḿéţŕàñšļàţé
Ţĥé þŕéṽîöüš šöüŕçé àñđ àþþŕöṽéđ ţŕàñšļàţîöñţĥé çöñţéñţ ḿéḿöŕý (prompt.Context.Prior)ţŕàñšļàţé
Éàçĥ ţéŕḿ àñđ îţš ŕéþļàçéḿéñţ, ţĥé đö-ñöţ-ţŕàñšļàţé ţéŕḿšţĥé ţéŕḿ ŕüļéš (profile.TermRuleMap)ţŕàñšļàţé, ŕéṽîéŵ
Ĝüîđàñçé, šţýļé, þàţţéŕñš, éẋàḿþļéšţĥé ṽöîçé þŕöƒîļé (profile.RenderVoiceGuide)ţŕàñšļàţé, ŕéṽîéŵ, ṽöîçé-çĥéçķ
Ţĥé îñšţŕüçţîöñ--instruction, ţĥé ŕéçîþé, à ƒîẋ þàšš'š ƒîñđîñĝšţŕàñšļàţé, šéĝḿéñţ
Ţĥé đöḿàîñà ţööļ þŕéšéţţéŕḿ-éẋţŕàçţ, ṽöîçé-îñƒéŕ
Ţĥé ķñöŵñ ţéŕḿšţĥé ţéŕḿš šţöŕééñţîţý-éẋţŕàçţ
Ţĥé ñéîĝĥƃöüŕîñĝ ļîñéšţĥé đöçüḿéñţḿéđîà-ŕéƒîñé

Ţĥé ŕéđàçţ šţéþ ļéàṽéš îţš þöļîçý (redaction.Policy: ţĥé ŕüļé đéţéçţöŕ àñđ ţĥé þļàçéĥöļđéŕ öþţîöñš) öñ éṽéŕý ƃļöçķ îţ ŕéàđš îñ-þŕöçéšš, îñ ţĥé ƃļöçķ'š šéçŕéţ àññöţàţîöñ, ŵĥéţĥéŕ öŕ ñöţ ţĥé ƃļöçķ ĥöļđš à ṽàļüé ţö ŵîţĥĥöļđ. À ţööļ'š ṽîéŵ öƒ à ƃļöçķ þüţš à redaction.Egress öṽéŕ ţĥàţ éñţŕý öñ ţĥé ṽîéŵ'š çöñţéẋţ (tool.ContextBinder). À ţööļ ţĥàţ šéñđš šéṽéŕàļ ƃļöçķš îñ öñé ŕéǫüéšţ ƃîñđš ţĥéḿ ţöĝéţĥéŕ: ţĥé ţŕàñšļàţé ƃàţçĥ (redaction.BindBlocks), àñđ ţĥé ṽöîçé-îñƒéŕ çöŕþüš àñđ ţĥé ḿéđîà-ŕéƒîñé ñéîĝĥƃöüŕš (redaction.BindCorpus). Éàçĥ éẋþöŕţéđ ÀÎ ţööļ çöñšţŕüçţöŕ àñđ þŕöḿþţ ƒüñçţîöñ îñ core/ai/tools ŵŕàþš ţĥé þŕöṽîđéŕ îţ îš ĝîṽéñ îñ aiprovider.Redacting, ŵĥöéṽéŕ ƃüîļţ ţĥé þŕöṽîđéŕ; ţĥé ŵŕàþþéŕ ŕéþöŕţš ţĥé þŕöṽîđéŕ'š ļîḿîţš àñđ đöéš ñöţĥîñĝ ƒöŕ à çöñţéẋţ ŵîţĥ ñö Éĝŕéšš. Îţ ŕéàđš ţĥé Éĝŕéšš ƒŕöḿ ţĥé çàļļ'š çöñţéẋţ àñđ ŕéđàçţš éàçĥ ţéẋţ þàŕţ àñđ šéçţîöñ öƒ à çĥàţ, àñđ éṽéŕý ƒîéļđ öƒ à ţŕàñšļàţé ŕéǫüéšţ, ƃéƒöŕé ţĥé þŕöṽîđéŕ šéñđš îţ. Ţĥé ŕéçöŕđéŕ šîţš îñšîđé ţĥé ŵŕàþþéŕ, šö --explain-prompts šĥöŵš ţĥé ŕéǫüéšţ àš îţ ŵàš šéñţ.

Ţĥé Éĝŕéšš ḿàţçĥéš ţĥé þöļîçý'š ŕüļéš, àñđ éṽéŕý öŕîĝîñàļ ţĥé ŕéǫüéšţ'š ƃļöçķš àļŕéàđý ŵîţĥĥöļđ, ţĥé ļàţţéŕ ƃý ļîţéŕàļ ţéẋţ, šö à ṽàļüé àñ éñţîţý šţéþ ƒöüñđ îš ŕéđàçţéđ ƃéšîđé ţĥé ƃļöçķ ţöö. À ĴŠÖÑ þàýļöàđ îñ à þŕöḿþţ (ţĥé ţŕàñšļàţé ƃàţçĥ) ĥöļđš éàçĥ šţŕîñĝ éšçàþéđ, šö ţĥé Éĝŕéšš àļšö ŕéàđš ţĥé üñéšçàþéđ ţéẋţ àñđ ŕéþļàçéš éàçĥ ḿàţçĥ àţ îţš éšçàþéđ šþàñ, ŵîţĥ ţĥé ţöķéñ éšçàþéđ ţĥé šàḿé ŵàý. Éñţîţý đéţéçţîöñ îţšéļƒ ŕéàđš ţĥé ƃļöçķš öñļý: à ṽàļüé ñàḿéđ öñļý ƃéšîđé ţĥé ƃļöçķ îš ŕéđàçţéđ ŵĥéñ à ŕüļé ñàḿéš îţ öŕ à ƃļöçķ öƒ ţĥé ŕéǫüéšţ ŵîţĥĥöļđš ţĥé šàḿé ţéẋţ. Ţöķéñš àŕé šĥàŕéđ ŵîţĥîñ à ŕéǫüéšţ:

  • À ṽàļüé à ƃļöçķ ŵîţĥĥöļđš îš đŕàŵñ àš ţĥé ţöķéñ ţĥé ŕéǫüéšţ àļŕéàđý šĥöŵš ƒöŕ îţ: îţš þļàçéĥöļđéŕ ţàĝ ŵĥéñ ţĥé þŕöḿþţ çàŕŕîéš ţĥé ƃļöçķ'š ŕüñš àš ţàĝš (ţŕàñšļàţé), îţš ṽîšîƃļé ţöķéñ ([REDACTED:Person]) öţĥéŕŵîšé. Îñ à ƃàţçĥ, ţĥé ṽàļüé îš àļšö ķéþţ îñ éàçĥ öţĥéŕ ƃļöçķ'š éñţŕý, šö îţ ŕéšţöŕéš îñ ŵĥîçĥéṽéŕ ƃļöçķ'š àñšŵéŕ ţĥé ḿöđéļ çöþîéš îţ îñţö.
  • À ṽàļüé ḿéţ öñļý ƃéšîđé ţĥé ƃļöçķ ţàķéš ţĥé ñéẋţ ţöķéñ îñ ţĥé ƃļöçķ'š šéǫüéñçé, üñđéŕ à ṽîšîƃļé ţöķéñ ţĥàţ ñö öţĥéŕ ṽàļüé öƒ ţĥé ŕéǫüéšţ üšéš àñđ ţĥàţ ţĥé ŕéǫüéšţ'š ţéẋţ đöéš ñöţ àļŕéàđý ĥöļđ, àñđ îš ķéþţ îñ ţĥé ƃļöçķ'š éñţŕý. unredact ŕéšţöŕéš îţ ƒŕöḿ ţĥéŕé ƃý îţš ṽîšîƃļé ţöķéñ, šö à ţöķéñ ţĥàţ ḿàţçĥéđ ţéẋţ ţĥé þéŕšöñ ŵŕöţé ŵöüļđ ŕéþļàçé ţĥàţ ţéẋţ.
  • À šþàñ îñšîđé à ţöķéñ ţĥé ŕéǫüéšţ àļŕéàđý šĥöŵš îš ļéƒţ àļöñé.

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

À þŕöḿþţ ţĥàţ çàŕŕîéš ţéẋţ àļöñé (ŕéṽîéŵ, ǫüàļîţý çĥéçķ, ţéŕḿ-éẋţŕàçţ, ṽöîçé-çĥéçķ, ṽöîçé-îñƒéŕ, éñţîţý-éẋţŕàçţ, ţĥé ḿéđîà-ŕéƒîñé ñéîĝĥƃöüŕš, ţĥé đééþéŕ ļööķ) đŕàŵš éàçĥ þļàçéĥöļđéŕ àš îţš ṽîšîƃļé ţöķéñ (redaction.VisibleText), šö ţĥé ḿöđéļ ŕéàđš à ţöķéñ ŵĥéŕé ţĥé ṽàļüé ŵàš. éñţîţý-éẋţŕàçţ ŕéþöŕţš šþàñš îñ ţĥé ţéẋţ îţ šéñţ, àñđ redaction.VisibleSource ḿàþš éàçĥ ƃàçķ ţö ţĥé ŕüñš; à šþàñ öñ à ţöķéñ ñàḿéš à ŵîţĥĥéļđ ṽàļüé àñđ îš đŕöþþéđ. Ţĥé ĻĻḾ šéĝḿéñţéŕ ŕéàđš ţĥé ƃļöçķ àš éṽéŕý šéĝḿéñţàţîöñ éñĝîñé đöéš, ŵîţĥ éàçĥ îñļîñé çöđé ḿàšķéđ, ƃéçàüšé îţš çĥüñķš ḿüšţ àļîĝñ ŵîţĥ ţĥé ŕüñš.

Ţĥé éñţŕý ĝŕöŵš îñ ḿéḿöŕý öñļý, ƃý àţ ḿöšţ öñé ṽàļüé þéŕ đîšţîñçţ öŕîĝîñàļ ţĥé ŕéšţ öƒ ţĥé ŕéǫüéšţ çàŕŕîéš àñđ ţĥé ƃļöçķ đöéš ñöţ ĥöļđ, àñđ unredact đîšçàŕđš îţ ŵîţĥ ţĥé éñţŕý. Öñ samples/northsea, à þöļîçý öṽéŕ ţĥé þŕöđüçţ àñđ çöḿþàñý ñàḿéš àđđš 250 ṽàļüéš ţö ţĥé 23 ţĥé ŕéđàçţ šţéþ ŕéçöŕđéđ, àçŕöšš 136 ƃļöçķš, àţ ḿöšţ 2 îñ öñé ƃļöçķ: ţĥé ṽöîçé þŕöƒîļé ñàḿéš ƃöţĥ, àñđ éṽéŕý ŕéǫüéšţ çàŕŕîéš îţ. Ţĥé đééþéŕ ļööķ ŕéàđš ţĥé þŕöĵéçţ ṽàüļţ àñđ ŵŕîţéš ñöţĥîñĝ ƃàçķ ţö îţ.

Ţŵö çöḿḿàñđš àšķ à ḿöđéļ öüţšîđé à ŕüñ öƒ à ŕéĝîšţŕý ţööļ. kapi voice check --ai ŕüñš îţš ţööļ ƃéţŵééñ ŕéđàçţ àñđ üñŕéđàçţ (host.VoiceCheckTools) üñđéŕ ţĥé þöļîçý öƒ ţĥé ƒîļé îţ ŕéàđš, öŕ defaults.redaction ƒöŕ ţéẋţ ĝîṽéñ îñļîñé. kapi terms expand ĥöļđš ñö ƃļöçķ, šö îţ ŕéđàçţš éàçĥ ŕéǫüéšţ üñđéŕ ţĥé ŕüļéš öƒ defaults.redaction (host.TermsExpandRedaction); à þŕöĵéçţ ŵĥöšé öñļý þöļîçîéš šîţ öñ çöļļéçţîöñš öŕ îţéḿš ĝîṽéš îţ ñöñé ţö àþþļý. À ŵîţĥĥéļđ ţéŕḿ ĝöéš öüţ àš îţš ţöķéñ, àñđ ţĥé ƒöŕḿš ţĥé ḿöđéļ ŕéţüŕñš ƒöŕ à ţöķéñ ñàḿé ñö ţéŕḿ ţĥàţ ŵàš àšķéđ àƃöüţ, šö ñöñé îš ŵŕîţţéñ. Ţĥé ÀÎ àçţîöñš öñ Ķàþî Đéšķţöþ'š ŕéṽîéŵ (Ƒîẋ ŵîţĥ ÀÎ, Ŕéţŕàñšļàţé, Éẋþļàîñ, ţĥé ÀÎ þŕé-ŕéṽîéŵ) ŕüñ ţĥéîŕ ţööļ ţĥŕöüĝĥ host.RedactionChain, üñđéŕ ţĥé þöļîçý öƒ ţĥé üñîţ'š ƒîļé.

À ḿàçĥîñé-ţŕàñšļàţîöñ éñĝîñé ŕéàđš à ŕéđàçţéđ ƃļöçķ ţĥŕöüĝĥ šéḿàñţîç ĤŢḾĻ: éàçĥ ŵîţĥĥéļđ ṽàļüé îš à þļàçéĥöļđéŕ éļéḿéñţ (<span data-type="redaction:person"/>) ţĥàţ ḿàþš ƃàçķ ţö îţš þļàçéĥöļđéŕ ƃý þöšîţîöñ, àñđ üñŕéđàçţ ŕéšţöŕéš îţ ƃý îđ, àš ţĥé ţŕàñšļàţé ţööļ'š þļàçéĥöļđéŕ ţàĝ đöéš. Ţĥé éñĝîñé ñéṽéŕ ŕéàđš ţĥé ṽîšîƃļé ţöķéñ àš ţéẋţ: àñ éñĝîñé ţŕàñšļàţéš ţéẋţ, šö [REDACTED:Person] çöüļđ çöḿé ƃàçķ ŕéŵöŕđéđ àñđ ḿàţçĥ ñöţĥîñĝ, ŵĥéŕé îţ ķééþš ḿàŕķüþ îñ þļàçé.

Ñöţ çöṽéŕéđ:

ÞàţĥŴĥàţ ŕéàçĥéš ţĥé þŕöṽîđéŕ
Ḿéđîà þàýļöàđš (ḿéđîà-ŕéƒîñé'š îḿàĝé çŕöþ, šþééçĥ çļîþ, ṽîđéö ƒŕàḿé)Ţĥé ḿéđîà àš ŕéçöĝñîšéđ; ţĥé ŕüļéš ḿàţçĥ ţéẋţ, àñđ à çŕöþ öŕ çļîþ ĥöļđš ñöñé
Ḿàçĥîñé-ţŕàñšļàţîöñ þļüĝîñ éñĝîñéš (translate ŵîţĥ àñ ḾŢ þŕöṽîđéŕ)Ţĥé ŕéđàçţéđ ƃļöçķ, éàçĥ ŵîţĥĥéļđ ṽàļüé à þļàçéĥöļđéŕ éļéḿéñţ; ñö ţéŕḿ ŕüļéš, ṽöîçé þŕöƒîļé öŕ öţĥéŕ þŕöĵéçţ ţéẋţ. Ţĥé ŕéǫüéšţ ĝöéš ţĥŕöüĝĥ ţĥé þļüĝîñ'š þŕöṽîđéŕ, ñöţ aiprovider.Redacting, šö àñýţĥîñĝ ţĥé þļüĝîñ šéñđš ƃéýöñđ îţ îš öüţšîđé ţĥé þöļîçý

ÇĻÎ šüŕƒàçé​

  • kapi run secure-translate -i <file> --target-lang <l>: ţĥé îñ-þŕöçéšš ƒļöŵ reader → redact → translate → unredact → writer.
  • kapi run redact-pii -i <file>: ţĥé ƃüîļţ-îñ éñţîţý ƒļöŵ, entity-extract ţĥéñ redact çöñƒîĝüŕéđ ƒöŕ ţĥé çöḿḿöñ çàţéĝöŕîéš. Ţĥé þļàçéḿéñţ þàšš ķééþš redact àĥéàđ öƒ àñý ŕéḿöţé-éĝŕéšš šţéþ.
  • kapi extract --redact (öŕ --redact-rules <path>): éḿîţš à ŕéđàçţéđ ƃîļîñĝüàļ ƒîļé àñđ ŵŕîţéš ţĥé ƃàţçĥ šîđéçàŕ.
  • kapi merge: ŕéšţöŕéš öŕîĝîñàļš ƒŕöḿ ţĥé ƃàţçĥ šîđéçàŕ àƒţéŕ àþþļýîñĝ ţĥé ŕéţüŕñéđ ţàŕĝéţ.

Ñöţ ýéţ ƃüîļţ: çļéàŕàñçé àš à đéšţîñàţîöñ ļàđđéŕ​

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

Ŕàţîöñàļé​

Ŵĥý à þļàçéĥöļđéŕ ŕüñ, ñöţ ţéẋţ šüƃšţîţüţîöñ? Îñļîñé çöđéš àŕé àļŕéàđý þŕöţéçţéđ ƒŕöḿ ţŕàñšļàţîöñ, šüŕṽîṽé ţĥé šţŕéàḿîñĝ þîþéļîñé, àñđ ŕöüñđ-ţŕîþ ţĥŕöüĝĥ ƃîļîñĝüàļ ƒöŕḿàţš. Ŕéüšîñĝ ţĥéḿ ḿéàñš à ḿöđéļ àñđ àñ éẋţéŕñàļ ţööļ ţŕéàţ à ŕéđàçţîöñ éẋàçţļý àš ţĥéý ţŕéàţ àñý öţĥéŕ đö-ñöţ-ţöüçĥ ţöķéñ.

Ŵĥý îš ţĥé öŕîĝîñàļ ñéṽéŕ öñ ţĥé ŕüñ? Šö ţĥé ĝüàŕàñţéé îš àüđîţàƃļé: àñý šéŕîàļîžéđ àŕţîƒàçţ çàñ ƃé šçàññéđ ƒöŕ ţĥé šéçŕéţ àñđ ḿüšţ ñöţ çöñţàîñ îţ. Ţĥé ŕüñ çàŕŕîéš öñļý à çàţéĝöŕý àñđ à ţöķéñ.

Ŵĥý đüàļ ŕéšţöŕàţîöñ? Îđ-ƃàšéđ ŕéšţöŕé îš éẋàçţ ƃüţ ñééđš ţĥé îñļîñé šţŕüçţüŕé ţö šüŕṽîṽé. Þļàîñ-ţéẋţ çàŕŕîéŕš đŕöþ îţ, šö à ṽàüļţ-ƃàçķéđ ţéẋţ ḿàţçĥ öñ à þéŕ-ƃļöçķ-üñîǫüé ţöķéñ îš ţĥé ƒàļļƃàçķ.

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

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

Šéé àļšö​