docs/development/contribute.md
We welcome contributions! Whether it's fixing bugs, adding features, or improving documentation, your help is appreciated.
[!WARNING] Read the Development - Getting Started guide first.
git checkout -b feature/my-new-feature
We ask people to attach Log.log to public issue reports, so treat everything written there as published.
account.MaskedLogEntry, never an account's id or name. AccountCredentialStatus.FormatAccountLabel gives the unmasked label and is for dialogs shown to the account's owner only.Account, an Identity, or anything holding one off an exception. Serilog.Exceptions reflects over every public property of a logged exception and follows nested objects, so a live account on an exception publishes its address and activation bytes no matter what ToString says. Carry an AccountSummary instead. A test enforces this: see ExceptionsCannotReachAnAccount.Message gets logged too, so mask anything you interpolate into one.Dinah.Core.Security.SecretString, which keeps the value behind Reveal() where reflection cannot find it and prints [REDACTED length=N] everywhere else. Implement ILogMasked on a type that needs a masked identity in logs.Reveal() at the point of use, and nowhere else. Interpolating a secret into a string is not a compile error, so a redaction can end up sent over the wire in place of the real value - cover any new call site with a test.git push origin feature/my-new-feature
If you find a bug or have a feature request, please open an issue on GitHub.