···2828 // pinnedRepositories: Any ATURI, it is up to appviews to validate these fields.
2929 PinnedRepositories []string `json:"pinnedRepositories,omitempty" cborgen:"pinnedRepositories,omitempty"`
3030 Stats []string `json:"stats,omitempty" cborgen:"stats,omitempty"`
3131+ Pronouns *string `json:"pronouns,omitempty" cborgen:"pronouns,omitempty"`
3132}
···11+package validator
22+33+import (
44+ "fmt"
55+ "strings"
66+77+ "tangled.org/core/patchutil"
88+)
99+1010+func (v *Validator) ValidatePatch(patch *string) error {
1111+ if patch == nil || *patch == "" {
1212+ return fmt.Errorf("patch is empty")
1313+ }
1414+1515+ // add newline if not present to diff style patches
1616+ if !patchutil.IsFormatPatch(*patch) && !strings.HasSuffix(*patch, "\n") {
1717+ *patch = *patch + "\n"
1818+ }
1919+2020+ if err := patchutil.IsPatchValid(*patch); err != nil {
2121+ return err
2222+ }
2323+2424+ return nil
2525+}
+2-1
docs/knot-hosting.md
···3939```
40404141Next, move the `knot` binary to a location owned by `root` --
4242-`/usr/local/bin/knot` is a good choice:
4242+`/usr/local/bin/` is a good choice. Make sure the binary itself is also owned by `root`:
43434444```
4545sudo mv knot /usr/local/bin/knot
4646+sudo chown root:root /usr/local/bin/knot
4647```
47484849This is necessary because SSH `AuthorizedKeysCommand` requires [really