---
name: file-headers
description: MANDATORY for every coding agent (Claude Code, Codex, or any other) on every change-set — every applicable source file the agent creates or updates MUST start with the project's copyright/authorship header (file overview + exact author line). Use automatically whenever writing a new file or editing an existing one; do not wait to be asked. Covers JS/TS/TSX/CJS/MJS, Python, shell, and CSS. Includes the audit script to verify repo-wide compliance.
---

# File Headers — Copyright Comment + File Overview

Every applicable source file in this repository starts with a header comment
containing a **file overview** and the **exact author line**:

```
@author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
```

The name and email must be exactly as above — no variations, no substitutions,
no other names. This applies to **every coding agent** working in this repo
(Claude Code, Codex, or any other tool): when you **create** a new applicable
file, write the header first; when you **update** an existing applicable file
that is missing the header, add it as part of the same change.

## Applicable files

| Included | Excluded |
| -------- | -------- |
| `*.js`, `*.ts`, `*.tsx`, `*.cjs`, `*.mjs` | anything under `node_modules/`, `dist/`, `build/`, `data/` |
| `*.py`, `*.sh` | vendored/minified files (`*.min.js`) |
| `*.css` | generated files (they carry their own AUTO-GENERATED banner) |
| | snapshots (`__snapshots__/`), lockfiles, JSON/YAML/Markdown |

## Header formats by file type

**JS / TS / TSX — server & scripts style** (overview inline in `@file`):

```js
/**
 * @file One-to-few-sentence overview of what this file does and why it
 * exists. Mention the key contracts or invariants the file owns.
 * @author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
 */
```

**JS / TS / TSX — client style** (`@file` name + `@description` overview), used
under `client/src/`:

```ts
/**
 * @file ComponentName.tsx
 * @description What the component/module renders or provides and how it fits
 * into the app.
 * @author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
 */
```

**CSS** (same block-comment shape as `client/src/index.css`):

```css
/**
 * @file file.css
 * @description What these styles cover.
 * @author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
 */
```

**Shell** (`#` block right after the shebang; existing overview comments count —
just make sure the `@author` line is in the block):

```bash
#!/usr/bin/env bash
# script-name.sh — what the script does, one to few lines.
# @author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
```

**Python** (inside the module docstring):

```python
"""
module.py — what the module does.

@author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>
"""
```

## Rules

1. **New file → header first.** Any applicable file you create starts with the
   header before any code (after the shebang for scripts).
2. **Touched file missing header → add it.** If you edit a file that lacks the
   header, add one in the same commit. Write a real overview — describe what
   the file actually does; never a placeholder like "TODO" or "utility file".
3. **Exact author line.** `@author Nguyễn Ngọc Trí Vĩ <vinnt@smartgift.vn>` —
   byte-exact, in every file type (shell and Python use it inside `#` / docstring
   comments).
4. **Don't churn existing headers.** If a file already has a compliant header,
   leave it alone unless the file's purpose changed (then update the overview).
5. **Overviews must stay truthful.** When an edit changes what a file does,
   update its `@file`/`@description` overview in the same change.

## Audit

Run the bundled checker to list any applicable file missing the header:

```bash
bash .claude/skills/file-headers/scripts/check-headers.sh
```

Exit code `0` = fully compliant; `1` = the printed files are missing headers.
Run it before finishing any change-set that adds files, and during reviews.

On every pull request, GitHub Actions runs
`.claude/skills/file-headers/scripts/check-headers-pr.sh` against only the
files changed in the PR diff (added, copied, renamed, or modified). Test locally
before pushing:

```bash
bash .claude/skills/file-headers/scripts/check-headers-pr.sh origin/master HEAD
```
