Skip to content
Back to skills

Code Comments

ASecurity

Write tasteful, load-bearing comments in Apex source. Use when writing or editing code, JSDoc, TODOs, or file headers, or when deciding whether a comment should exist.

  • 314 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 20, 2026
ai-agentsexpressgitapi

Works with

  • api

Security analysis

A100/100

Scanned September 20, 2026

npx -y skills add pensarai/apex --skill code-comments --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Code Comments?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Code Comments
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/pensarai-code-comments/badge)](https://www.skillsdirectory.com/skills/pensarai-code-comments)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: code-comments
description: Write tasteful, load-bearing comments in Apex source. Use when writing or editing code, JSDoc, TODOs, or file headers, or when deciding whether a comment should exist.
---

# Code comments

How to comment when working on Apex. Read this before adding or rewriting comments.

This is repository-development guidance for coding agents working on Apex. Keep it in the repo's `.agents/skills` tree only; do not copy or link it into `.claude/skills`, `.skills`, `skills`, `~/.agents/skills`, or `~/.pensar/skills`, because Apex scans those locations as runtime skills.

## Invariants

- A comment must carry information the code cannot recover. If a better name or a smaller function would make it unnecessary, do that instead.
- Comment the why, the why-not, and the invariant. Never narrate the next line.
- Place a load-bearing comment next to the code it constrains. Distant essays get skipped and do not protect the dangerous line.
- Stale comments are bugs. If you change behavior a comment describes, update or delete it in the same edit.
- Write for the next reader who was not in this conversation — human or agent. No session notes, "the user asked for this," or chat residue.
- Default to one sentence. Two or three lines when the constraint needs them. No multi-paragraph docstrings and no labeled taxonomies (`CONTRACT`, `MUST`, `ARCHITECTURE`).
- Don't comment-out code; git remembers. Don't add comments to code you did not touch.

## Write one when

- The obvious approach is wrong, and the next editor will "fix" it
- Correctness depends on order, aliasing, re-entrancy, ownership, or a peer that is not visible here
- A value, timeout, limit, or encoding looks arbitrary
- The code works around a platform, SDK, or spec quirk (name the quirk)
- A public contract is not expressible in the type (single-read streams, processor ordering, "do not route X through Y")
- You spent real time learning something the next reader will not see
- A TODO is still justified — say why it is deferred and what "done" means

## Do not write one when

- It restates the identifier, type, or the next statement
- JSDoc would only echo parameter names and return types
- The code is unclear and should be renamed or extracted instead
- You are padding a change so it "looks documented"
- The file already makes the point at the call site that matters

Agents treat comments as durable memory. A precise invariant next to the line it protects prevents a locally reasonable, globally wrong edit. A paragraph of narration gets skipped or copied. Prefer the former.

## House style

Match neighboring Apex comments: natural prose, complete sentences, no banner art except where a test file already uses section rules.

JSDoc is for exported types and methods when the types cannot carry the contract — who must call what, in what order, and what silently breaks. See `src/core/observability/active-spans.ts` and `src/core/api/index.ts`.

An empty `catch` still needs the reason the error is swallowed.

## Shape

**Narration — delete it:**

```
// Reverse the spans
const spans = [...this.active.entries()].reverse();
```

**Load-bearing — keep this shape:**

```
// Spans start parent-first, so reverse insertion order closes the deepest
// children before their parents. Copy first because span.end() calls onEnd.
```

**Weak JSDoc:** `/** Tracks active spans. */`

**Useful JSDoc:** states why `forceFlush` cannot recover open spans, and that this processor must stay first in the provider list.

## Before you keep a comment

1. Can the code say this instead?
2. Will this still be true after the next obvious refactor?
3. Is it next to the line it protects?
4. Would skipping it let someone make a locally reasonable, globally wrong edit?

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.