From d9a805312b5233f611f1f4b744474cb4b791f113 Mon Sep 17 00:00:00 2001 From: sneak Date: Sun, 30 Aug 2026 01:41:29 +0000 Subject: [PATCH] Require thin cmd/ entrypoints: all logic in internal/ or pkg/ --- prompts/CODE_STYLEGUIDE_GO.md | 13 +++++++++---- prompts/REPO_POLICIES.md | 4 +++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/prompts/CODE_STYLEGUIDE_GO.md b/prompts/CODE_STYLEGUIDE_GO.md index 043e8f1..ce2b903 100644 --- a/prompts/CODE_STYLEGUIDE_GO.md +++ b/prompts/CODE_STYLEGUIDE_GO.md @@ -124,10 +124,15 @@ last_modified: 2026-03-18 1. Keep the `main()` function as small as possible. -1. Keep the `main` package as small as possible. Move as much code as is - feasible to a library package, even if it's an internal one. `main` is just - an entrypoint to your code, not a place for implementations. Exception: - single-file scripts. +1. Keep the `main` package as small as possible. Each `cmd//` directory + contains a single `main.go` whose body is one call into library code (for + example `os.Exit(cli.Main())` calling `internal/cli`). All CLI logic — flag + parsing, subcommand dispatch, argument handling, output formatting — lives + in `internal/` or `pkg/`, not in `cmd/`. `main` is just an entrypoint to + your code, not a place for implementations. Exception: single-file scripts. + +1. No project logic outside `internal/` or `pkg/`. Anything in `cmd/` is a thin + entrypoint only. 1. HTTP HandleFuncs should be returned from methods or functions that need to handle HTTP requests. Don't use methods or your top level functions as diff --git a/prompts/REPO_POLICIES.md b/prompts/REPO_POLICIES.md index 9aba6b0..32a0571 100644 --- a/prompts/REPO_POLICIES.md +++ b/prompts/REPO_POLICIES.md @@ -387,7 +387,9 @@ style conventions are in separate documents: language-specific config). Everything else goes in a subdirectory. Canonical subdirectory names: - `bin/` — executable scripts and tools - - `cmd/` — Go command entrypoints + - `cmd/` — Go command entrypoints; thin only: one `main.go` per binary whose + body is a single call into `internal/` or `pkg/`, no project logic in + `cmd/` - `configs/` — configuration templates and examples - `deploy/` — deployment manifests (k8s, compose, terraform) - `docs/` — documentation and markdown (README.md stays in root)