From b37be36ddc6088110ae4b9ede61d31555a7b2fc9 Mon Sep 17 00:00:00 2001 From: le king fu Date: Mon, 20 Apr 2026 20:44:49 -0400 Subject: [PATCH] chore(claude): add project rules and release skill, ignore local state Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/rules/changelog.md | 6 ++++ .claude/rules/i18n.md | 7 +++++ .claude/rules/sql-migrations.md | 7 +++++ .claude/skills/release/SKILL.md | 50 +++++++++++++++++++++++++++++++++ .gitignore | 5 ++++ 5 files changed, 75 insertions(+) create mode 100644 .claude/rules/changelog.md create mode 100644 .claude/rules/i18n.md create mode 100644 .claude/rules/sql-migrations.md create mode 100644 .claude/skills/release/SKILL.md diff --git a/.claude/rules/changelog.md b/.claude/rules/changelog.md new file mode 100644 index 0000000..214a7a3 --- /dev/null +++ b/.claude/rules/changelog.md @@ -0,0 +1,6 @@ +--- +paths: ["src/**", "src-tauri/**"] +--- +Tout changement affectant le comportement utilisateur doit avoir une entree sous `## [Unreleased]` dans `CHANGELOG.md`. +Categories : Added, Changed, Fixed, Removed. Format Keep a Changelog. +Le contenu est extrait par le CI pour les release notes et affiche dans l'app. diff --git a/.claude/rules/i18n.md b/.claude/rules/i18n.md new file mode 100644 index 0000000..d17bfa8 --- /dev/null +++ b/.claude/rules/i18n.md @@ -0,0 +1,7 @@ +--- +paths: ["**/*.tsx", "**/*.ts"] +--- +Toute chaine visible par l'utilisateur doit passer par i18n (react-i18next). +Fichiers : `src/i18n/locales/fr.json` et `src/i18n/locales/en.json`. +Jamais de texte en dur dans les composants React. +Toujours ajouter la cle dans les DEUX langues. diff --git a/.claude/rules/sql-migrations.md b/.claude/rules/sql-migrations.md new file mode 100644 index 0000000..97ae1f3 --- /dev/null +++ b/.claude/rules/sql-migrations.md @@ -0,0 +1,7 @@ +--- +paths: ["**/migrations/**", "**/*.sql", "**/lib.rs"] +--- +Ne JAMAIS modifier une migration SQL existante. Toujours creer une nouvelle migration. +Les checksums sont verifies au demarrage (SHA-384 dans `_sqlx_migrations`). +Les migrations sont inline dans `lib.rs` via `tauri_plugin_sql::Migration`. +Le schema consolide (`consolidated_schema.sql`) sert uniquement pour les nouveaux profils. diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md new file mode 100644 index 0000000..4fe16f1 --- /dev/null +++ b/.claude/skills/release/SKILL.md @@ -0,0 +1,50 @@ +--- +name: release +description: Release a new version of Simpl-Resultat (bump, changelog, tag, push) +user-invocable: true +updated: 2026-04-19 +--- + +# /release — Release Simpl-Resultat + +## Context injection + +1. Lire version dans `src-tauri/Cargo.toml` et `package.json` +2. Lister les derniers tags : `git tag --sort=-v:refname | head -10` +3. Lire `CHANGELOG.md` et `CHANGELOG.fr.md` (dernieres entrees) + +## Workflow + +1. Determiner la nouvelle version (argument utilisateur ou demander) +2. Bump version dans les 5 fichiers : + - `src-tauri/Cargo.toml` (ligne `version = "..."`) + - `src-tauri/Cargo.lock` (bloc `[[package]] name = "simpl-result"` + sa ligne `version = "..."` ; ne PAS regenerer avec cargo) + - `src-tauri/tauri.conf.json` (champ `"version"`) + - `package.json` (champ `"version"`) + - `package-lock.json` (deux champs `"version"` — root ~ligne 3 et le package racine `""` ~ligne 9) + - Si `package-lock.json` est stale (hygiene warning `package-lock.json plus ancien que package.json`) : `npm install --package-lock-only --no-audit --no-fund` pour resync. Note : peut ajouter des entrees bundled optionnelles (tailwindcss oxide wasm etc.) — cosmetique, pas d'install effective. +3. Mettre a jour les 2 changelogs — format **Keep a Changelog** : + - `CHANGELOG.md` (EN) + - `CHANGELOG.fr.md` (FR) + - Pattern de migration : transformer `## [Unreleased]` en `## [X.Y.Z] - YYYY-MM-DD`, puis **recreer une section `## [Unreleased]` vide au-dessus** pour accueillir les prochaines entrees. Ne pas deplacer le contenu — les sections sont laissees en place. +4. Si changement d'architecture : mettre a jour `docs/architecture.md` +5. Commit : `chore: release vX.Y.Z` (ajouter les 7 fichiers : 5 bumps + 2 changelogs) +6. Tag annote (permet une release notes par tag, lisible via `git show vX.Y.Z`) : + ``` + git tag -a vX.Y.Z -m "Release X.Y.Z + + - " + ``` +7. Push : `git push origin main && git push origin vX.Y.Z` +8. Forgejo CI build automatique (Windows + Linux) via `release.yml` sur `on: push: tags: v*` + +## Regles + +- **JAMAIS `git push --tags`** — toujours push le tag individuellement +- Toujours mettre a jour les **2 changelogs** (EN + FR) +- Format Keep a Changelog : `## [X.Y.Z] - YYYY-MM-DD` +- Les changelogs sont bundles dans `public/` pour l'affichage in-app +- Tag **annote** (`-a`), pas lightweight : les artefacts CI reference le tag pour les release notes + +## Changelog +- 2026-04-19 — Added Cargo.lock + package-lock.json to bump list, `npm install --package-lock-only` fallback when lockfile stale, explicit `[Unreleased]` migration pattern, annotated tags (#102/#112 release cycle) diff --git a/.gitignore b/.gitignore index a98c5e9..de2383f 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,8 @@ public/CHANGELOG.fr.md # Tauri generated src-tauri/gen/ + +# Claude Code local state +.claude/settings.local.json +.claude/scheduled_tasks.lock +.claude/worktrees/