Skip to content

Commit 05052a3

Browse files
committed
chore: Added CLAUDE skills to fix dependency versions and related principles
1 parent 5093bd5 commit 05052a3

File tree

5 files changed

+255
-107
lines changed

5 files changed

+255
-107
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
name: dependency-management
3+
description: |
4+
Enforces fixed version dependency installation across all package managers. Ensures reproducible builds, supply chain security, and stability.
5+
Use when: installing packages, updating dependencies, working with package.json/requirements.txt/go.mod/Cargo.toml/pom.xml/build.gradle/composer.json/Gemfile/.csproj, reviewing dependency configurations, configuring CI/CD pipelines
6+
---
7+
8+
# Dependency Management
9+
10+
## Basic Principles
11+
12+
### Always Use Exact Versions
13+
14+
- Use exact versions only: `package@1.2.3`
15+
- Forbid: `^1.2.3`, `~1.2.3`, `latest`, `*`, version ranges
16+
- Exception: Library peerDependencies only
17+
18+
### Lock Files Are Mandatory
19+
20+
- Always commit to version control
21+
- Forbid manual editing
22+
- CI/CD must use frozen/locked mode
23+
24+
### Security Audit First
25+
26+
- Check vulnerabilities before installation
27+
- Automate regular audits
28+
29+
## Installation Commands
30+
31+
```bash
32+
# Node.js
33+
npm install --save-exact package@1.2.3
34+
pnpm add --save-exact package@1.2.3
35+
yarn add --exact package@1.2.3
36+
37+
# Python
38+
pip install package==1.2.3
39+
poetry add package@1.2.3
40+
41+
# Go
42+
go get package@v1.2.3
43+
44+
# Rust
45+
cargo add package@=1.2.3
46+
47+
# PHP
48+
composer require vendor/package:1.2.3
49+
50+
# Ruby (Gemfile)
51+
gem 'package', '1.2.3'
52+
53+
# Java/Kotlin
54+
implementation("group:artifact:1.2.3") # Gradle
55+
<version>1.2.3</version> # Maven
56+
57+
# .NET
58+
dotnet add package PackageName --version 1.2.3
59+
```
60+
61+
## CI/CD Commands
62+
63+
```bash
64+
npm ci # npm
65+
pnpm install --frozen-lockfile # pnpm
66+
yarn install --frozen-lockfile # yarn
67+
poetry install --no-update # poetry
68+
go mod verify # go
69+
cargo build --locked # rust
70+
composer install --no-update # php
71+
bundle install --frozen # ruby
72+
dotnet restore --locked-mode # .NET
73+
```
74+
75+
## Common Mistakes
76+
77+
| ❌ Wrong | ✅ Correct |
78+
| ------------------------ | ------------------------------ |
79+
| `npm install` (CI) | `npm ci` |
80+
| `package@latest` | `package@1.2.3` |
81+
| `package@^1.2.3` | `package@1.2.3` |
82+
| Lock file in .gitignore | Commit lock file |
83+
| Manual lock file editing | Regenerate via package manager |

src/extension/package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,22 @@
1111
"test:ci": "jest --ci --coverage --watchAll=false"
1212
},
1313
"devDependencies": {
14-
"@jest/globals": "^30.1.2",
15-
"@types/jest": "^30.0.0",
14+
"@jest/globals": "30.1.2",
15+
"@types/jest": "30.0.0",
1616
"@types/node": "24.3.0",
17-
"@types/vscode": "^1.90.0",
17+
"@types/vscode": "1.90.0",
1818
"eslint": "9.37.0",
1919
"eslint-plugin-import": "2.32.0",
2020
"eslint-plugin-perfectionist": "4.15.1",
21-
"jest": "^30.1.3",
22-
"ts-jest": "^29.4.1",
21+
"jest": "30.1.3",
22+
"ts-jest": "29.4.1",
2323
"typescript": "5.9.2",
2424
"typescript-eslint": "8.46.0"
2525
},
2626
"dependencies": {
27-
"@indic-transliteration/sanscript": "^1.3.3",
28-
"convert-layout": "^0.11.1",
29-
"tiny-pinyin": "^1.3.2",
30-
"wanakana": "^5.3.1"
27+
"@indic-transliteration/sanscript": "1.3.3",
28+
"convert-layout": "0.11.1",
29+
"tiny-pinyin": "1.3.2",
30+
"wanakana": "5.3.1"
3131
}
3232
}

