concrete-naming
Naming and comment conventions that keep code readable without a change log baked into it — subject-first names for data (itemsCharged not chargedItems)…
Skill by JoseArron
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/josearron-concrete-naming
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data, writing, productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/concrete-naming
What's inside
- Skill name
concrete-naming- Description
- Naming and comment conventions that keep code readable without a change log baked into it — subject-first names for data (itemsCharged not chargedItems), verb-first names for actions (validateChargeOnInvoice not check), full domain terms instead of abbreviations or metaphors (PaymentTransactionLogService not PaymentJournalService), and comments that describe current behavior or business rules only — never git history, rename rationale, process notes, or which tool wrote the code. Use when naming a new type, class, method, or variable, when renaming something for clarity, when reviewing or writing code comments, when a teammate's edit reveals a naming pattern worth generalizing across a file, or when asked to "clean up naming," "make this read better," "why comment it that way," or "these names feel inconsistent."
- License
- MIT
- Instructions
- 134 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Concrete Naming
Every name and every comment should point at something real and current: a
domain noun, a business rule, a fact that is true right now. Not at process
(how the code got written), not at history (what it replaced), not at a
vague abstraction that could mean anything.
That splits into three habits: order data names subject-first, order action
names verb-first, and keep comments in the present tense.
## 1. Data: subject first, qualifier second
Types, classes, and variables name a *thing*. Lead with the concrete noun —
the entity or subject — then attach the qualifier (state, role, relation)
after it. Reading left to right should answer "what is this" before "what
happened to it" or "what kind of role does it play."
| Weak (qualifier first) | Strong (subject first) | Why |
|---|---|---|
| `chargedItems`, `refundedItems` | `itemsCharged`, `itemsRefunded` | Reads like a report column ("Items Charged: 4"), not an adjective-noun phrase |
| `PaymentJournalService` | `PaymentTransactionLogService` | Names the entity it operates on, not a metaphor for what that entity is |
| `LoadedInvoiceRecord` | `InvoiceRecordPopulated` | Entity first; "populated" is a state suffix, not a prefix modifier |
| `ChargeInputValidator` | `PaymentChargeValidator` | Uses the real entity name (`PaymentCharge`) that the rest of the codebase already uses, not a shorthand invented for this one class |
This is not "always reverse the word order" — it's "put the noun the reader
is scanning for at the front." A file full of `PaymentTransactionLog*` names
sorts and scans together; a file mixing `LoadedX`, `XPopulated`, `PendingX`,
`XPending` makes the reader hold every naming scheme in their head at once.
## 2. Actions: verb first, reads like a command
Methods and functions *do* something. Lead with the verb, in the imperative,
and let the rest of the name finish the sentence a caller would say out loud.
A terse or generic verb forces the reader to open the function body to find
out what it actually checks or returns — a fuller name answers that at the
call site.
| Weak | Strong | Why |
|---|---|---|
| `check(invoice, charges)` | `validateChargesOnInvoice(invoice, charges)` | Says what's being validated and against what, not just "some check happens" |
| `totalsFor(invoiceIds)` | `getTotalsPerInvoice(invoiceIds)` | "get" + noun + grouping reads as a full sentence fragment |
| `paymentTotalsFromEntries(entries)` | `getTotalsFromEntries(entries)` | This is a derivation, not a stored thing — verb-first matches its sibling `getTotalsPerInvoice` instead of looking like an unrelated naming scheme |
Data types are nouns because they sit still. Functions are verbs because
they act. Naming a function like a noun (`paymentTotalsFromEntries`) makes it
look like a value you could store, when it's actually a step you run.
## 3. Comments: what's true now, not how it got that way
A comment earns its place by telling the reader something the code can't say
on its own: a business rule, an invariant, a deliberately deferred decision,
or a concrete example that resolves an ambiguity. It loses its place the
moment it starts narrating the code's history instead of its present.
**Cut on sight** — anything that only makes sense to someone who was in the
room when the change was made:
```
// tx is no longer passed as a param since we now rely on AsyncLocalStorage
// per the transaction-scope design review
```
```
// renamed from PaymentJournalService — "journal" wasn't in our domain vocabulary
```
```
// switched from a manual date check to date-fns per the discussion in review
```
None of that is wrong, exactly — it's just misfiled. It belongs in the
commit message or the pull request description, which are append-only and
built for exactly this. A code comment lives inside the file it describes and
gets read by everyone who opens that file forever after; a rename's
rationale read by someone six months later, after three more renames, is not
information, it's noise that outlived its relevance. If the *why* still
matters architecturally, write it once in a design doc and let the comment
point at a stable business rule instead of the doc's history.
**Keep, because these describe a present, load-bearing fact:**
```
// a customer can't be charged twice for the same line item on one invoice
```
```
// for now the ceiling is billed + requested <= authorized;
// revisit once partial authorization ships
```
```
// rejects duplicate line items like [{sku: 'A', qty: 1}, {sku: 'A', qty: 2}]
// — caller should combine them first
```
The test: delete the comment and read the line cold. If what's missing is a
business rule, an edge case, or a "this is intentionally not the final
formula" flag, put the comment back. If what's missing is a story about the
code's past, leave it out — the diff and the commit message already told
that story, permanently, without rotting.
Once you have decided a comment earns its place, `plain-english` covers how to word it: present
tense, active voice, and the timeless rule that makes a history comment a style violation and not
just a maintenance one.
## Why this is worth the extra few seconds
A qualifier-first name and a subject-first name cost the same number of
characters. The difference only shows up when someone is scanning a file or
autocompleting: `StockMovement*` clusters together, `LoadedX` / `XPopulated`
/ `PendingX` doesn't cluster with anything. A history-comment costs nothing
to write and everything to maintain — it's accurate for exactly as long as
nobody touches the code again, then it silently starts lying. A comment about
a business rule stays true as long as the rule does.
## Self-check
Before committing a name or a comment, ask:
- **Type, class, or variable?** Does the first word answer "what is this,"
not "what happened to it" or "what state is it in"?
- **Method or function?** Does it start with a verb, and would reading it
aloud describe what the call site is actually asking for?From JoseArron/skills, MIT.
More from JoseArron/skills
- 0.603score
build-asset-library
JoseArron
Produce and organize a consistent reusable visual asset set with editable sources, exports, a manifest, and a preview gallery.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
research-visuals
JoseArron
Research visual references and build annotated moodboards for visual creative work across media.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
create-procedural-art
JoseArron
Create or refine visuals through code, including SVG, Canvas, shaders, procedural 2D or 3D geometry, and generative graphics.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
define-art-direction
JoseArron
Define or revise art direction for visual creative work across media.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
design-motion
JoseArron
Design or implement motion for creative work across media, including animation, graphic sequences, interfaces, and interactive pieces.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
design-sound
JoseArron
Design sound effects, soundscapes, audio cues, sonic identity, and audio-generation briefs across media.
SkillAFreshness: A★ 2Claude Code +9 - 0.595score
plan-trailer
JoseArron
Research references and plan trailers for a work, product, event, or experience.
SkillAFreshness: A★ 2Claude Code +9 - 0.595score
brainstorm-names
JoseArron
Brainstorm and evaluate names for a concept, project, brand, work, character, or feature.
SkillAFreshness: A★ 2Claude Code +9 - 0.595score
write-image-prompts
JoseArron
Write image-generator prompts and edit briefs from art direction, references, and asset needs.
SkillAFreshness: A★ 2Claude Code +9 - 0.592score
choose-skill
JoseArron
Choose a skill or sequence of skills for the work you want to do.
SkillAFreshness: A★ 2Claude Code +9 - 0.592score
implement-spec
JoseArron
Implement a ticketed spec with subagents in separate worktrees and integrate the result on one branch.
SkillAFreshness: A★ 2Claude Code +9 - 0.592score
retro
JoseArron
Review a coding session and suggest improvements to the agent's environment.
SkillAFreshness: A★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 25, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/JoseArron/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from JoseArron
- 0.603score
build-asset-library
JoseArron
Produce and organize a consistent reusable visual asset set with editable sources, exports, a manifest, and a preview gallery.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
design-sound
JoseArron
Design sound effects, soundscapes, audio cues, sonic identity, and audio-generation briefs across media.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
define-art-direction
JoseArron
Define or revise art direction for visual creative work across media.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
design-motion
JoseArron
Design or implement motion for creative work across media, including animation, graphic sequences, interfaces, and interactive pieces.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
create-procedural-art
JoseArron
Create or refine visuals through code, including SVG, Canvas, shaders, procedural 2D or 3D geometry, and generative graphics.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
research-visuals
JoseArron
Research visual references and build annotated moodboards for visual creative work across media.
SkillAFreshness: A★ 2Claude Code +9
Cite this page
concrete-naming skill. Agent Mart. https://agentmart.dev/skills/josearron-concrete-naming (last updated 2026-10-24)