Files
winterfail/AGENTS.md

166 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENTS.md
## 1. Build, Lint, and Test Commands
### 1.1 Build
- **Development build**: `npm run build:dev`
- Compiles source files with source maps enabled.
- Output directory: `dist/`.
- **Production build**: `npm run build:prod`
- Optimized bundle, minified assets, no source maps.
- Output directory: `dist/`.
- **Watch mode**: `npm run build:watch`
- Rebuilds on file changes; useful during active development.
### 1.2 Lint
- **ESLint**: `npm run lint`
- Runs ESLint over all `src/**/*.js` and `src/**/*.ts`.
- Fails on any error with exit code `1`.
- **Prettier**: `npm run format`
- Checks for formatting violations without fixing them.
- Use `npm run format:fix` to automatically format all files.
### 1.3 Test
- **Full test suite**: `npm test`
- Executes all Jest test files (`**/__tests__/**/*.js`).
- **Run a single test**: `npm test -- <testFilePath>`
- Example: `npm test -- src/__tests__/utils/format.test.js`
- Runs only the specified test file, preserving test isolation.
- **Coverage**: `npm run coverage`
- Generates an Istanbul coverage report in `coverage/`.
### 1.4 Common npm Scripts (add to `package.json` if missing)
```json
{
"scripts": {
"build:dev": "webpack --mode development",
"build:prod": "webpack --mode production",
"build:watch": "webpack --watch",
"lint": "eslint src/**/*.js",
"format": "prettier --check src/**/*.js",
"format:fix": "prettier --write src/**/*.js",
"test": "jest",
"coverage": "jest --coverage"
}
}
```
---
## 2. Code Style Guidelines
### 2.1 File Organization
- Keep related components, utilities, and hooks in featurespecific directories.
- Use index files (`index.js`) to reexport public APIs from each folder.
### 2.2 Imports
- **Named imports only** when possible:
```js
import { foo, bar } from './utils';
```
- **Default imports** only for modules that expose a default export:
```js
import defaultFn from './default';
```
- **Relative paths** (`./`, `../`) must be used; no rootpath shortcuts.
### 2.3 Formatting
- **Indent**: 2 spaces, no tabs.
- **Quotes**: Prefer single quotes (`'`) for strings.
- **Semicolons**: Optional but encouraged for consistency.
- **Line length**: Limit to 100 characters; wrap when exceeded.
- **Trailing commas**: Use in object/array literals.
### 2.4 Naming Conventions
- **Variables / Functions**: `camelCase`.
- **Classes**: `PascalCase`.
- **Constants**: `UPPER_SNAKE_CASE`.
- **File names**: kebab-case for CSS, snake_case for utility modules.
- **Test files**: suffix with `.test.js` or `.spec.js`.
### 2.5 TypeScript (if used)
- Enable `strict` mode in `tsconfig.json`.
- Prefer `interface` for object shapes; use `type` only for unions or conditional types.
- Export types explicitly when they are part of a public API.
### 2.6 Error Handling
- **Synchronous**: Throw descriptive `Error` objects.
- **Asynchronous**: Return rejected promises or use `try/catch` with custom error classes.
- **Logging**: Use `console.error` for runtime errors; include context (e.g., `error.message + ' at ' + stack`).
### 2.7 Async/Await
- Always handle rejected promises; avoid unhandled promise warnings.
- Prefer `await` over `.then()` chains for readability.
### 2.8 Dependency Management
- Keep thirdparty imports at the top of the file.
- Avoid direct use of global Node APIs (`process`, `__dirname`) unless wrapped in utility functions.
- Pin versions in `package.json`; run `npm audit` regularly.
### 2.9 Testing Conventions
- **Arrange**: Setup → Exercise → Verify.
- **Describe**: Use `describe` blocks for logical groups.
- **It**: Use `it` with a clear, pasttense description.
- **BeforeEach / AfterEach**: Clean up mocks and state.
---
## 3. ProjectSpecific Rules
### 3.1 Cursor Rules
- No `.cursor` configuration detected in the repository. If you add a `.cursor` folder, include:
- `cursor.json` with `"maxLineLength": 100`
- `"preferTabs": false`
- `"tabWidth": 2`
### 3.2 Copilot Instructions
- No `.github/copilot-instructions.md` found. If you create one, place:
- `rules` section outlining PR checklist.
- `codeowners` snippet if needed.
### 3.3 Commit Message Style
- Use Conventional Commits (`feat:`, `fix:`, `docs:`, etc.).
- Body should explain **why** the change was made, not just **what**.
### 3.4 Dependency Updates
- Run `npm outdated` before any major version bump.
- Update `package-lock.json` and run `npm install` to ensure reproducibility.
---
## 4. Utility Scripts
### 4.1 Clean Build Artifacts
```bash
# Remove generated files
rm -rf dist/ coverage/ node_modules/
```
### 4.2 Reset Lint Cache
```bash
# Clear ESLint cache to force relint
rm -rf .eslintcache
```
### 4.3 Generate Documentation (if used)
```bash
# Assuming JSDoc is configured
jsdoc -c jsdoc.conf.json -r src/ -o docs/
```
---
## 5. FAQ
**Q:** *How do I run a single test without the whole suite?*
**A:** `npm test -- path/to/single.test.js`
**Q:** *Where should I add new utility functions?*
**A:** Place them in `src/utils/` with a descriptive filename and export via `index.js`.
**Q:** *What is the preferred way to handle environment variables?*
**A:** Store them in `.env.local` and access via `process.env.VAR_NAME`. Do not commit `.env*` files.
---
*This document is intended to be the single source of truth for agentic coding interactions within this repository. Keep it updated as tooling or conventions evolve.*