Enforces naming convention rules (NAME-1 through NAME-7). Loaded by the conductor for write and review operations. Detects meaningless names, incorrect boolean prefixes, misleading names, abbreviations, and naming inconsistencies. Loads references/{language}.md for language-specific casing conventions before checking.
From clean-code-codexnpx claudepluginhub mikecubed/agent-orchestration --plugin clean-code-codexThis skill uses the workspace's default tool permissions.
references/go.mdreferences/javascript.mdreferences/python.mdreferences/rust.mdreferences/typescript.mdGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Details PluginEval's skill quality evaluation: 3 layers (static, LLM judge), 10 dimensions, rubrics, formulas, anti-patterns, badges. Use to interpret scores, improve triggering, calibrate thresholds.
First action: Load references/{language}.md for the detected language to
get language-specific casing rules and tooling before checking.
Precedence in the overall system: SEC → TDD → ARCH/TYPE → NAME/SIZE/DEAD → quality BLOCK.
The following names are always violations of NAME-1 regardless of language:
| Category | Banned names |
|---|---|
| Generic nouns | data, info, result, value, item, object, thing |
| Temp vars | temp, tmp, var1, var2, x, y, z (outside math) |
| Flag vars | flag, check, done, found, status (as booleans) |
| Handler catch | e, err (acceptable), error (acceptable — but not e2) |
| Non-descriptive | foo, bar, baz, test, stuff, misc, helper |
Boolean variables and functions returning booleans must use a predicate prefix:
| Allowed prefixes | Examples |
|---|---|
is | isActive, isLoggedIn, isValid |
has | hasPermission, hasChildren, hasError |
should | shouldRetry, shouldRefresh |
can | canDelete, canEdit, canProceed |
will | willExpire, willTimeout |
did | didChange, didLoad, didSucceed |
Banned boolean names: active, enabled, valid, loaded, connected
(these are adjectives lacking a predicate prefix — use isActive, isEnabled, etc.)
Name length must scale with identifier scope:
| Scope | Minimum length / guideline |
|---|---|
| Loop counter (1–5 lines) | Single letter acceptable: i, j, k, n |
| Local var (≤10 lines) | 2–8 chars; must hint at domain concept |
| Function-scoped var | ≥ 4 chars; clearly descriptive |
| Module/class member | ≥ 6 chars; unambiguous in class context |
| Public API / export | Full descriptive name; no abbreviations (see NAME-5) |
Single-letter names outside loops, or 1–2 char names in module scope, are NAME-4 violations.
All test functions must follow the pattern: [subject]_[scenario]_[expected]
# Python
def test_create_user_with_duplicate_email_raises_conflict_error(): ...
// TypeScript / JavaScript
it('createUser_withDuplicateEmail_raisesConflictError', () => { ... });
// Go
func TestCreateUser_WithDuplicateEmail_RaisesConflictError(t *testing.T) { ... }
// Rust
#[test]
fn create_user_with_duplicate_email_raises_conflict_error() { ... }
See language reference for exact casing of each segment.
Severity: BLOCK | Languages: * | Source: CCC
What it prohibits: Identifiers that do not reveal intent. Covers variables, functions, parameters, classes, modules, and files. Any name from the anti-pattern table above is an automatic violation.
Detection:
agent_action:
NAME-1 (BLOCK): Non-revealing name '{name}' at {file}:{line}.--fix: replace the name at declaration and all call sites within --scopeBypass prohibition: "it's just a temp var", "everyone knows what x means" → Refuse. Cite NAME-1. Context is lost within hours.
Severity: WARN | Languages: * | Source: CCC
What it prohibits: Boolean variables or functions returning bool /
boolean / bool that do not start with a predicate prefix from the allowed
list above.
Detection:
bool/boolean type annotations and -> bool return typesactive, valid, enabled, loadedagent_action:
NAME-2 (WARN): Boolean '{name}' missing predicate prefix at {file}:{line}.active → isActive, valid → isValid--fix: rename at declaration and all usage sites within --scopeSeverity: BLOCK | Languages: * | Source: CCC
What it prohibits: Names that actively lie about what the identifier is or does. Examples:
accountList that is actually a MapgetUser that has side effects (creates, deletes, etc.)Manager or Processor or Handler (content-free nouns)isTrue, isFlag, or other tautologiesDetection:
List, Map, Set, Array, Dict) against actual typeget* functions that contain write operations (INSERT, DELETE, update calls)Manager, Processor, Handler, Helper,
Util, Utils, Misc, Commonagent_action:
NAME-3 (BLOCK): Misleading name '{name}' at {file}:{line}. Reason: {reason}.Severity: WARN | Languages: * | Source: CCC
What it prohibits: Names that are too short for their scope (module-level single-letter) or excessively long without adding clarity (names > 50 chars that repeat surrounding context).
agent_action:
NAME-4 (WARN): Name '{name}' at {file}:{line} too short/long for its scope.Severity: WARN | Languages: * | Source: CCC
What it prohibits: Abbreviations and acronyms in exported/public identifiers that are not universally understood. Domain-standard acronyms (HTTP, URL, ID, API, SQL, JSON, XML) are permitted. All others must be spelled out.
Examples:
usrNm → userNamegetProdCat → getProductCategorycalcTtlPrc → calculateTotalPriceHTTP, URL, UserID, parseJSON — permittedagent_action:
NAME-5 (WARN): Abbreviation in public identifier '{name}' at {file}:{line}.--fix: rename in all files within --scopeSeverity: WARN | Languages: * | Source: CCC
What it prohibits: Using different names for the same concept in the same
codebase. Example: a user entity called User in one module, Account in
another, and Member in a third — all referring to the same domain concept.
Detection (heuristic — flag for human review):
User/Account/Member, fetch/get/load/retrieve
used for the same type of operation, create/add/insert/save mixed for
persistence writesagent_action:
NAME-6 (WARN): Inconsistent naming — '{name_a}' and '{name_b}' may refer to the same concept.Severity: WARN | Languages: * | Source: CCC / TDD-4
What it prohibits: Test function names that do not follow the
[subject]_[scenario]_[expected] pattern, or that use vague descriptions like
test1, testCase, itWorks, checkStuff.
Detection:
*.test.ts,
test_*.py, *_test.go)agent_action:
NAME-7 (WARN): Test name '{name}' does not follow [subject]_[scenario]_[expected] pattern at {file}:{line}.Report schema: see skills/conductor/shared-contracts.md.