src/extension/yarn.lock

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@
388388
resolved "https://registry.yarnpkg.com/@indic-transliteration/common_maps/-/common_maps-1.0.5.tgz#a63e653fbf6e15e8152086044e1bae2c24c1f3ee"
389389
integrity sha512-XbWDA5AXGE+Nh4uGr/yN9ZM8avRBy4F1KQL+DLgQGOdsQ390lcW4fga0NSjg4C/rOpMd0rHZv2YFV3Bq3UbpkQ==
390390

391-
"@indic-transliteration/sanscript@^1.3.3":
391+
"@indic-transliteration/sanscript@1.3.3":
392392
version "1.3.3"
393393
resolved "https://registry.yarnpkg.com/@indic-transliteration/sanscript/-/sanscript-1.3.3.tgz#2d70995b8efde50035cd89b0b33516c0e8d8b568"
394394
integrity sha512-zNGeARmQTPIlubwgEhl/JumpwTPHrdT/cNsQeCL+G67SQmjJe3qRnMIYghXiVt7+KDso/pU1Ky2ZfD/RBISfJQ==
@@ -517,7 +517,7 @@
517517
resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc"
518518
integrity sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==
519519

520-
"@jest/globals@30.1.2", "@jest/globals@^30.1.2":
520+
"@jest/globals@30.1.2":
521521
version "30.1.2"
522522
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-30.1.2.tgz#821cad7d8ef3dc145979088bb0bfbc1f81a5d8ce"
523523
integrity sha512-teNTPZ8yZe3ahbYnvnVRDeOjr+3pu2uiAtNtrEsiMjVPPj+cXd5E/fr8BL7v/T7F31vYdEHrI5cC/2OoO/vM9A==
@@ -806,7 +806,7 @@
806806
dependencies:
807807
"@types/istanbul-lib-report" "*"
808808

809-
"@types/jest@^30.0.0":
809+
"@types/jest@30.0.0":
810810
version "30.0.0"
811811
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-30.0.0.tgz#5e85ae568006712e4ad66f25433e9bdac8801f1d"
812812
integrity sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==
@@ -843,10 +843,10 @@
843843
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
844844
integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
845845

846-
"@types/vscode@^1.90.0":
847-
version "1.103.0"
848-
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.103.0.tgz#4a0d9777d952992c9ebdbe8dad067032d2fbc1fb"
849-
integrity sha512-o4hanZAQdNfsKecexq9L3eHICd0AAvdbLk6hA60UzGXbGH/q8b/9xv2RgR7vV3ZcHuyKVq7b37IGd/+gM4Tu+Q==
846+
"@types/vscode@1.90.0":
847+
version "1.90.0"
848+
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.90.0.tgz#c122384d51bd774cec4aa86ca443858adc9edef2"
849+
integrity sha512-oT+ZJL7qHS9Z8bs0+WKf/kQ27qWYR3trsXpq46YDjFqBsMLG4ygGGjPaJ2tyrH0wJzjOEmDyg9PDJBBhWg9pkQ==
850850

851851
"@types/yargs-parser@*":
852852
version "21.0.3"
@@ -1443,7 +1443,7 @@ concat-map@0.0.1:
14431443
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
14441444
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
14451445

1446-
convert-layout@^0.11.1:
1446+
convert-layout@0.11.1:
14471447
version "0.11.1"
14481448
resolved "https://registry.yarnpkg.com/convert-layout/-/convert-layout-0.11.1.tgz#823bd72268e1a959f2433348a44a9c7185bba22e"
14491449
integrity sha512-Zy+yE2AqFZUYZxvwS/He7DmnwEahGdy/GyiM33YdxoixyI1YZCYYup2OEYnrhn5r34L9YRa+PZC2ooVmQHY9oQ==
@@ -2868,7 +2868,7 @@ jest-worker@30.1.0:
28682868
merge-stream "^2.0.0"
28692869
supports-color "^8.1.1"
28702870

2871-
jest@^30.1.3:
2871+
jest@30.1.3:
28722872
version "30.1.3"
28732873
resolved "https://registry.yarnpkg.com/jest/-/jest-30.1.3.tgz#c962290f65c32d44a0624f785b2d780835525a23"
28742874
integrity sha512-Ry+p2+NLk6u8Agh5yVqELfUJvRfV51hhVBRIB5yZPY7mU0DGBmOuFG5GebZbMbm86cdQNK0fhJuDX8/1YorISQ==
@@ -3735,7 +3735,7 @@ test-exclude@^6.0.0:
37353735
glob "^7.1.4"
37363736
minimatch "^3.0.4"
37373737

