## Commit Policy

Default behavior: create a git commit after a task is completed and verified.

- Use selective staging only for files related to the task.
- Never stage `.env`, build output, dependency directories, logs, temp files, or unrelated user changes.
- If unrelated changes are present, leave them unstaged and commit only the files from the completed task.
- If a required file has mixed user changes and task changes that cannot be safely separated, stop and ask the user before committing.
- Use Conventional Commit messages such as `fix(api): ...`, `feat(web): ...`, `docs(agent): ...`, or `chore(repo): ...`.
- After committing, run `git status --short` and `git log --oneline -3`.

## Pre-Work Checklist

ก่อนเริ่มแก้ไฟล์ทุกครั้ง:

```sh
git status --short
```

หลักการ:

- ถ้า working tree ไม่สะอาด ให้แยกให้ออกว่าเป็นงานเดิมของผู้ใช้หรือของ agent
- ห้าม revert หรือ overwrite งานที่ไม่ได้ทำเอง
- ถ้ามี unrelated changes ให้ไม่ stage ปน
- ถ้าไฟล์ที่ต้องแก้มี user changes อยู่แล้ว ให้ทำงานร่วมกับเนื้อหาปัจจุบัน ไม่ย้อนกลับไฟล์

Full repository sanity:

```sh
git status --short --ignored
```

Secret scan แบบเร็ว:

```sh
rg -n --hidden --glob '!target/**' --glob '!.git/**' --glob '!web/node_modules/**' "(DATABASE_URL=.*:.*@|POSTGRES_PASSWORD=.+|secret|token|api[_-]?key|PRIVATE KEY|BEGIN RSA|postgresql://[^\\s]+:[^\\s]+@)" .
```

## Staging Rules

ใช้ selective staging:

```sh
git add <file-or-directory>
git diff --cached --stat
git diff --cached
```

ใช้ Conventional Commit:

```txt
<type>(<scope>): <summary>
```

Types ที่ใช้บ่อย:

- `feat`: เพิ่ม behavior หรือ capability ใหม่
- `fix`: แก้ bug
- `docs`: แก้เอกสารเท่านั้น
- `chore`: งาน repo/config/tooling
- `refactor`: เปลี่ยนโครงสร้างโดยไม่เปลี่ยน behavior
- `test`: เพิ่มหรือแก้ test

Scopes ที่แนะนำ:

- `api`
- `web`
- `docs`
- `agent`
- `phase1`, `phase2`, `phase3`, ...
- `repo`

ตัวอย่าง:

```txt
feat(phase3): add read-only sales SQL endpoints
docs(agent): add git commit workflow
chore(repo): tighten gitignore safety rules
fix(api): hide raw database errors
```

## Commit Body

เพิ่ม body เมื่อ commit มีผลกระทบหรือข้อจำกัดที่ควรรู้:

```txt
feat(phase3): add read-only sales SQL endpoints

- add validated query filters for date, shops, sale modes, limit, offset
- execute SQL through mysql_async prepared positional params
- document summary SQL assumption for dummyrpdorderdetail.ShopID

Verification:
- cargo fmt --all
- cargo check
```

## Post-Commit Checklist

หลัง commit:

```sh
git status --short
git log --oneline -3
```

ผลลัพธ์ที่คาดหวัง:

- working tree สะอาด หรือเหลือเฉพาะไฟล์ที่ตั้งใจไม่ commit
- commit ล่าสุดมี message ตรงกับ scope งาน

