Ç-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 ƒàîļš ţĥé ŕéçîþé ļöàđ. Çöñţéñţ îñ ñö ƒîļé (àñ ḾÇÞ çàļļ'š ţéẋţ) ƒàļļš üñđéŕ ţĥé đéƒàüļţš.
À þöļîçý ŵîţĥ öñé ŕéàđéŕ îš à þöļîçý ţĥàţ ƒàîļš öþéñ éṽéŕýŵĥéŕé éļšé, šö ţĥé þöļîçý îš ŕéàđ àţ éṽéŕý þöîñţ çöñţéñţ çàñ ļéàṽé, àñđ éàçĥ ŕéàđéŕ àšķš ƒöŕ ţĥé þöļîçý öƒ ţĥé ƒîļé îţ ĥöļđš:
-
kapi extractŕéšöļṽéš îţ þéŕ šöüŕçé, ƃéƒöŕé îţ ŕéàđš àñý, àñđ àþþļîéš îţ, éḿîţţîñĝ à ŕéđàçţéđ ƃîļîñĝüàļ ƒîļé àñđ ŵŕîţîñĝ ţĥé ƃàţçĥ šîđéçàŕ. Ţĥé--redactàñđ--redact-rulesƒļàĝš ļàýéŕ öṽéŕ ţĥé þöļîçý éàçĥ šöüŕçé ŕéšöļṽéš. Ŕéđàçţîöñ ŕüñš ƃéƒöŕé ḿéḿöŕý þŕé-ƒîļļ, šö ţĥé çöñţéñţ ḿéḿöŕý îš ǫüéŕîéđ ŵîţĥ ŕéđàçţéđ ţéẋţ àñđ þŕé-ƒîļļš ţàŕĝéţš ƒŕöḿ îţ, àñđ ñö šéñšîţîṽé ṽàļüé ŕéàçĥéš ţĥé éḿîţţéđ ƒîļé ƃý ŵàý öƒ à ḿéḿöŕý ḿàţçĥ. Öñkapi mergeţĥé îñçöḿîñĝ šöüŕçé îš àļŵàýš ŕéšţöŕéđ, šö þéŕ-ƃļöçķ šţàļéñéšš çöḿþàŕéš öŕîĝîñàļ àĝàîñšţ öŕîĝîñàļ; ţĥé ţàŕĝéţ îš ŕéšţöŕéđ üñļéšš--no-restoreîš šéţ. -
Îñĝéšţ, ŵĥîçĥ îš ţĥé þüšĥ ţö à ṽéñüé (
host/venue/source).host.RedactionForŕéšöļṽéš éàçĥ ƒîļé'š þöļîçý àñđhost.RedactAtIngestàþþļîéš îţ àš ţĥé ƒîļé îš ŕéàđ îñ, ṽàüļţîñĝ îñţö ţĥé þŕöĵéçţ ṽàüļţ. Îñĝéšţ îš çöñţîñüöüš ŕàţĥéŕ ţĥàñ ƃàţçĥéđ, ŵĥîçĥ îš ŵĥý îţš ṽàüļţ îš þŕöĵéçţ-šçöþéđ: à ļàţéŕ ŕéšţöŕé ĥàš ñö ƃàţçĥ îđ ţö ļööķ üñđéŕ. -
Ţĥé ƒļöŵ þļàçéḿéñţ ĝàţé. À þŕöĵéçţ ţĥàţ đéçļàŕéš ŕéđàçţîöñ ŕéĵéçţš àñý ƒļöŵ ţĥàţ šéñđš šöüŕçé ţö à ŕéḿöţé đéšţîñàţîöñ ŵîţĥöüţ à
redactšţéþ (FlowDefinition.CheckRedactionCoverage, éñƒöŕçéđ îñ ƒļöŵ þļàçéḿéñţ). Ţĥîš îš à ĝàţé ŕàţĥéŕ ţĥàñ àñ îḿþļîçîţ ŕéŵŕîţé: šîļéñţļý îñšéŕţîñĝ à šţéþ îñţö à üšéŕ'š ƒļöŵ ŵöüļđ çĥàñĝé ŵĥàţ ţĥéîŕ ƒļöŵ ḿéàñš, ŵĥîļé ŕéƒüšîñĝ ţö ŕüñ îţ šàýš šö. À þŕöĵéçţ ƒļöŵ'š ţööļš àŕé ƃüîļţ öñçé ƒöŕ éṽéŕý ƒîļé öƒ à þàšš, šö ţĥé ĝàţé ĥöļđš îţ ŵĥéñ àñý đéçļàŕàţîöñ ţüŕñš ŕéđàçţîöñ öñ (KapiProject.DeclaresRedaction); à ƃüîļţ-îñ ƒļöŵ ƃüîļţ ƒöŕ öñé îñþüţ ƒîļé îš ĥéļđ ŵĥéñ à þöļîçý çöṽéŕš ţĥàţ ƒîļé. À þŕöĵéçţ ƒļöŵ'š îñþüţ šéţ šþļîţš ƃý ţĥé þöļîçý ţĥàţ ĝöṽéŕñš éàçĥ ƒîļé (groupInputsByBinding), àñđ àredactšţéþ ţĥàţ ñàḿéš ñörulesPathöŕrulesöƒ îţš öŵñ ŕéđàçţš éàçĥ þàŕţ üñđéŕ ţĥàţ þàŕţ'š þöļîçý (App.applyFlowRedaction); à šţéþ ţĥàţ ñàḿéš îţš öŵñ ŕüļéš ķééþš ţĥéḿ.kapi run,kapi upàñđ îţš þļàñ ŕéàçĥ ţĥé šţéþ ţĥŕöüĝĥ ţĥé šàḿé àššéḿƃļý, àñđ ţĥé ḾÇÞrun_flowţööļ àñđ ţĥé đéšķţöþ'š ƒļöŵ þŕéṽîéŵ ƃüîļđ ţĥéîŕ çĥàîñš üñđéŕ ţĥé þöļîçý öƒ ţĥé öñé ƒîļé ţĥéý ŕüñ öṽéŕ. Ţĥé šţéþ đéţéçţš ŵîţĥ îţš öŵñ đéţéçţöŕš àñđ ţĥé þöļîçý'š ţöĝéţĥéŕ, àñđ à šţéþ ţĥàţ đéţéçţš éñţîţîéš ŵîţĥ ñö éñţîţý-éẋţŕàçţ šţéþ àĥéàđ öƒ îţ îš ŕéƒüšéđ. À šţéþ ţĥàţ šéñđš šöüŕçé öüţ àƒţéŕunredact, ŵîţĥ ñö ŕéđàçţ šţéþ ƃéţŵééñ ţĥéḿ, ƒàîļš þļàçéḿéñţ (egress-after-restore). -
À šîñĝļé-ţööļ ŕüñ.
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. -
Ţĥé đééþéŕ ļööķ. Îţ šéñđš çĥüñķš öƒ ţĥé þŕöĵéçţ'š ƃļöçķ ţéẋţš ţö à ḿöđéļ (
host/contextdeeper.go). À çĥüñķ ĥöļđš ƃļöçķš öƒ ƒîļéš üñđéŕ öñé þöļîçý öñļý, àñđ éàçĥ çĥüñķ îš ŕéđàçţéđ üñđéŕ ţĥàţ þöļîçý ƃéƒöŕé ţĥé ḿöđéļ ŕéàđš îţ. Éàçĥ çĥüñķ ţĥéñ çàŕŕîéš ţĥàţ þöļîçý àñđ ţĥé ṽàļüéš ŕéàđ ƃàçķ ƒŕöḿ ţĥé ṽàüļţ, šö ţĥé ŕéšţ öƒ îţš ŕéǫüéšţš îš ŕéđàçţéđ àš ƃéļöŵ. -
Ţĥé öþéŕàţîöñ ļöĝ. Ţĥé ŕéçöŕđ öƒ àñ àþþļîéđ éđîţ ţŕàṽéļš ţö éṽéŕý çöñţéẋţ ƃàçķéñđ ţĥé þŕöĵéçţ šĥàŕéš îţš çöñţéẋţ ţĥŕöüĝĥ, šö ţĥé ŕéçöŕđéŕ ŕéđàçţš ţĥé ŕüñš àñđ ţĥé ñöţé îţ ķééþš öƒ éàçĥ đöçüḿéñţ üñđéŕ ţĥàţ đöçüḿéñţ'š þöļîçý, ṽàüļţîñĝ éàçĥ ŕüñ šéǫüéñçé üñđéŕ ţĥé éđîţîöñ àñđ ŕéṽîšîöñ îţ ƃéļöñĝš ţö, àñđ ļéàṽéš ţĥé çĥàñĝé šéţ àš šéñţ öüţ öƒ éṽéŕý ŕéçöŕđ öƒ à þŕöĵéçţ ţĥàţ đéçļàŕéš à þöļîçý (Ç-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: ŕéšţöŕéš öŕîĝîñàļš ƒŕöḿ ţĥé ƃàţçĥ šîđéçàŕ àƒţéŕ àþþļýîñĝ ţĥé ŕéţüŕñéđ ţàŕĝéţ.
Ñöţ ýéţ ƃüîļţ: çļéàŕàñçé àš à đéšţîñàţîöñ ļàđđéŕ
Ŕéđàçţîöñ îš ƃîñàŕý àţ éàçĥ ŕéàđéŕ: à šþàñ îš éîţĥéŕ ŵîţĥĥéļđ öŕ îţ îš ñöţ. Ţĥé đéšîĝñ îţ þöîñţš àţ îš çļéàŕàñçé, ĝöṽéŕñàñçé àţ à þöîñţ öṽéŕ à ļàđđéŕ öƒ đéšţîñàţîöñš, ŵĥéŕé ţĥé ļöçàļ ŵöŕķîñĝ ţŕéé šééš öŕîĝîñàļš àñđ éàçĥ ƒüŕţĥéŕ đéšţîñàţîöñ ñééđš éẋþļîçîţ çļéàŕàñçé ţö. Ñöţĥîñĝ îñ ţĥé ţŕéé éẋþŕéššéš à çļéàŕàñçé ļéṽéļ ýéţ; ţĥé éẋçļüšîöñ ţĥé ṽàüļţ éñçöđéš ļîṽéš îñ îţš þļàçéḿéñţ àñđ îñ ţĥîš đéçîšîöñ ŕàţĥéŕ ţĥàñ îñ à þöļîçý àñýöñé çàñ ŵŕîţé đöŵñ.
Ŕàţîöñàļé
Ŵĥý à þļàçéĥöļđéŕ ŕüñ, ñöţ ţéẋţ šüƃšţîţüţîöñ? Îñļîñé çöđéš àŕé àļŕéàđý þŕöţéçţéđ ƒŕöḿ ţŕàñšļàţîöñ, šüŕṽîṽé ţĥé šţŕéàḿîñĝ þîþéļîñé, àñđ ŕöüñđ-ţŕîþ ţĥŕöüĝĥ ƃîļîñĝüàļ ƒöŕḿàţš. Ŕéüšîñĝ ţĥéḿ ḿéàñš à ḿöđéļ àñđ àñ éẋţéŕñàļ ţööļ ţŕéàţ à ŕéđàçţîöñ éẋàçţļý àš ţĥéý ţŕéàţ àñý öţĥéŕ đö-ñöţ-ţöüçĥ ţöķéñ.
Ŵĥý îš ţĥé öŕîĝîñàļ ñéṽéŕ öñ ţĥé ŕüñ? Šö ţĥé ĝüàŕàñţéé îš àüđîţàƃļé: àñý šéŕîàļîžéđ àŕţîƒàçţ çàñ ƃé šçàññéđ ƒöŕ ţĥé šéçŕéţ àñđ ḿüšţ ñöţ çöñţàîñ îţ. Ţĥé ŕüñ çàŕŕîéš öñļý à çàţéĝöŕý àñđ à ţöķéñ.
Ŵĥý đüàļ ŕéšţöŕàţîöñ? Îđ-ƃàšéđ ŕéšţöŕé îš éẋàçţ ƃüţ ñééđš ţĥé îñļîñé šţŕüçţüŕé ţö šüŕṽîṽé. Þļàîñ-ţéẋţ çàŕŕîéŕš đŕöþ îţ, šö à ṽàüļţ-ƃàçķéđ ţéẋţ ḿàţçĥ öñ à þéŕ-ƃļöçķ-üñîǫüé ţöķéñ îš ţĥé ƒàļļƃàçķ.
Ŵĥý ŕüļéš ƃý đéƒàüļţ àñđ ḿöđéļš öþţ-îñ? Ŕüļé-ƃàšéđ đéţéçţîöñ îš đéţéŕḿîñîšţîç àñđ ƒüļļý öƒƒļîñé; îţ çàññöţ îţšéļƒ ļéàķ. Ḿöđéļ-ƃàšéđ đéţéçţîöñ îš ḿöŕé çàþàƃļé ƃüţ, ŵîţĥ à çļöüđ ḿöđéļ, đîšçļöšéš šöüŕçé đüŕîñĝ đéţéçţîöñ; ḿàķîñĝ îţ öþţ-îñ ķééþš ţĥé đéƒàüļţ ţŕüšţŵöŕţĥý.
Ŵĥý à šéþàŕàţé ŕüļéš ƒîļé? Ţĥé ţéŕḿ ļîšţ îš îţšéļƒ šéñšîţîṽé. Ķééþîñĝ îţ öüţ öƒ ţĥé çöḿḿîţţéđ ŕéçîþé ļéţš îţ šţàý üñţŕàçķéđ ŵĥîļé ţĥé ŕéçîþé šţîļļ ŕéçöŕđš ţĥàţ ŕéđàçţîöñ îš éñàƃļéđ.
Šéé àļšö
- Ç-01: Ţĥé þŕöĵéçţ ḿöđéļ: ŵĥéŕé ţĥé ṽàüļţ šîţš àñđ
ŵĥàţ đéļéţîñĝ
work/çöšţš. - É-01: Þŕöçéššîñĝ Éñĝîñé: ţĥé îñ-þŕöçéšš ṽàüļţ ŕîđîñĝ ţĥé ƃļöçķ ţĥŕöüĝĥ ţĥé šţŕéàḿ.
- É-03: Ţööļ Šýšţéḿ: ţŕàñšƒöŕḿéŕš, ÎÖ çöñţŕàçţš àñđ ţĥé þļàçéḿéñţ þàšš.
- Ƒ-02: Çöñţéñţ Ḿöđéļ: þļàçéĥöļđéŕ ŕüñš àñđ ţĥé šéḿàñţîç ṽöçàƃüļàŕý.
- Ḿ-01: Ƃîļîñĝüàļ Ƒöŕḿàţ Îñţéŕöþ: ţĥé éẋţŕàçţ àñđ ḿéŕĝé ŕöüñđ ţŕîþ ŕéđàçţîöñ šļöţš îñţö.