@haus-tech/haus-workflow 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.3.0...v0.4.0) (2026-05-28)
4
+
5
+ ### Features
6
+
7
+ * **scanner:** detect react-router-v7, tailwind, shadcn; rename typescript6 → typescript5 (T8-T11) ([d98d813](https://github.com/WeAreHausTech/haus-workflow/commit/d98d813c7e52df68ae7f55ceb23bd9016e2d8308))
8
+
9
+ ## [0.3.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.2.2...v0.3.0) (2026-05-28)
10
+
11
+ ### Features
12
+
13
+ * **catalog:** allow vitest, jest, and redis tags ([ea08ab6](https://github.com/WeAreHausTech/haus-workflow/commit/ea08ab6cbd66a80bbcb94ce99c5d338dbaefc184))
14
+ * **scanner:** detect elementor, ACF/JetEngine, redis (T5-T7) ([262925c](https://github.com/WeAreHausTech/haus-workflow/commit/262925c02e695e9469c9c1ee4e9c03c87f9e1478))
15
+ * **scanner:** detect vitest and jest (T3, T4) ([1b917af](https://github.com/WeAreHausTech/haus-workflow/commit/1b917af88d10c8ca443dd8d6c9b5fe3b27a850fa))
16
+
3
17
  ## [0.2.2](https://github.com/WeAreHausTech/haus-workflow/compare/v0.2.1...v0.2.2) (2026-05-28)
4
18
 
5
19
  ### Bug Fixes
package/dist/cli.js CHANGED
@@ -1418,6 +1418,7 @@ function detectRoles(deps, files) {
1418
1418
  if (deps.includes("next") || files.some((f) => f.includes("next.config."))) roles.add("next-app");
1419
1419
  if (deps.includes("react")) roles.add("react-app");
1420
1420
  if (deps.includes("vite") || files.some((f) => f.includes("vite.config."))) roles.add("vite-app");
1421
+ if (deps.includes("react-router") && deps.includes("@react-router/node")) roles.add("react-router-app");
1421
1422
  if (deps.includes("@vendure/core")) roles.add("vendure-app");
1422
1423
  if (deps.some((d) => d.startsWith("@haus/vendure-")) || files.some((f) => f.includes("vendure-config")))
1423
1424
  roles.add("vendure-plugin");
@@ -1427,13 +1428,17 @@ function detectRoles(deps, files) {
1427
1428
  if (files.some((f) => f.endsWith("turbo.json"))) roles.add("turbo-monorepo");
1428
1429
  if (files.some((f) => f.endsWith("artisan")) || deps.includes("laravel/framework")) roles.add("laravel-app");
1429
1430
  if (deps.includes("laravel/nova")) roles.add("laravel-nova-app");
1430
- if (files.some((f) => f.endsWith("wp-config.php")) && files.some((f) => f.includes("web/app"))) {
1431
+ const hasWpConfig = files.some((f) => f.endsWith("wp-config.php"));
1432
+ const hasBedrockLayout = files.some((f) => f.includes("web/app")) || deps.includes("roots/wordpress");
1433
+ if (hasWpConfig && hasBedrockLayout) {
1431
1434
  roles.add("wordpress-bedrock-site");
1432
1435
  roles.add("wordpress-site");
1433
- }
1434
- if (files.some((f) => f.endsWith("wp-config.php")) && !files.some((f) => f.includes("web/app"))) {
1436
+ } else if (hasWpConfig) {
1435
1437
  roles.add("wordpress-vanilla-site");
1436
1438
  roles.add("wordpress-site");
1439
+ } else if (deps.includes("roots/wordpress")) {
1440
+ roles.add("wordpress-bedrock-site");
1441
+ roles.add("wordpress-site");
1437
1442
  }
1438
1443
  if (files.some((f) => f.endsWith(".csproj") || f.endsWith(".sln"))) roles.add("dotnet-service");
1439
1444
  if (deps.includes("express")) roles.add("express-service");
@@ -1457,6 +1462,14 @@ async function detectStacks(root, deps, files, packageManager) {
1457
1462
  if (deps.includes("react")) add("frontend", "react19");
1458
1463
  if (deps.includes("vue")) add("frontend", "vue");
1459
1464
  if (deps.includes("vite")) add("frontend", "vite8");
1465
+ if (deps.includes("react-router") && deps.includes("@react-router/node")) add("frontend", "react-router-v7");
1466
+ if (deps.includes("tailwindcss") || files.some((f) => f.includes("tailwind.config."))) {
1467
+ add("frontend", "tailwindcss");
1468
+ }
1469
+ if (files.some((f) => f.endsWith("components.json")) && deps.includes("class-variance-authority")) {
1470
+ add("frontend", "shadcn");
1471
+ }
1472
+ if (deps.includes("typescript")) add("tooling", "typescript5");
1460
1473
  if (deps.includes("@vendure/core")) add("backend", "vendure3");
1461
1474
  if (deps.includes("@nestjs/core")) add("backend", "nestjs");
1462
1475
  if (await hasNeedle(root, files, "NestFactory")) add("backend", "nestjs");
@@ -1465,17 +1478,31 @@ async function detectStacks(root, deps, files, packageManager) {
1465
1478
  if (files.some((f) => f.endsWith(".graphql") || f.endsWith("schema.graphql"))) add("backend", "graphql");
1466
1479
  if (deps.includes("laravel/framework")) add("backend", "laravel");
1467
1480
  if (files.some((f) => f.includes("app/Providers/") || f.includes("routes/"))) add("backend", "laravel");
1468
- if (files.some((f) => f.endsWith("wp-config.php"))) add("backend", "wordpress");
1481
+ if (files.some((f) => f.endsWith("wp-config.php")) || deps.includes("roots/wordpress")) add("backend", "wordpress");
1482
+ if (deps.includes("wpackagist-plugin/elementor") || deps.includes("wearehaus/elementor-pro") || deps.includes("wpackagist-theme/hello-elementor")) {
1483
+ add("backend", "elementor");
1484
+ }
1485
+ if (deps.includes("wearehaus/advanced-custom-fields-pro") || deps.includes("wpackagist-plugin/advanced-custom-fields")) {
1486
+ add("backend", "acf-pro");
1487
+ }
1488
+ if (deps.includes("wearehaus/jet-engine")) add("backend", "jetengine");
1489
+ if (deps.includes("wearehaus/jet-smart-filters")) add("backend", "jetsmartfilters");
1490
+ if (deps.includes("wearehaus/gravityforms")) add("backend", "gravityforms");
1469
1491
  if (files.some((f) => f.endsWith(".csproj") || f.endsWith(".sln"))) add("backend", "dotnet");
1470
1492
  if (deps.includes("@playwright/test")) add("testing", "playwright");
1471
1493
  if (files.some((f) => f.includes(".storybook"))) add("testing", "storybook");
1472
1494
  if (deps.some((d) => d.startsWith("@testing-library/"))) add("testing", "testing-library");
1473
1495
  if (files.some((f) => f.endsWith("phpunit.xml"))) add("testing", "phpunit");
1474
1496
  if (deps.some((d) => d.startsWith("@storybook/"))) add("testing", "storybook");
1497
+ if (deps.includes("vitest")) add("testing", "vitest");
1498
+ if (deps.includes("jest") || deps.includes("jest-environment-jsdom")) add("testing", "jest");
1475
1499
  if (deps.includes("pg")) add("databases", "postgresql");
1476
1500
  if (deps.includes("mariadb") || deps.includes("mysql2")) add("databases", "mariadb");
1477
1501
  if (deps.includes("mssql")) add("databases", "mssql");
1478
1502
  if (deps.includes("@elastic/elasticsearch")) add("databases", "elasticsearch");
1503
+ if (deps.includes("predis/predis") || deps.includes("ioredis") || deps.includes("redis")) {
1504
+ add("databases", "redis");
1505
+ }
1479
1506
  if (await hasNeedle(root, files, "openid")) add("auth", "oidc");
1480
1507
  if (await hasNeedle(root, files, "AZURE_AD")) add("auth", "azure-ad");
1481
1508
  if (await hasNeedle(root, files, "BANKID")) add("auth", "bankid");
@@ -28,7 +28,7 @@
28
28
  "turbo",
29
29
  "nextjs",
30
30
  "react19",
31
- "typescript6",
31
+ "typescript5",
32
32
  "vite8",
33
33
  "tanstack-query",
34
34
  "tanstack-router",
@@ -68,6 +68,9 @@
68
68
  "testing-library",
69
69
  "phpunit",
70
70
  "storybook",
71
- "wisest"
71
+ "wisest",
72
+ "vitest",
73
+ "jest",
74
+ "redis"
72
75
  ]
73
76
  }
@@ -107,12 +107,12 @@
107
107
  "installMode": "copy-selected"
108
108
  },
109
109
  {
110
- "id": "haus.typescript6-patterns",
111
- "version": "1.0.0",
110
+ "id": "haus.typescript5-patterns",
111
+ "version": "1.1.0",
112
112
  "source": "haus",
113
113
  "type": "skill",
114
- "path": "skills/typescript6-patterns",
115
- "title": "Haus TypeScript patterns",
114
+ "path": "skills/typescript5-patterns",
115
+ "title": "Haus TypeScript 5 patterns",
116
116
  "purpose": "Guide TypeScript contract and migration-safe typing changes.",
117
117
  "whenToUse": "Use for shared types, DTOs, interface boundaries, and type-safe refactors.",
118
118
  "whenNotToUse": "Do not use for runtime-only changes without type-contract impact.",
@@ -137,6 +137,9 @@
137
137
  "shared-package"
138
138
  ],
139
139
  "requiresAny": [
140
+ {
141
+ "stack": "typescript5"
142
+ },
140
143
  {
141
144
  "stack": "typescript"
142
145
  },
@@ -188,6 +191,47 @@
188
191
  "tokenEstimate": 1800,
189
192
  "installMode": "copy-selected"
190
193
  },
194
+ {
195
+ "id": "haus.react-router-v7-patterns",
196
+ "version": "1.0.0",
197
+ "source": "haus",
198
+ "type": "skill",
199
+ "path": "skills/react-router-v7-patterns",
200
+ "title": "Haus React Router v7 patterns",
201
+ "purpose": "Guide React Router v7 SSR route, loader, and action boundary changes.",
202
+ "whenToUse": "Use for routes, loaders, actions, and SSR config in React Router v7 apps.",
203
+ "whenNotToUse": "Do not use for Next.js App Router or Remix v1 codebases.",
204
+ "references": [
205
+ "references/conventions.md",
206
+ "references/scope.md",
207
+ "references/workflow.md",
208
+ "https://reactrouter.com/start/framework/installation"
209
+ ],
210
+ "tokenBudget": 1200,
211
+ "tags": [
212
+ "frontend",
213
+ "react",
214
+ "typescript"
215
+ ],
216
+ "repoRoles": [
217
+ "react-router-app",
218
+ "react-app"
219
+ ],
220
+ "requiresAny": [
221
+ {
222
+ "stack": "react-router-v7"
223
+ },
224
+ {
225
+ "role": "react-router-app"
226
+ },
227
+ {
228
+ "dependency": "@react-router/node"
229
+ }
230
+ ],
231
+ "ecosystem": "react",
232
+ "tokenEstimate": 2000,
233
+ "installMode": "copy-selected"
234
+ },
191
235
  {
192
236
  "id": "haus.vendure-plugin-patterns",
193
237
  "version": "1.0.0",
@@ -521,7 +565,7 @@
521
565
  "tags": [
522
566
  "nestjs",
523
567
  "graphql",
524
- "typescript6"
568
+ "typescript5"
525
569
  ],
526
570
  "repoRoles": [
527
571
  "nestjs-api"
@@ -663,7 +707,7 @@
663
707
  },
664
708
  {
665
709
  "id": "haus.radix-shadcn-patterns",
666
- "version": "1.0.0",
710
+ "version": "1.1.0",
667
711
  "source": "haus",
668
712
  "type": "skill",
669
713
  "path": "skills/radix-shadcn-patterns",
@@ -689,6 +733,9 @@
689
733
  "react-app"
690
734
  ],
691
735
  "requiresAny": [
736
+ {
737
+ "stack": "shadcn"
738
+ },
692
739
  {
693
740
  "dependency": "@radix-ui/react-dialog"
694
741
  },
@@ -857,7 +904,7 @@
857
904
  },
858
905
  {
859
906
  "id": "haus.wordpress-acf-elementor-jetengine-patterns",
860
- "version": "1.0.0",
907
+ "version": "1.1.0",
861
908
  "source": "haus",
862
909
  "type": "skill",
863
910
  "path": "skills/wordpress-acf-elementor-jetengine-patterns",
@@ -888,6 +935,15 @@
888
935
  },
889
936
  {
890
937
  "stack": "wordpress"
938
+ },
939
+ {
940
+ "stack": "elementor"
941
+ },
942
+ {
943
+ "stack": "acf-pro"
944
+ },
945
+ {
946
+ "stack": "jetengine"
891
947
  }
892
948
  ],
893
949
  "ecosystem": "wordpress",
@@ -967,7 +1023,7 @@
967
1023
  },
968
1024
  {
969
1025
  "id": "haus.database-patterns",
970
- "version": "1.0.0",
1026
+ "version": "1.1.0",
971
1027
  "source": "haus",
972
1028
  "type": "skill",
973
1029
  "path": "skills/database-patterns",
@@ -985,7 +1041,8 @@
985
1041
  "postgresql",
986
1042
  "mariadb",
987
1043
  "mssql",
988
- "elasticsearch"
1044
+ "elasticsearch",
1045
+ "redis"
989
1046
  ],
990
1047
  "repoRoles": [],
991
1048
  "requiresAny": [
@@ -1000,6 +1057,9 @@
1000
1057
  },
1001
1058
  {
1002
1059
  "stack": "elasticsearch"
1060
+ },
1061
+ {
1062
+ "stack": "redis"
1003
1063
  }
1004
1064
  ],
1005
1065
  "tokenEstimate": 1700,
@@ -1078,6 +1138,88 @@
1078
1138
  "installMode": "copy-selected",
1079
1139
  "ecosystem": "testing"
1080
1140
  },
1141
+ {
1142
+ "id": "haus.vitest-patterns",
1143
+ "version": "1.0.0",
1144
+ "source": "haus",
1145
+ "type": "skill",
1146
+ "path": "skills/vitest-patterns",
1147
+ "title": "Haus Vitest patterns",
1148
+ "purpose": "Guide Vitest unit/integration test structure, mocking, and coverage config.",
1149
+ "whenToUse": "Use when writing or modifying Vitest tests in TypeScript/JS frontends and Node services.",
1150
+ "whenNotToUse": "Do not use for Jest, Playwright, or PHPUnit test tasks.",
1151
+ "references": [
1152
+ "references/conventions.md",
1153
+ "references/scope.md",
1154
+ "references/workflow.md",
1155
+ "https://vitest.dev/guide/"
1156
+ ],
1157
+ "tokenBudget": 1200,
1158
+ "tags": [
1159
+ "testing",
1160
+ "vitest",
1161
+ "typescript"
1162
+ ],
1163
+ "repoRoles": [
1164
+ "next-app",
1165
+ "react-app",
1166
+ "vue-app",
1167
+ "vite-app",
1168
+ "vendure-app",
1169
+ "vendure-plugin"
1170
+ ],
1171
+ "requiresAny": [
1172
+ {
1173
+ "stack": "vitest"
1174
+ },
1175
+ {
1176
+ "dependency": "vitest"
1177
+ }
1178
+ ],
1179
+ "tokenEstimate": 1500,
1180
+ "installMode": "copy-selected"
1181
+ },
1182
+ {
1183
+ "id": "haus.jest-patterns",
1184
+ "version": "1.0.0",
1185
+ "source": "haus",
1186
+ "type": "skill",
1187
+ "path": "skills/jest-patterns",
1188
+ "title": "Haus Jest patterns",
1189
+ "purpose": "Guide Jest unit/integration test structure, mocking, and Nx-style setup.",
1190
+ "whenToUse": "Use when writing or modifying Jest tests, including Nx workspace projects.",
1191
+ "whenNotToUse": "Do not use for Vitest, Playwright, or PHPUnit test tasks.",
1192
+ "references": [
1193
+ "references/conventions.md",
1194
+ "references/scope.md",
1195
+ "references/workflow.md",
1196
+ "https://jestjs.io/docs/getting-started"
1197
+ ],
1198
+ "tokenBudget": 1200,
1199
+ "tags": [
1200
+ "testing",
1201
+ "jest",
1202
+ "typescript"
1203
+ ],
1204
+ "repoRoles": [
1205
+ "next-app",
1206
+ "react-app",
1207
+ "nx-monorepo"
1208
+ ],
1209
+ "requiresAny": [
1210
+ {
1211
+ "stack": "jest"
1212
+ },
1213
+ {
1214
+ "dependency": "jest"
1215
+ },
1216
+ {
1217
+ "dependency": "jest-environment-jsdom"
1218
+ }
1219
+ ],
1220
+ "tokenEstimate": 1500,
1221
+ "installMode": "copy-selected"
1222
+ },
1081
1223
  {
1082
1224
  "id": "haus.phpunit-patterns",
1083
1225
  "version": "1.0.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haus-tech/haus-workflow",
3
- "version": "0.2.2",
3
+ "version": "0.4.0",
4
4
  "description": "Haus AI workflow CLI for Claude Code.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -58,11 +58,11 @@
58
58
  "installMode": "copy-selected"
59
59
  },
60
60
  {
61
- "id": "haus.typescript6-patterns",
61
+ "id": "haus.typescript5-patterns",
62
62
  "source": "haus",
63
63
  "type": "skill",
64
- "path": "skills/typescript6-patterns",
65
- "title": "Haus TypeScript patterns",
64
+ "path": "skills/typescript5-patterns",
65
+ "title": "Haus TypeScript 5 patterns",
66
66
  "purpose": "Guide TypeScript contract and migration-safe typing changes.",
67
67
  "whenToUse": "Use for shared types, DTOs, interface boundaries, and type-safe refactors.",
68
68
  "whenNotToUse": "Do not use for runtime-only changes without type-contract impact.",
@@ -78,6 +78,7 @@
78
78
  "shared-package"
79
79
  ],
80
80
  "requiresAny": [
81
+ { "stack": "typescript5" },
81
82
  { "stack": "typescript" },
82
83
  { "dependency": "typescript" }
83
84
  ],
@@ -105,6 +106,28 @@
105
106
  "tokenEstimate": 1800,
106
107
  "installMode": "copy-selected"
107
108
  },
109
+ {
110
+ "id": "haus.react-router-v7-patterns",
111
+ "source": "haus",
112
+ "type": "skill",
113
+ "path": "skills/react-router-v7-patterns",
114
+ "title": "Haus React Router v7 patterns",
115
+ "purpose": "Guide React Router v7 SSR route, loader, and action boundary changes.",
116
+ "whenToUse": "Use for routes, loaders, actions, and SSR config in React Router v7 apps.",
117
+ "whenNotToUse": "Do not use for Next.js App Router or Remix v1 codebases.",
118
+ "references": ["references/scope.md", "references/workflow.md", "https://reactrouter.com/start/framework/installation"],
119
+ "tokenBudget": 1200,
120
+ "tags": ["frontend", "react", "typescript"],
121
+ "repoRoles": ["react-router-app", "react-app"],
122
+ "requiresAny": [
123
+ { "stack": "react-router-v7" },
124
+ { "role": "react-router-app" },
125
+ { "dependency": "@react-router/node" }
126
+ ],
127
+ "ecosystem": "react",
128
+ "tokenEstimate": 2000,
129
+ "installMode": "copy-selected"
130
+ },
108
131
  {
109
132
  "id": "haus.vendure-plugin-patterns",
110
133
  "source": "haus",
@@ -300,7 +323,7 @@
300
323
  "whenNotToUse": "Do not use for REST-only controller tasks.",
301
324
  "references": ["references/scope.md", "references/workflow.md", "https://docs.nestjs.com/"],
302
325
  "tokenBudget": 1200,
303
- "tags": ["nestjs", "graphql", "typescript6"],
326
+ "tags": ["nestjs", "graphql", "typescript5"],
304
327
  "repoRoles": ["nestjs-api"],
305
328
  "requiresAny": [
306
329
  { "stack": "nestjs" },
@@ -391,6 +414,7 @@
391
414
  "tags": ["radix", "shadcn", "react19"],
392
415
  "repoRoles": ["next-app", "react-app"],
393
416
  "requiresAny": [
417
+ { "stack": "shadcn" },
394
418
  { "dependency": "@radix-ui/react-dialog" },
395
419
  { "dependency": "@radix-ui/themes" },
396
420
  { "dependency": "shadcn-ui" },
@@ -501,7 +525,10 @@
501
525
  "requiresAny": [
502
526
  { "role": "wordpress-bedrock-site" },
503
527
  { "role": "wordpress-vanilla-site" },
504
- { "stack": "wordpress" }
528
+ { "stack": "wordpress" },
529
+ { "stack": "elementor" },
530
+ { "stack": "acf-pro" },
531
+ { "stack": "jetengine" }
505
532
  ],
506
533
  "ecosystem": "wordpress",
507
534
  "tokenEstimate": 2600,
@@ -557,13 +584,14 @@
557
584
  "whenNotToUse": "Do not use for UI-only changes without persistence/search impact.",
558
585
  "references": ["references/scope.md", "references/workflow.md"],
559
586
  "tokenBudget": 1200,
560
- "tags": ["postgresql", "mariadb", "mssql", "elasticsearch"],
587
+ "tags": ["postgresql", "mariadb", "mssql", "elasticsearch", "redis"],
561
588
  "repoRoles": [],
562
589
  "requiresAny": [
563
590
  { "stack": "postgresql" },
564
591
  { "stack": "mariadb" },
565
592
  { "stack": "mssql" },
566
- { "stack": "elasticsearch" }
593
+ { "stack": "elasticsearch" },
594
+ { "stack": "redis" }
567
595
  ],
568
596
  "tokenEstimate": 1700,
569
597
  "installMode": "copy-selected"
@@ -610,6 +638,47 @@
610
638
  "tokenEstimate": 1500,
611
639
  "installMode": "copy-selected"
612
640
  },
641
+ {
642
+ "id": "haus.vitest-patterns",
643
+ "source": "haus",
644
+ "type": "skill",
645
+ "path": "skills/vitest-patterns",
646
+ "title": "Haus Vitest patterns",
647
+ "purpose": "Guide Vitest unit/integration test structure, mocking, and coverage config.",
648
+ "whenToUse": "Use when writing or modifying Vitest tests in TypeScript/JS frontends and Node services.",
649
+ "whenNotToUse": "Do not use for Jest, Playwright, or PHPUnit test tasks.",
650
+ "references": ["references/scope.md", "references/workflow.md", "https://vitest.dev/guide/"],
651
+ "tokenBudget": 1200,
652
+ "tags": ["testing", "vitest", "typescript"],
653
+ "repoRoles": ["next-app", "react-app", "vue-app", "vite-app", "vendure-app", "vendure-plugin"],
654
+ "requiresAny": [
655
+ { "stack": "vitest" },
656
+ { "dependency": "vitest" }
657
+ ],
658
+ "tokenEstimate": 1500,
659
+ "installMode": "copy-selected"
660
+ },
661
+ {
662
+ "id": "haus.jest-patterns",
663
+ "source": "haus",
664
+ "type": "skill",
665
+ "path": "skills/jest-patterns",
666
+ "title": "Haus Jest patterns",
667
+ "purpose": "Guide Jest unit/integration test structure, mocking, and Nx-style setup.",
668
+ "whenToUse": "Use when writing or modifying Jest tests, including Nx workspace projects.",
669
+ "whenNotToUse": "Do not use for Vitest, Playwright, or PHPUnit test tasks.",
670
+ "references": ["references/scope.md", "references/workflow.md", "https://jestjs.io/docs/getting-started"],
671
+ "tokenBudget": 1200,
672
+ "tags": ["testing", "jest", "typescript"],
673
+ "repoRoles": ["next-app", "react-app", "nx-monorepo"],
674
+ "requiresAny": [
675
+ { "stack": "jest" },
676
+ { "dependency": "jest" },
677
+ { "dependency": "jest-environment-jsdom" }
678
+ ],
679
+ "tokenEstimate": 1500,
680
+ "installMode": "copy-selected"
681
+ },
613
682
  {
614
683
  "id": "haus.phpunit-patterns",
615
684
  "source": "haus",
@@ -0,0 +1,9 @@
1
+ <!-- Fixture stub — minimal valid SKILL.md for CLI tests. -->
2
+
3
+ ## Use when
4
+
5
+ Use this skill when working with the relevant technology.
6
+
7
+ ## Do not use when
8
+
9
+ Do not use for unrelated tasks.
@@ -0,0 +1,9 @@
1
+ <!-- Fixture stub — minimal valid SKILL.md for CLI tests. -->
2
+
3
+ ## Use when
4
+
5
+ Use this skill when working with the relevant technology.
6
+
7
+ ## Do not use when
8
+
9
+ Do not use for unrelated tasks.
@@ -0,0 +1,9 @@
1
+ <!-- Fixture stub — minimal valid SKILL.md for CLI tests. -->
2
+
3
+ ## Use when
4
+
5
+ Use this skill when working with the relevant technology.
6
+
7
+ ## Do not use when
8
+
9
+ Do not use for unrelated tasks.