JavaScript Skill
Scope
Use this skill for JavaScript or Node/browser code changes and reviews.
Precedence
- Follow explicit user instructions first.
- Follow repository conventions, formatter, linter, and
AGENTS.md before generic
defaults in these rules.
- Use the rule files as focused guidance and review checklists, not as a reason to fight
established local patterns.
ES2025+ Baseline
- Assume a modern runtime such as Node 22+ or evergreen engines.
- Prefer standardized Stage 4 ECMAScript features only.
- Prefer newer standard helpers when they reduce boilerplate.
- Treat 2026-finished APIs as conditional on target runtime support.
- Do not default to Stage 3 syntax such as
using, await using, or decorators.
Java-Style OOP Baseline
- Treat classes as the default home for stateful business behavior.
- Limit free functions to small pure transforms, validators, calculators, and mappers.
- Treat controllers, services, repositories, policies, use cases, ports, and
specifications as first-class architectural concepts.
- Treat stateful browser behavior as interface-layer controller code rather than loose
script modules.
- Prefer parameter objects,
#private fields, and explicit value objects over ad hoc
argument lists and mutable shapes.
- Prefer intent methods, domain errors, and stable event payload DTOs over generic
property mutation.
- Keep composition-root wiring explicit and centralized, with dependencies flowing
inward.
Operating Model
- Start with this file.
- Load the baseline rules for almost every task:
- Load only the rule groups that match the task.
- Use each file's local
Example and End Check, then finish with the global
checklist at the bottom of this file.
Rule Map
Syntax and formatting
Objects, arrays, and data shape
Functions, classes, and modules
Equality, conversion, and modern syntax
Async and failure handling
Task-Based Loading
Load these additional files when the task has these traits:
- Data reshaping or DTO work:
objects, destructuring, collections,
value-semantics.
- Domain and service design or refactors:
classes-and-constructors, functions,
accessors, modules, error-handling, naming-conventions,
solid-and-structure.
- Browser widgets, DOM bindings, and event-driven UI controllers:
ui-controllers,
classes-and-constructors, modules, naming-conventions, comments.
- Async flows, I/O, retries, timers, concurrency, or background work:
async,
error-handling, standard-library.
- Nullability, defaults, parsing, regex, or binary conversion:
value-semantics,
standard-library.
- Formatting, documentation, or readability cleanup:
formatting, strings,
comments, control-flow.
- Code review: start from the changed lines, then load only the rules implicated by the
diff plus the end-check categories below.
Important Distinctions
value-semantics.md owns equality, conversions, defaults, truthiness, and optional
chaining.
async.md owns Promise.try(), Array.fromAsync(), and async flow rules.collections.md owns iterator helpers, Set algebra, copy depth, and change-by-copy
collections inside service and repository workflows.
classes-and-constructors.md owns encapsulation, constructor discipline, and factory
guidance.
ui-controllers.md owns DOM lifecycle, event binding, teardown, and interface-layer
controller guidance.
functions.md owns parameter-object APIs and the boundary between tiny pure helpers
and named service or use-case methods.
objects.md owns value-object and DTO boundary guidance.error-handling.md owns domain-error policy.standard-library.md owns concrete ES2025+ helper APIs such as RegExp.escape(),
Error.isError(), and binary conversion helpers inside object-oriented designs.
solid-and-structure.md is the only file that names SRP, OCP, LSP, ISP, DIP, and the
composition-root and application layering model.
End Check
- Verify repository conventions override generic defaults when they differ.
- Verify chosen ES2025+ features are standardized and fit target runtime support.
- Verify behavior lives on objects, services, use cases, or controllers rather than
scattered utilities.
- Verify naming, encapsulation, module boundaries, value objects, and DTO boundaries stay
explicit.
- Verify ports, adapters, and layer placement are clear.
- Verify browser controllers keep lifecycle, DOM boundaries, and cleanup explicit.
- Verify async work, error handling, and collection mutation choices are intentional.
- Verify comments and formatting remain consistent and low-noise.