agentleFS
EndikaEndika/eskills/skills/standards/SKILL.md

standards

Skill0 starsChanged 57 days agoMITView on GitHub

Use when about to commit, write or design tests, name identifiers, write user-facing copy, choose an ID type, or push — enforces my non-negotiable conventions for commits, test design, repo hygiene, inclusive language, IDs, and pre-push checks.

11 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use spec and design.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • SentrySkill

    spec

    Produce a verified spec — problem, desired outcome, and acceptance criteria — before building. Use when given a GitHub/Linear issue link, when starting from a fuzzy in-conversation idea, or asked to "figure out what to do" / "scope this" / "what should I build" — whenever the *what* isn't yet pinned down. Grills the ambiguities, checks the premise against the code, and produces acceptance criteria you sign off on — then hands to design-first.

    Also in 3 projects that use this

  • Microsoft AzureSkill

    design

    Design rules and conventions for the API Center Portal. Use when editing detail pages, card components, badges, layout, navigation, sidebars, or headers. Covers badge styling, metadata placement, page navigation patterns, and layout alignment.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

11 rules. 0 are common, 5 are distinctive, and 6 are very specific to this project.

  • 0

    Common

    Most of the 8 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    No trailers: never add Co-Authored-By:, and never add a 🤖 Generated with Claude Code footer to commits or PR bodies.

    line 17
  2. Very specific:

    No trailers, no footer: never a 🤖 Generated with Claude Code footer and never Co-Authored-By: — same rule as commits.

    line 33
  3. Very specific:

    No mock-only tests: Don't vi.fn()/spy a port and assert it was called — that tests wiring, not behavior.

    line 43
  4. Distinctive:

    A VO getter is not a test: Test the behavior the value object enforces (validation, equality, immutability), not the generated property.

    line 46
  5. Very specific:

    If an internal doc reaches the repo anyway: git rm it (or rewrite history with the user's OK if already pushed) and move it to …

    line 54
  6. Distinctive:

    Don't churn third-party/library names you don't control — fix what's yours.

    line 68
  7. Distinctive:

    Don't assume the reader's gender: impersonal or neutral 2nd person — "te damos la bienvenida", not "bienvenidos".

    line 70
  8. Distinctive:

    Don't assume family shape or roles: "la familia de…", not "los papás/padres de…".

    line 71
  9. Very specific:

    Default to UUID v7 (uuidv7, RFC 9562) for any newly generated entity ID — no need to ask each time.

    line 78
  10. Distinctive:

    Run all the gates CI runs, as one batched call — not just tests:

    line 83
  11. Very specific:

    Prefer the project's single verify/check script if it exposes one.

    line 87

“Common” is measured: kept by at least 6 in 10 of the 8 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

standards

Overview

My non-negotiable conventions — the floor every other skill stands on. When one applies, follow it exactly; it overrides generic defaults. Flag a real conflict once, then proceed (don't rehash).

Commits

  • One line only: type(scope): subject — English, imperative. No body unless I explicitly ask. Detail belongs in the PR description, not the commit.
  • No trailers: never add Co-Authored-By:, and never add a 🤖 Generated with Claude Code footer to commits or PR bodies.
  • Pick the Conventional Commit type honestly: feat/fix cut releases; chore/docs/refactor/test don't. Scaffolding is chore, not feat.
  • In release-please + auto-merge repos the amend window is ~seconds. Get the one-line message right the first time.
  • Bots are exempt: dependabot / release-please author their own commits with structured multi-line bodies (machine-readable footers, changelogs). That's expected — the one-line rule governs commits I write, not bot commits.
  • Integrate PRs by rebase — never squash, never a merge commit. main stays strictly linear; release-please keeps its release PR rebased on main automatically.

Branches

  • Never commit straight to the default branch. Feature work goes on a short-lived branch (feat/…, fix/…, chore/…), pushed and opened as a PR — even in a solo repo.
  • One branch = one purpose; keep it small. Integrate by rebase (see Commits), then delete the branch. main stays strictly linear.
  • Bots are exempt: release-please and dependabot manage their own branches/PRs.

Pull Requests

  • Title: same type(scope): subject as a commit — English, imperative, one line.
  • Body — clear and simple to read, by sections (the structure lives here, not in a repo template file): What & why (1-2 sentences) → Changes (short bullets) → Testing (commands run + result) → Notes (risks / screenshots / follow-ups). Drop any section that doesn't apply — scannable, no filler, no checklist boilerplate.
  • No trailers, no footer: never a 🤖 Generated with Claude Code footer and never Co-Authored-By: — same rule as commits.
  • Link the issue with Closes #N when there is one.
  • No canned assurance prose — "ensured all tests pass", "followed the existing conventions", "preserved the original behaviour". It reads as generated because it is padding: say what changed. Watchlist in comms/references/ai-tells.md.

Tests

Fewer, higher-signal tests over a high count. Before writing one, ask: "If I delete this, what real bug could ship undetected?" If the answer is "none / TypeScript catches it", don't write it.

  • No mock-only tests. Don't vi.fn()/spy a port and assert it was called — that tests wiring, not behavior. Build a small in-memory fake of the port and assert the observable outcome.
  • Prefer integration-flavored tests: one test exercising use case → service → repository (memory repo) beats three mock-at-every-seam unit tests.
  • Skip trivial passthroughs: a use case that just forwards to an already-tested service needs no test of its own.
  • A VO getter is not a test. Test the behavior the value object enforces (validation, equality, immutability), not the generated property.
  • Coverage % is not a target. 80% with rich behavioral assertions beats 100% of trivial ones.

Repo hygiene

  • Never git add -A / git add . / git add --all. Inspect git status --short and stage explicit paths.
  • Repo holds only project code + README (+ LICENSE/config). Internal docs, specs, plans and checklists live outside the repo in a sibling ../<repo>-notes/ dir — never committed, and never .gitignore'd either (gitignoring a doc is itself the violation; just don't stage it).
  • Skill defaults are wrong here — override them. brainstorming, writing-plans and task-flow default to saving specs/plans at docs/superpowers/... inside the repo and then committing them. Do NOT follow that. When bootstrapping a project, create ../<repo>-notes/ as a sibling of the repo before the first spec/plan write, and target it from that very first Write. The first time a spec lands in docs/ inside the repo, the rule is already broken.
  • If an internal doc reaches the repo anyway: git rm it (or rewrite history with the user's OK if already pushed) and move it to ../<repo>-notes/. Never "fix" it by adding the path to .gitignore.
  • Code, identifiers, log strings, file/var names, UI strings → English. Comments minimal — only the non-obvious "why". Watchlist of generated-code tells in references/code-tells.md.

Inclusive language

Applies to identifiers, comments, commits, log strings and user-facing copy in every locale. Swap the term at write time; if a neutral genuinely reads worse, flag it once and pick the least-bad rephrase — don't revert to the excluding form.

  • Code / technical (English) — never introduce the legacy term in new code:
    • master/slave → primary/replica, leader/follower, or main/worker (by domain); the default branch is main.
    • whitelist/blacklist → allowlist/blocklist (or allowed/blocked).
    • grandfathered → legacy / pre-existing; sanity check → quick check / validation.
    • dummy → placeholder / sample; man-hours → person-hours; manned → staffed.
    • Don't churn third-party/library names you don't control — fix what's yours.
  • User-facing copy (ca/en/es/eu/gl/va) — neutral & collective, never split forms or neologisms:
    • Don't assume the reader's gender: impersonal or neutral 2nd person — "te damos la bienvenida", not "bienvenidos".
    • Don't assume family shape or roles: "la familia de…", not "los papás/padres de…"; "tu familia" / "persona adulta", not "mamá/papá".
    • Neutralize with real words, not "/" splits and not "-x/-e": "peques" / "la infancia" (not "niños/as", not "niñes"); "participantes" / "quien juega" (not "usuarios/as"); "el equipo". If no neutral term fits, rephrase the sentence rather than gender it.
    • Skip ableist/violent filler ("está de locos", "te vas a volver loco") when a plain neutral exists.
  • eskills:ux-bar enforces this for UI strings; eskills:standards for code, commits and identifiers; eskills:comms for text sent to a person outside this machine.

IDs

  • Default to UUID v7 (uuidv7, RFC 9562) for any newly generated entity ID — no need to ask each time. The ~1 KB dependency is acceptable; time-ordering is worth it.
  • No-flag exceptions: short URL-friendly slugs (not UUIDs at all). If a project already standardized on v4, follow it — don't refactor existing IDs unprompted.

Before pushing

Run all the gates CI runs, as one batched call — not just tests:

lint + typecheck + tests

  • Prefer the project's single verify/check script if it exposes one. Passing CI is the floor, not a stretch goal.
  • Non-negotiable whenever the task ends in a push (especially "súbelo para que aplique release") — lint failures gate releases too.

Pushback discipline

Once I validate a decision ("OK, hazlo"), stop adding caveats or re-validation on the same point. Group critical warnings once, up front. Push back again only for genuinely new, un-flagged risks (security, data loss).

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.