@haus-tech/haus-workflow 0.6.0 → 0.8.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 +12 -0
- package/dist/cli.js +11 -0
- package/library/catalog/allowed-stacks.json +18 -1
- package/library/catalog/manifest.json +235 -0
- package/package.json +1 -1
- package/tests/fixtures/catalog/manifest.json +130 -0
- package/tests/fixtures/catalog/skills/bullmq-patterns/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/eslint-setup/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/expo-react-native-patterns/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/i18next-patterns/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/prettier-setup/SKILL.md +9 -0
- package/tests/fixtures/catalog/skills/sentry-patterns/SKILL.md +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.8.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.7.0...v0.8.0) (2026-05-28)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* **scanner:** tooling detection (T19-T25) ([2ae293b](https://github.com/WeAreHausTech/haus-workflow/commit/2ae293b69cf97be15017021e16703e19aa3c2223))
|
|
8
|
+
|
|
9
|
+
## [0.7.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.6.0...v0.7.0) (2026-05-28)
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **scanner:** detect expo + react-native (T18) ([290a5ba](https://github.com/WeAreHausTech/haus-workflow/commit/290a5bac13faa8ec515d8dd9363caa2c00ce74cc))
|
|
14
|
+
|
|
3
15
|
## [0.6.0](https://github.com/WeAreHausTech/haus-workflow/compare/v0.5.0...v0.6.0) (2026-05-28)
|
|
4
16
|
|
|
5
17
|
### Features
|
package/dist/cli.js
CHANGED
|
@@ -1421,6 +1421,7 @@ function detectRoles(deps, files) {
|
|
|
1421
1421
|
if (deps.includes("react-router") && deps.includes("@react-router/node")) roles.add("react-router-app");
|
|
1422
1422
|
if (deps.includes("sanity")) roles.add("sanity-studio");
|
|
1423
1423
|
if (deps.includes("@strapi/strapi") || deps.some((d) => d.startsWith("@strapi/"))) roles.add("strapi-app");
|
|
1424
|
+
if (deps.includes("expo")) roles.add("expo-app");
|
|
1424
1425
|
if (deps.includes("@vendure/core")) roles.add("vendure-app");
|
|
1425
1426
|
if (deps.some((d) => d.startsWith("@haus/vendure-")) || files.some((f) => f.includes("vendure-config")))
|
|
1426
1427
|
roles.add("vendure-plugin");
|
|
@@ -1479,6 +1480,16 @@ async function detectStacks(root, deps, files, packageManager) {
|
|
|
1479
1480
|
add("backend", "strapi");
|
|
1480
1481
|
}
|
|
1481
1482
|
if (deps.includes("prisma") || deps.includes("@prisma/client")) add("backend", "prisma");
|
|
1483
|
+
if (deps.includes("expo")) add("frontend", "expo");
|
|
1484
|
+
if (deps.includes("react-native")) add("frontend", "react-native");
|
|
1485
|
+
if (deps.includes("i18next") || deps.includes("react-i18next")) add("tooling", "i18next");
|
|
1486
|
+
if (deps.includes("bullmq")) add("tooling", "bullmq");
|
|
1487
|
+
if (files.some((f) => f === "Dockerfile" || f.startsWith("docker-compose"))) add("tooling", "docker");
|
|
1488
|
+
if (deps.includes("pm2") || files.some((f) => f.includes("ecosystem.config"))) add("tooling", "pm2");
|
|
1489
|
+
if (deps.some((d) => d.startsWith("@sentry/"))) add("tooling", "sentry");
|
|
1490
|
+
if (deps.includes("deployer/deployer")) add("tooling", "deployer-php");
|
|
1491
|
+
if (!deps.includes("prettier")) add("tooling", "missing-prettier");
|
|
1492
|
+
if (!deps.includes("eslint")) add("tooling", "missing-eslint");
|
|
1482
1493
|
if (deps.includes("@vendure/core")) add("backend", "vendure3");
|
|
1483
1494
|
if (deps.includes("@nestjs/core")) add("backend", "nestjs");
|
|
1484
1495
|
if (await hasNeedle(root, files, "NestFactory")) add("backend", "nestjs");
|
|
@@ -80,6 +80,23 @@
|
|
|
80
80
|
"mysql",
|
|
81
81
|
"saml2",
|
|
82
82
|
"next-auth",
|
|
83
|
-
"auth"
|
|
83
|
+
"auth",
|
|
84
|
+
"expo",
|
|
85
|
+
"react-native",
|
|
86
|
+
"mobile",
|
|
87
|
+
"i18next",
|
|
88
|
+
"i18n",
|
|
89
|
+
"bullmq",
|
|
90
|
+
"queue",
|
|
91
|
+
"sentry",
|
|
92
|
+
"observability",
|
|
93
|
+
"tooling",
|
|
94
|
+
"prettier",
|
|
95
|
+
"eslint",
|
|
96
|
+
"missing-prettier",
|
|
97
|
+
"missing-eslint",
|
|
98
|
+
"docker",
|
|
99
|
+
"pm2",
|
|
100
|
+
"deployer-php"
|
|
84
101
|
]
|
|
85
102
|
}
|
|
@@ -232,6 +232,241 @@
|
|
|
232
232
|
"tokenEstimate": 2000,
|
|
233
233
|
"installMode": "copy-selected"
|
|
234
234
|
},
|
|
235
|
+
{
|
|
236
|
+
"id": "haus.expo-react-native-patterns",
|
|
237
|
+
"version": "1.0.0",
|
|
238
|
+
"source": "haus",
|
|
239
|
+
"type": "skill",
|
|
240
|
+
"path": "skills/expo-react-native-patterns",
|
|
241
|
+
"title": "Haus Expo / React Native patterns",
|
|
242
|
+
"purpose": "Guide Expo Router, React Native component, native module, and EAS build changes.",
|
|
243
|
+
"whenToUse": "Use for Expo Router routes, RN components, native modules, expo config plugins, and EAS build/submit.",
|
|
244
|
+
"whenNotToUse": "Do not use for web-only React apps or unrelated mobile native projects (Swift/Kotlin without Expo).",
|
|
245
|
+
"references": [
|
|
246
|
+
"references/conventions.md",
|
|
247
|
+
"references/scope.md",
|
|
248
|
+
"references/workflow.md",
|
|
249
|
+
"https://docs.expo.dev/"
|
|
250
|
+
],
|
|
251
|
+
"tokenBudget": 1200,
|
|
252
|
+
"tags": [
|
|
253
|
+
"expo",
|
|
254
|
+
"react-native",
|
|
255
|
+
"mobile",
|
|
256
|
+
"react"
|
|
257
|
+
],
|
|
258
|
+
"repoRoles": [
|
|
259
|
+
"expo-app"
|
|
260
|
+
],
|
|
261
|
+
"requiresAny": [
|
|
262
|
+
{
|
|
263
|
+
"stack": "expo"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"stack": "react-native"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"role": "expo-app"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"dependency": "expo"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"dependency": "react-native"
|
|
276
|
+
}
|
|
277
|
+
],
|
|
278
|
+
"ecosystem": "mobile",
|
|
279
|
+
"tokenEstimate": 2200,
|
|
280
|
+
"installMode": "copy-selected"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"id": "haus.i18next-patterns",
|
|
284
|
+
"version": "1.0.0",
|
|
285
|
+
"source": "haus",
|
|
286
|
+
"type": "skill",
|
|
287
|
+
"path": "skills/i18next-patterns",
|
|
288
|
+
"title": "Haus i18next patterns",
|
|
289
|
+
"purpose": "Guide i18next setup, namespace structure, translation key conventions, and SSR-safe usage.",
|
|
290
|
+
"whenToUse": "Use for adding/changing translations, configuring i18next, or wiring react-i18next / next-i18next.",
|
|
291
|
+
"whenNotToUse": "Do not use for non-i18next translation systems or static-only content with no locale.",
|
|
292
|
+
"references": [
|
|
293
|
+
"references/conventions.md",
|
|
294
|
+
"references/scope.md",
|
|
295
|
+
"references/workflow.md",
|
|
296
|
+
"https://www.i18next.com/"
|
|
297
|
+
],
|
|
298
|
+
"tokenBudget": 1200,
|
|
299
|
+
"tags": [
|
|
300
|
+
"i18next",
|
|
301
|
+
"i18n",
|
|
302
|
+
"frontend"
|
|
303
|
+
],
|
|
304
|
+
"repoRoles": [
|
|
305
|
+
"next-app",
|
|
306
|
+
"react-app",
|
|
307
|
+
"vue-app",
|
|
308
|
+
"vite-app"
|
|
309
|
+
],
|
|
310
|
+
"requiresAny": [
|
|
311
|
+
{
|
|
312
|
+
"stack": "i18next"
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"dependency": "i18next"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"dependency": "react-i18next"
|
|
319
|
+
}
|
|
320
|
+
],
|
|
321
|
+
"ecosystem": "tooling",
|
|
322
|
+
"tokenEstimate": 1800,
|
|
323
|
+
"installMode": "copy-selected"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"id": "haus.bullmq-patterns",
|
|
327
|
+
"version": "1.0.0",
|
|
328
|
+
"source": "haus",
|
|
329
|
+
"type": "skill",
|
|
330
|
+
"path": "skills/bullmq-patterns",
|
|
331
|
+
"title": "Haus BullMQ patterns",
|
|
332
|
+
"purpose": "Guide BullMQ queue, worker, scheduler, and Redis-connection lifecycle changes.",
|
|
333
|
+
"whenToUse": "Use for BullMQ queue definitions, processors, schedulers, and graceful shutdown.",
|
|
334
|
+
"whenNotToUse": "Do not use for non-BullMQ job systems or in-process scheduling without Redis.",
|
|
335
|
+
"references": [
|
|
336
|
+
"references/conventions.md",
|
|
337
|
+
"references/scope.md",
|
|
338
|
+
"references/workflow.md",
|
|
339
|
+
"https://docs.bullmq.io/"
|
|
340
|
+
],
|
|
341
|
+
"tokenBudget": 1200,
|
|
342
|
+
"tags": [
|
|
343
|
+
"bullmq",
|
|
344
|
+
"queue",
|
|
345
|
+
"backend"
|
|
346
|
+
],
|
|
347
|
+
"repoRoles": [
|
|
348
|
+
"vendure-app",
|
|
349
|
+
"nestjs-api"
|
|
350
|
+
],
|
|
351
|
+
"requiresAny": [
|
|
352
|
+
{
|
|
353
|
+
"stack": "bullmq"
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"dependency": "bullmq"
|
|
357
|
+
}
|
|
358
|
+
],
|
|
359
|
+
"ecosystem": "tooling",
|
|
360
|
+
"tokenEstimate": 1800,
|
|
361
|
+
"installMode": "copy-selected"
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"id": "haus.sentry-patterns",
|
|
365
|
+
"version": "1.0.0",
|
|
366
|
+
"source": "haus",
|
|
367
|
+
"type": "skill",
|
|
368
|
+
"path": "skills/sentry-patterns",
|
|
369
|
+
"title": "Haus Sentry patterns",
|
|
370
|
+
"purpose": "Guide Sentry SDK setup, error capture, performance tracing, and PII scrubbing.",
|
|
371
|
+
"whenToUse": "Use for `@sentry/*` SDK init, scope/breadcrumb config, source map upload, and PII redaction.",
|
|
372
|
+
"whenNotToUse": "Do not use for non-Sentry monitoring (Datadog, New Relic, etc.).",
|
|
373
|
+
"references": [
|
|
374
|
+
"references/conventions.md",
|
|
375
|
+
"references/scope.md",
|
|
376
|
+
"references/workflow.md",
|
|
377
|
+
"https://docs.sentry.io/"
|
|
378
|
+
],
|
|
379
|
+
"tokenBudget": 1200,
|
|
380
|
+
"tags": [
|
|
381
|
+
"sentry",
|
|
382
|
+
"observability",
|
|
383
|
+
"tooling"
|
|
384
|
+
],
|
|
385
|
+
"repoRoles": [
|
|
386
|
+
"next-app",
|
|
387
|
+
"nestjs-api",
|
|
388
|
+
"vendure-app"
|
|
389
|
+
],
|
|
390
|
+
"requiresAny": [
|
|
391
|
+
{
|
|
392
|
+
"stack": "sentry"
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"dependency": "@sentry/node"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"dependency": "@sentry/nextjs"
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"packageNamePattern": "@sentry/*"
|
|
402
|
+
}
|
|
403
|
+
],
|
|
404
|
+
"ecosystem": "tooling",
|
|
405
|
+
"tokenEstimate": 1800,
|
|
406
|
+
"installMode": "copy-selected"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"id": "haus.prettier-setup",
|
|
410
|
+
"version": "1.0.0",
|
|
411
|
+
"source": "haus",
|
|
412
|
+
"type": "skill",
|
|
413
|
+
"path": "skills/prettier-setup",
|
|
414
|
+
"title": "Haus Prettier setup",
|
|
415
|
+
"purpose": "Install `@haus-tech/prettier-config` and wire `.prettierrc` to the shared config.",
|
|
416
|
+
"whenToUse": "Use when Prettier is missing from a haus repo or when migrating an ad-hoc Prettier config to the shared package.",
|
|
417
|
+
"whenNotToUse": "Do not use when Prettier is already configured against `@haus-tech/prettier-config`.",
|
|
418
|
+
"references": [
|
|
419
|
+
"references/conventions.md",
|
|
420
|
+
"references/scope.md",
|
|
421
|
+
"references/workflow.md"
|
|
422
|
+
],
|
|
423
|
+
"tokenBudget": 800,
|
|
424
|
+
"tags": [
|
|
425
|
+
"prettier",
|
|
426
|
+
"tooling",
|
|
427
|
+
"quality"
|
|
428
|
+
],
|
|
429
|
+
"repoRoles": [],
|
|
430
|
+
"requiresAny": [
|
|
431
|
+
{
|
|
432
|
+
"stack": "missing-prettier"
|
|
433
|
+
}
|
|
434
|
+
],
|
|
435
|
+
"ecosystem": "tooling",
|
|
436
|
+
"tokenEstimate": 1000,
|
|
437
|
+
"installMode": "copy-selected"
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"id": "haus.eslint-setup",
|
|
441
|
+
"version": "1.0.0",
|
|
442
|
+
"source": "haus",
|
|
443
|
+
"type": "skill",
|
|
444
|
+
"path": "skills/eslint-setup",
|
|
445
|
+
"title": "Haus ESLint setup",
|
|
446
|
+
"purpose": "Install `@haus-tech/tech-config` and wire ESLint flat config to the shared rules.",
|
|
447
|
+
"whenToUse": "Use when ESLint is missing from a haus repo or migrating from a legacy `.eslintrc` to flat config.",
|
|
448
|
+
"whenNotToUse": "Do not use when ESLint is already configured against `@haus-tech/tech-config`.",
|
|
449
|
+
"references": [
|
|
450
|
+
"references/conventions.md",
|
|
451
|
+
"references/scope.md",
|
|
452
|
+
"references/workflow.md"
|
|
453
|
+
],
|
|
454
|
+
"tokenBudget": 800,
|
|
455
|
+
"tags": [
|
|
456
|
+
"eslint",
|
|
457
|
+
"tooling",
|
|
458
|
+
"quality"
|
|
459
|
+
],
|
|
460
|
+
"repoRoles": [],
|
|
461
|
+
"requiresAny": [
|
|
462
|
+
{
|
|
463
|
+
"stack": "missing-eslint"
|
|
464
|
+
}
|
|
465
|
+
],
|
|
466
|
+
"ecosystem": "tooling",
|
|
467
|
+
"tokenEstimate": 1000,
|
|
468
|
+
"installMode": "copy-selected"
|
|
469
|
+
},
|
|
235
470
|
{
|
|
236
471
|
"id": "haus.sanity-patterns",
|
|
237
472
|
"version": "1.0.0",
|
package/package.json
CHANGED
|
@@ -128,6 +128,136 @@
|
|
|
128
128
|
"tokenEstimate": 2000,
|
|
129
129
|
"installMode": "copy-selected"
|
|
130
130
|
},
|
|
131
|
+
{
|
|
132
|
+
"id": "haus.expo-react-native-patterns",
|
|
133
|
+
"source": "haus",
|
|
134
|
+
"type": "skill",
|
|
135
|
+
"path": "skills/expo-react-native-patterns",
|
|
136
|
+
"title": "Haus Expo / React Native patterns",
|
|
137
|
+
"purpose": "Guide Expo Router, React Native component, native module, and EAS build changes.",
|
|
138
|
+
"whenToUse": "Use for Expo Router routes, RN components, native modules, expo config plugins, and EAS build/submit.",
|
|
139
|
+
"whenNotToUse": "Do not use for web-only React apps or unrelated mobile native projects (Swift/Kotlin without Expo).",
|
|
140
|
+
"references": ["references/scope.md", "references/workflow.md", "https://docs.expo.dev/"],
|
|
141
|
+
"tokenBudget": 1200,
|
|
142
|
+
"tags": ["expo", "react-native", "mobile", "react"],
|
|
143
|
+
"repoRoles": ["expo-app"],
|
|
144
|
+
"requiresAny": [
|
|
145
|
+
{ "stack": "expo" },
|
|
146
|
+
{ "stack": "react-native" },
|
|
147
|
+
{ "role": "expo-app" },
|
|
148
|
+
{ "dependency": "expo" },
|
|
149
|
+
{ "dependency": "react-native" }
|
|
150
|
+
],
|
|
151
|
+
"ecosystem": "mobile",
|
|
152
|
+
"tokenEstimate": 2200,
|
|
153
|
+
"installMode": "copy-selected"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"id": "haus.i18next-patterns",
|
|
157
|
+
"source": "haus",
|
|
158
|
+
"type": "skill",
|
|
159
|
+
"path": "skills/i18next-patterns",
|
|
160
|
+
"title": "Haus i18next patterns",
|
|
161
|
+
"purpose": "Guide i18next setup, namespace structure, translation key conventions, and SSR-safe usage.",
|
|
162
|
+
"whenToUse": "Use for adding/changing translations, configuring i18next, or wiring react-i18next / next-i18next.",
|
|
163
|
+
"whenNotToUse": "Do not use for non-i18next translation systems or static-only content with no locale.",
|
|
164
|
+
"references": ["references/scope.md", "references/workflow.md", "https://www.i18next.com/"],
|
|
165
|
+
"tokenBudget": 1200,
|
|
166
|
+
"tags": ["i18next", "i18n", "frontend"],
|
|
167
|
+
"repoRoles": ["next-app", "react-app", "vue-app", "vite-app"],
|
|
168
|
+
"requiresAny": [
|
|
169
|
+
{ "stack": "i18next" },
|
|
170
|
+
{ "dependency": "i18next" },
|
|
171
|
+
{ "dependency": "react-i18next" }
|
|
172
|
+
],
|
|
173
|
+
"ecosystem": "tooling",
|
|
174
|
+
"tokenEstimate": 1800,
|
|
175
|
+
"installMode": "copy-selected"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "haus.bullmq-patterns",
|
|
179
|
+
"source": "haus",
|
|
180
|
+
"type": "skill",
|
|
181
|
+
"path": "skills/bullmq-patterns",
|
|
182
|
+
"title": "Haus BullMQ patterns",
|
|
183
|
+
"purpose": "Guide BullMQ queue, worker, scheduler, and Redis-connection lifecycle changes.",
|
|
184
|
+
"whenToUse": "Use for BullMQ queue definitions, processors, schedulers, and graceful shutdown.",
|
|
185
|
+
"whenNotToUse": "Do not use for non-BullMQ job systems or in-process scheduling without Redis.",
|
|
186
|
+
"references": ["references/scope.md", "references/workflow.md", "https://docs.bullmq.io/"],
|
|
187
|
+
"tokenBudget": 1200,
|
|
188
|
+
"tags": ["bullmq", "queue", "backend"],
|
|
189
|
+
"repoRoles": ["vendure-app", "nestjs-api"],
|
|
190
|
+
"requiresAny": [
|
|
191
|
+
{ "stack": "bullmq" },
|
|
192
|
+
{ "dependency": "bullmq" }
|
|
193
|
+
],
|
|
194
|
+
"ecosystem": "tooling",
|
|
195
|
+
"tokenEstimate": 1800,
|
|
196
|
+
"installMode": "copy-selected"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "haus.sentry-patterns",
|
|
200
|
+
"source": "haus",
|
|
201
|
+
"type": "skill",
|
|
202
|
+
"path": "skills/sentry-patterns",
|
|
203
|
+
"title": "Haus Sentry patterns",
|
|
204
|
+
"purpose": "Guide Sentry SDK setup, error capture, performance tracing, and PII scrubbing.",
|
|
205
|
+
"whenToUse": "Use for `@sentry/*` SDK init, scope/breadcrumb config, source map upload, and PII redaction.",
|
|
206
|
+
"whenNotToUse": "Do not use for non-Sentry monitoring (Datadog, New Relic, etc.).",
|
|
207
|
+
"references": ["references/scope.md", "references/workflow.md", "https://docs.sentry.io/"],
|
|
208
|
+
"tokenBudget": 1200,
|
|
209
|
+
"tags": ["sentry", "observability", "tooling"],
|
|
210
|
+
"repoRoles": ["next-app", "nestjs-api", "vendure-app"],
|
|
211
|
+
"requiresAny": [
|
|
212
|
+
{ "stack": "sentry" },
|
|
213
|
+
{ "dependency": "@sentry/node" },
|
|
214
|
+
{ "dependency": "@sentry/nextjs" },
|
|
215
|
+
{ "packageNamePattern": "@sentry/*" }
|
|
216
|
+
],
|
|
217
|
+
"ecosystem": "tooling",
|
|
218
|
+
"tokenEstimate": 1800,
|
|
219
|
+
"installMode": "copy-selected"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"id": "haus.prettier-setup",
|
|
223
|
+
"source": "haus",
|
|
224
|
+
"type": "skill",
|
|
225
|
+
"path": "skills/prettier-setup",
|
|
226
|
+
"title": "Haus Prettier setup",
|
|
227
|
+
"purpose": "Install `@haus-tech/prettier-config` and wire `.prettierrc` to the shared config.",
|
|
228
|
+
"whenToUse": "Use when Prettier is missing from a haus repo or when migrating an ad-hoc Prettier config to the shared package.",
|
|
229
|
+
"whenNotToUse": "Do not use when Prettier is already configured against `@haus-tech/prettier-config`.",
|
|
230
|
+
"references": ["references/scope.md", "references/workflow.md"],
|
|
231
|
+
"tokenBudget": 800,
|
|
232
|
+
"tags": ["prettier", "tooling", "quality"],
|
|
233
|
+
"repoRoles": [],
|
|
234
|
+
"requiresAny": [
|
|
235
|
+
{ "stack": "missing-prettier" }
|
|
236
|
+
],
|
|
237
|
+
"ecosystem": "tooling",
|
|
238
|
+
"tokenEstimate": 1000,
|
|
239
|
+
"installMode": "copy-selected"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"id": "haus.eslint-setup",
|
|
243
|
+
"source": "haus",
|
|
244
|
+
"type": "skill",
|
|
245
|
+
"path": "skills/eslint-setup",
|
|
246
|
+
"title": "Haus ESLint setup",
|
|
247
|
+
"purpose": "Install `@haus-tech/tech-config` and wire ESLint flat config to the shared rules.",
|
|
248
|
+
"whenToUse": "Use when ESLint is missing from a haus repo or migrating from a legacy `.eslintrc` to flat config.",
|
|
249
|
+
"whenNotToUse": "Do not use when ESLint is already configured against `@haus-tech/tech-config`.",
|
|
250
|
+
"references": ["references/scope.md", "references/workflow.md"],
|
|
251
|
+
"tokenBudget": 800,
|
|
252
|
+
"tags": ["eslint", "tooling", "quality"],
|
|
253
|
+
"repoRoles": [],
|
|
254
|
+
"requiresAny": [
|
|
255
|
+
{ "stack": "missing-eslint" }
|
|
256
|
+
],
|
|
257
|
+
"ecosystem": "tooling",
|
|
258
|
+
"tokenEstimate": 1000,
|
|
259
|
+
"installMode": "copy-selected"
|
|
260
|
+
},
|
|
131
261
|
{
|
|
132
262
|
"id": "haus.sanity-patterns",
|
|
133
263
|
"source": "haus",
|