···45We follow a commit style similar to the Go project. Please keep commits:
67-* **atomic**: each commit should represent one logical change
8* **descriptive**: the commit message should clearly describe what the
9change does and why it's needed
1011### message format
1213-```
14<service/top-level directory>: <affected package/directory>: <short summary of change>
1516···26appview: state: fix token expiry check in middleware
2728The previous check did not account for clock drift, leading to premature
29-token invalidation.
30```
3132```
33knotserver: git/service: improve error checking in upload-pack
34```
35000036### general notes
3738- PRs get merged "as-is" (fast-forward) -- like applying a patch-series
···52Small fixes like typos, minor bugs, or trivial refactors can be
53submitted directly as PRs.
5455-For larger changes—especially those introducing new features,
56-significant refactoring, or altering system behavior—please open a
57-proposal first. This helps us evaluate the scope, design, and potential
58-impact before implementation.
5960### proposal format
6162Create a new issue titled:
6364-```
65-proposal: <affected scope>: <summary of change>
66```
6768In the description, explain:
···45We follow a commit style similar to the Go project. Please keep commits:
67+* **atomic**: each commit should represent one logical change
8* **descriptive**: the commit message should clearly describe what the
9change does and why it's needed
1011### message format
1213+```
14<service/top-level directory>: <affected package/directory>: <short summary of change>
1516···26appview: state: fix token expiry check in middleware
2728The previous check did not account for clock drift, leading to premature
29+token invalidation.
30```
3132```
33knotserver: git/service: improve error checking in upload-pack
34```
3536+The affected package/directory can be truncated down to just the relevant dir
37+should it be far too long. For example `pages/templates/repo/fragments` can
38+simply be `repo/fragments`.
39+40### general notes
4142- PRs get merged "as-is" (fast-forward) -- like applying a patch-series
···56Small fixes like typos, minor bugs, or trivial refactors can be
57submitted directly as PRs.
5859+For larger changes—especially those introducing new features, significant
60+refactoring, or altering system behavior—please open a proposal first. This
61+helps us evaluate the scope, design, and potential impact before implementation.
06263### proposal format
6465Create a new issue titled:
6667+```
68+proposal: <affected scope>: <summary of change>
69```
7071In the description, explain:
+6-5
readme.md
···4[Tangled](https://tangled.sh)—a code collaboration platform built
5on the [AT Protocol](https://atproto.com).
67-Read the introduction to Tangled [here](https://blog.tangled.sh/intro).
0089## docs
1011-* [knot hosting
12-guide](https://tangled.sh/@tangled.sh/core/blob/master/docs/knot-hosting.md)
13-* [contributing
14-guide](https://tangled.sh/@tangled.sh/core/blob/master/docs/contributing.md)—**read this before opening a PR!**
1516## security
17
···4[Tangled](https://tangled.sh)—a code collaboration platform built
5on the [AT Protocol](https://atproto.com).
67+Read the introduction to Tangled [here](https://blog.tangled.sh/intro). Join the
8+[Discord](https://chat.tangled.sh) or IRC at [#tangled on
9+libera.chat](https://web.libera.chat/#tangled).
1011## docs
1213+* [knot hosting guide](/docs/knot-hosting.md)
14+* [contributing guide](/docs/contributing.md) **please read before opening a PR!**
15+* [hacking on tangled](/docs/hacking.md)
01617## security
18