3738-
tiny-pinyin@^1.3.2:
3738+
tiny-pinyin@1.3.2:
37393739
version "1.3.2"
37403740
resolved "https://registry.yarnpkg.com/tiny-pinyin/-/tiny-pinyin-1.3.2.tgz#ce31f0f3afc2a80ee9df708fc7f4e914854d534a"
37413741
integrity sha512-uHNGu4evFt/8eNLldazeAM1M8JrMc1jshhJJfVRARTN3yT8HEEibofeQ7QETWQ5ISBjd6fKtTVBCC/+mGS6FpA==
@@ -3762,7 +3762,7 @@ ts-api-utils@^2.1.0:
37623762
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
37633763
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
37643764

3765-
ts-jest@^29.4.1:
3765+
ts-jest@29.4.1:
37663766
version "29.4.1"
37673767
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.1.tgz#42d33beb74657751d315efb9a871fe99e3b9b519"
37683768
integrity sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==
@@ -3957,7 +3957,7 @@ walker@^1.0.8:
39573957
dependencies:
39583958
makeerror "1.0.12"
39593959

3960-
wanakana@^5.3.1:
3960+
wanakana@5.3.1:
39613961
version "5.3.1"
39623962
resolved "https://registry.yarnpkg.com/wanakana/-/wanakana-5.3.1.tgz#e20798fb9687d926d4aad25874bc8e66096818ed"
39633963
integrity sha512-OSDqupzTlzl2LGyqTdhcXcl6ezMiFhcUwLBP8YKaBIbMYW1wAwDvupw2T9G9oVaKT9RmaSpyTXjxddFPUcFFIw==

src/web-view/package.json

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,39 @@
1010
"preview": "vite preview"
1111
},
1212
"dependencies": {
13-
"@dnd-kit/core": "^6.3.1",
14-
"@dnd-kit/sortable": "^10.0.0",
15-
"@dnd-kit/utilities": "^3.2.2",
16-
"@radix-ui/react-checkbox": "^1.3.3",
17-
"@radix-ui/react-dialog": "^1.1.15",
18-
"@radix-ui/react-label": "^2.1.7",
19-
"@radix-ui/react-radio-group": "^1.3.8",
20-
"@radix-ui/react-slot": "^1.2.3",
21-
"@radix-ui/react-tooltip": "^1.2.8",
22-
"@tailwindcss/vite": "^4.1.13",
23-
"class-variance-authority": "^0.7.1",
24-
"clsx": "^2.1.1",
25-
"lucide-react": "^0.544.0",
26-
"react": "^19.1.1",
27-
"react-dom": "^19.1.1",
28-
"tailwind-merge": "^3.3.1",
29-
"tailwindcss": "^4.1.13"
13+
"@dnd-kit/core": "6.3.1",
14+
"@dnd-kit/sortable": "10.0.0",
15+
"@dnd-kit/utilities": "3.2.2",
16+
"@radix-ui/react-checkbox": "1.3.3",
17+
"@radix-ui/react-dialog": "1.1.15",
18+
"@radix-ui/react-label": "2.1.7",
19+
"@radix-ui/react-radio-group": "1.3.8",
20+
"@radix-ui/react-slot": "1.2.3",
21+
"@radix-ui/react-tooltip": "1.2.8",
22+
"@tailwindcss/vite": "4.1.13",
23+
"class-variance-authority": "0.7.1",
24+
"clsx": "2.1.1",
25+
"lucide-react": "0.544.0",
26+
"react": "19.1.1",
27+
"react-dom": "19.1.1",
28+
"tailwind-merge": "3.3.1",
29+
"tailwindcss": "4.1.13"
3030
},
3131
"devDependencies": {
32-
"@eslint/js": "^9.33.0",
33-
"@types/react": "^19.1.10",
34-
"@types/react-dom": "^19.1.7",
35-
"@vitejs/plugin-react": "^5.0.0",
32+
"@eslint/js": "9.33.0",
33+
"@types/react": "19.1.10",
34+
"@types/react-dom": "19.1.7",
35+
"@vitejs/plugin-react": "5.0.0",
3636
"eslint": "9.37.0",
3737
"eslint-plugin-import": "2.32.0",
3838
"eslint-plugin-perfectionist": "4.15.1",
3939
"eslint-plugin-react": "7.37.5",
4040
"eslint-plugin-react-hooks": "7.0.0",
4141
"eslint-plugin-react-refresh": "0.4.23",
42-
"globals": "^16.3.0",
43-
"tw-animate-css": "^1.3.8",
42+
"globals": "16.3.0",
43+
"tw-animate-css": "1.3.8",
4444
"typescript": "~5.8.3",
4545
"typescript-eslint": "8.46.0",
46-
"vite": "^7.1.11"
46+
"vite": "7.1.11"
4747
}
4848
}

0 commit comments

Comments
 (0)