feat(plugin): ship the repo's skills as ccam plugin skills
The repo root already IS the `ccam` plugin root (`"source": "./"`), so the conventional `skills/` dir at the root is the plugin's skills dir — while `.claude/skills/` only loaded for a session whose cwd was inside this checkout. That is useless for a lane working in another repo, which is why `ccam skills install` existed at all. Move all seven skills to `skills/`: they now reach every plugin user as `/ccam:<name>` (bare `/<name>` as an alias). `ccam skills install` stays as the fallback for a plain checkout without the plugin, sourcing from the new path. Agents deliberately do NOT move. A plugin agent is addressed as `ccam:qc-local`, which would break the `subagent_type: qc-local` references in ship-feature-lane; `ccam lanes agents install` keeps writing them into the lane's own `.claude/agents/`, the highest-priority agent source. MCP was already plugin-shipped via `plugins/ccam/.mcp.json`. Mechanical fallout: ~115 source files carry a doc-comment pointer to `.claude/skills/file-headers/`, repointed to `skills/file-headers/`. The generic Claude Code config-surface examples in openapi/cc-config (`.claude/ skills/code-reviewer`) describe any user's layout and are left alone. Also fixes the two file-headers scripts, whose `ROOT=` climbed four levels from `.claude/skills/file-headers/scripts/` and would have escaped the repo from the new depth — it scanned sibling projects until corrected to three. npm run test:server (1160 pass), test:client (422 pass), mcp:typecheck, mcp:build + mcp:check-build all green.
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
---
|
||||
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 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
|
||||
`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 skills/file-headers/scripts/check-headers-pr.sh origin/master HEAD
|
||||
```
|
||||
Reference in New Issue
Block a user