blob: 52be2ac05788948c9417b2eb7c086ee03de356f0 [file] [view]
---
trigger: glob
description: Cross-language code style, control flow, and CLI conventions
globs: "*.py,*.sh,*.cc,*.h,*.go,*.bzl,*.bazel,*.yaml,*.yml"
---
# Code Style Rules
## File Organization & Definition Order
Order definitions within a file as:
1. Global variables / constants
2. Flags / CLI arguments
3. Functions
4. Classes
5. Main
## Control Flow & API Design
* Use early-return guard clauses over deeply nested conditionals.
* When branching on validation modes, make the fall-off `else` the error case
(fail-closed).
* Accept one form per input (e.g., a file path, not "path or inline content").
Do not add unrequested modes, filters, knobs, or flag aliases. Create test
fixture files instead of adding test-only code paths.
* Use module constants directly instead of adding function parameters for values
that never vary.
* When exposing a private constant (`_NAME`) as public (`NAME`), update all
internal callers to `NAME` and remove `_NAME = NAME` aliases.
* Omit speculative precondition checks when the underlying operation fails
clearly on its own.
* Do not accept `None` or add `if x is not None` guards unless `None` is a valid
domain state.
* Do not write nested comprehensions or comprehensions with multiple `for`
clauses; use explicit loops.
* Avoid long or complex inline expressions (e.g. multi-condition ternaries,
compound boolean chains, or dense one-liners). Break them into named
intermediate variables, prior preparation steps, or explicit statements.
## CLI & Flags
* Comment non-obvious flags (`--force`), non-default schemes, subtle arguments
(such as significant trailing slashes), and timeouts/thresholds/retries.
* Restrict constrained flag values strictly to the expected tokens (e.g.,
`true|false`) rather than permissive truthy/falsy sets.
* Include `(AGENTS: requires user confirmation to use)` in `--help` text and
error messages for CLI flags that bypass safety checks.
## Sorting
* Add `keep-sorted start` and `keep-sorted end` markers on list and dict config
or registry tables, even when they have a single entry.
## Bulk Logging
* In bulk operations, log a single summary line on success; on failure, list
each failing item sorted, one per line, with its location and reason.