2 Commits

Author SHA1 Message Date
user
8fc81c3774 go styleguide: require Stringer for custom string wrapper types
Custom string-based types (e.g. ImageID, ContainerID) must implement
fmt.Stringer. Use .String() at SDK/library boundaries instead of
string(v) for explicit, grep-able conversions.
2026-02-23 11:54:39 -08:00
189e54862e Add template repos section to README
All checks were successful
check / check (push) Successful in 7s
2026-02-23 01:38:38 +07:00
2 changed files with 39 additions and 0 deletions

View File

@@ -115,6 +115,22 @@ subdirectory. Each file contains one or more related prompts or policy
documents. There is no build step or runtime component; the prompts are consumed
by copying them into other projects or referencing them directly.
## Template Repos
These template repositories implement the policies defined in this repo and
serve as starting points for new projects. They must be kept in sync when
policies change.
- **[template-app-go](https://git.eeqj.de/sneak/template-app-go)** — Go HTTP
server template (Uber fx, chi, SQLite, session auth, Prometheus metrics)
- **[template-app-js](https://git.eeqj.de/sneak/template-app-js)** — JavaScript
SPA template (Vite, Tailwind CSS v4, nginx Docker deployment)
- **[template-app-python](https://git.eeqj.de/sneak/template-app-python)** —
Python web application template (FastAPI, uvicorn, pytest, black, ruff)
When updating policies in this repo, also update the template repos to match
(Makefile targets, Dockerfile conventions, CI workflows, required files, etc.).
## TODO
- Add more prompt templates for common development tasks

View File

@@ -423,6 +423,29 @@ last_modified: 2026-02-22
[github.com/bcicen/go-units](https://github.com/bcicen/go-units) for
temperatures (and others). The type system is your friend, use it.
1. When defining custom string-based wrapper types (e.g. `type ImageID string`,
`type ContainerID string`), always implement the `fmt.Stringer` interface.
At SDK and library boundaries, use `.String()` instead of `string(v)` to
convert the value to a plain string. This makes the conversion explicit,
grep-able, and ensures a consistent pattern across the codebase.
Example:
```go
type ImageID string
func (id ImageID) String() string {
return string(id)
}
// At SDK/library boundaries:
// Good:
client.PullImage(ctx, imageID.String())
// Bad:
client.PullImage(ctx, string(imageID))
```
1. Once you have a working program, run `go mod tidy` to clean up your `go.mod`
and `go.sum` files. Tag a v0.0.1 or v1.0.0. Push your `main` branch and
tag(s). Subsequent work should happen on branches so that `main` is "always