Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Copilot Instructions

## Philosophy

- **Pure Functions**: Favor pure functions (no side effects, no mutation, deterministic) as advocated by Eric Elliott.
- **Test-Driven Development (TDD)**: Write tests first, code in small, testable increments, following Uncle Bob’s TDD cycle.
- **Extreme Programming (XP)**: Embrace simplicity, communication, feedback, and courage. Prefer small, frequent, high-quality changes.
- **Framework Agnostic**: Do not use any frameworks or libraries unless explicitly requested. Use only standard JavaScript (ESM).
- **JSDoc**: All functions, classes, and modules must be documented with JSDoc for type safety and clarity.
- **Design Patterns**: Use classic, well-known patterns (factory, strategy, observer, etc.) only when they add clarity or testability.
- **Clean Code**: Prioritize readability, maintainability, and simplicity. Avoid cleverness for its own sake.
- **Testability**: All code should be easily testable. Avoid hidden dependencies and global state.
- **Small Iterations**: Make small, incremental changes. Each change should be easy to review and test.
- **No Frameworks**: Do not use React, Vue, Angular, or any other framework. No build tools unless explicitly requested.

## Coding Guidelines

- Use **ES Modules** (`import`/`export`).
- Use **pure functions** wherever possible.
- Use **const** and **let** (never `var`).
- Use **arrow functions** for short, stateless functions.
- Use **descriptive names** for variables, functions, and classes.
- **No mutation** of input arguments.
- **No side effects** in pure functions.
- **No global state** unless absolutely necessary (and then, document it).
- **JSDoc** for every function, class, and exported symbol.
- **Write a test** for every new function or feature (see `/src/*.test.js` for examples).
- **Keep files small** and focused on a single responsibility.
- **No magic numbers**—use named constants.
- **No unnecessary abstractions**—keep it simple.

## Example Function

```js
/**
* Adds two numbers (pure function).
* @param {number} a
* @param {number} b
* @returns {number}
*/
export const add = (a, b) => a + b
```

## Example Test

```js
import assert from 'node:assert/strict'
import { add } from './add.js'

assert.equal(add(2, 3), 5)
```

## When in Doubt

- **Ask for clarification** if requirements are unclear.
- **Prefer simplicity** over cleverness.
- **Write tests** for all edge cases.
- **Document** all exported symbols with JSDoc.

---

**Summary:**
Write clean, pure, framework-agnostic JavaScript (ESM) with JSDoc and tests.
Favor small, testable, incremental changes.
No frameworks, no unnecessary abstractions, no side effects.

---

12 changes: 11 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,20 @@ jobs:

strategy:
matrix:
node-version: [20.x, 22.x, 23.x]
node-version: [20.x, 22.x, 23.x, 24.x]

steps:
- uses: actions/checkout@v4
- name: Cache node_modules
Copy link

Copilot AI Jun 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Caching the entire node_modules directory can lead to large cache sizes and slower actions; consider only caching the npm cache directory (~/.npm) and reinstalling dependencies for a smaller cache footprint.

Copilot uses AI. Check for mistakes.
uses: actions/cache@v4
with:
path: |
~/.npm
node_modules
key: ${{ runner.os }}-node-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-${{ matrix.node-version }}-

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22.16.0
24
Copy link

Copilot AI Jun 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Consider pinning the Node.js version to a specific patch (e.g., '24.0.0') in .nvmrc to avoid unintended upgrades that could introduce breaking changes.

Suggested change
24
24.0.0

Copilot uses AI. Check for mistakes.
Loading
Loading