# Contributing
Thanks for taking a look. tilstream is a small project with a narrow scope
(see the README for what that scope is) so please read this before filing an
issue or opening a pull request.
## Before you open an issue
1. Check the CHANGELOG to see if the behavior you are hitting is a known
regression.
2. Reproduce against `main`. Bug reports for released versions are welcome
but fixes will ship from `main`.
3. Include a minimal markdown fixture. A three-line file that reproduces the
bug is more useful than a screenshot of the output.
## Before you open a pull request
1. Run `go test ./...` and `go vet ./...`. CI will run them anyway but it
saves a round trip.
2. Run `gofmt -s -w .` and `staticcheck ./...` if you have it installed.
3. Keep the subsystem-per-file discipline: `internal/render/` is rendering,
`internal/feed/` is feeds, etc. If your change needs a new package,
explain why in the PR description.
4. Add a test. The test suite uses fixture folders under
`internal/*/testdata` and compares against golden files; regenerate
goldens with `go test -update ./...`.
## Scope
tilstream renders markdown to HTML, builds a feed, and builds a search
index. It is not going to grow taxonomies, shortcodes, content types, or a
plugin system. If your change adds a flag, it should have a clear default
and do nothing when not set.
Larger features that have been discussed and declined:
- Multiple output formats per post (keep the markdown source canonical)
- A theme system (users can override `templates/post.tmpl`, that is enough)
- Asset pipeline (put a CDN or esbuild in front of `public/`)
## Commit messages
Short, imperative subject. Prefix with the package touched:
render: handle nested footnotes without panic
feed: include post categories in item guid
Body optional; wrap at 72. Reference issues with `Fixes #123` on its own
line so the bot closes them.
## Releases
Tags are cut from `main` when the changelog has a non-empty Unreleased
section and CI is green. goreleaser publishes binaries for linux/amd64,
linux/arm64, darwin/amd64, darwin/arm64, and windows/amd64.
## License
By submitting a pull request, you agree that your contribution is licensed
under the MIT License in `LICENSE`.