@haus-tech/haus-workflow 0.13.1 → 0.14.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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.4.0",
2
+ "version": "2.4.1",
3
3
  "items": [
4
4
  {
5
5
  "id": "haus.nextjs-patterns",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haus-tech/haus-workflow",
3
- "version": "0.13.1",
3
+ "version": "0.14.0",
4
4
  "description": "Haus AI workflow CLI for Claude Code.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,6 +26,8 @@
26
26
  "build": "tsup src/cli.ts --format esm --dts --clean --out-dir dist --external @inquirer/checkbox",
27
27
  "dev": "tsx src/cli.ts",
28
28
  "test": "node --import tsx --test tests/**/*.test.js",
29
+ "test:coverage": "c8 yarn test",
30
+ "coverage:check": "c8 --check-coverage yarn test",
29
31
  "lint": "eslint src scripts",
30
32
  "format:check": "prettier --check .",
31
33
  "format": "prettier --write .",
@@ -38,6 +40,7 @@
38
40
  "release:dry": "GITHUB_TOKEN=$(gh auth token) release-it --dry-run",
39
41
  "prepack": "yarn build",
40
42
  "verify": "yarn typecheck && yarn typecheck:scripts && yarn lint && yarn build && yarn test",
43
+ "verify:full": "yarn verify && yarn coverage:check",
41
44
  "postinstall": "node ./scripts/postinstall.mjs || true",
42
45
  "prepare": "lefthook install || true",
43
46
  "security:audit": "yarn npm audit -A -R --severity high --environment production"
@@ -62,6 +65,7 @@
62
65
  "@types/semver": "7.7.1",
63
66
  "@typescript-eslint/eslint-plugin": "8.59.3",
64
67
  "@typescript-eslint/parser": "8.59.3",
68
+ "c8": "11.0.0",
65
69
  "eslint": "9.39.4",
66
70
  "eslint-plugin-import": "2.32.0",
67
71
  "lefthook": "1.13.6",
@@ -0,0 +1,120 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "_note": "Policy gates test fixture. One item per gate exercised by recommend-eligibility.test.js.",
4
+ "items": [
5
+ {
6
+ "id": "test.unsupported-python",
7
+ "source": "haus",
8
+ "type": "skill",
9
+ "path": "skills/test.unsupported-python",
10
+ "title": "Test: Unsupported Python",
11
+ "purpose": "Triggers UNSUPPORTED gate (python in tags).",
12
+ "tags": ["python", "backend"],
13
+ "repoRoles": [],
14
+ "default": false,
15
+ "tokenEstimate": 100
16
+ },
17
+ {
18
+ "id": "test.curated-not-approved",
19
+ "source": "curated",
20
+ "type": "skill",
21
+ "path": "skills/test.curated-not-approved",
22
+ "title": "Test: Curated Not Approved",
23
+ "purpose": "Triggers curated-not-approved gate (reviewStatus:candidate).",
24
+ "tags": ["frontend"],
25
+ "repoRoles": [],
26
+ "reviewStatus": "candidate",
27
+ "default": false,
28
+ "tokenEstimate": 100
29
+ },
30
+ {
31
+ "id": "test.curated-risk-blocked",
32
+ "source": "curated",
33
+ "type": "skill",
34
+ "path": "skills/test.curated-risk-blocked",
35
+ "title": "Test: Curated Risk Blocked",
36
+ "purpose": "Triggers curated-risk-blocked gate (reviewStatus:approved but riskLevel:blocked).",
37
+ "tags": ["frontend"],
38
+ "repoRoles": [],
39
+ "reviewStatus": "approved",
40
+ "riskLevel": "blocked",
41
+ "default": false,
42
+ "tokenEstimate": 100
43
+ },
44
+ {
45
+ "id": "test.env-management",
46
+ "source": "haus",
47
+ "type": "skill",
48
+ "path": "skills/test.env-management",
49
+ "title": "Test: Sensitive Secrets Item",
50
+ "purpose": "Triggers sensitive-policy gate (secrets in tags, matched by SENSITIVE_ITEM_KEYWORDS).",
51
+ "tags": ["secrets", "workflow"],
52
+ "repoRoles": [],
53
+ "default": false,
54
+ "tokenEstimate": 100
55
+ },
56
+ {
57
+ "id": "test.third-party-unapproved",
58
+ "source": "third-party-plugin",
59
+ "type": "skill",
60
+ "path": "skills/test.third-party-unapproved",
61
+ "title": "Test: Third-Party Unapproved",
62
+ "purpose": "Triggers source-approval gate (non-haus, non-curated, not in sources-report.json).",
63
+ "tags": ["typescript"],
64
+ "repoRoles": [],
65
+ "default": false,
66
+ "tokenEstimate": 100
67
+ },
68
+ {
69
+ "id": "test.requires-svelte",
70
+ "source": "haus",
71
+ "type": "skill",
72
+ "path": "skills/test.requires-svelte",
73
+ "title": "Test: Requires Svelte",
74
+ "purpose": "Triggers requiresAny unsatisfied gate when svelte not in context.",
75
+ "tags": ["svelte"],
76
+ "repoRoles": [],
77
+ "requiresAny": [{ "dependency": "svelte" }],
78
+ "default": false,
79
+ "tokenEstimate": 100
80
+ },
81
+ {
82
+ "id": "test.default-baseline",
83
+ "source": "haus",
84
+ "type": "skill",
85
+ "path": "skills/test.default-baseline",
86
+ "title": "Test: Default Baseline",
87
+ "purpose": "Passes all gates because default:true. Used to verify tokenEstimate is preserved.",
88
+ "tags": ["workflow"],
89
+ "repoRoles": [],
90
+ "default": true,
91
+ "tokenEstimate": 999
92
+ },
93
+ {
94
+ "id": "test.role-matched",
95
+ "source": "haus",
96
+ "type": "skill",
97
+ "path": "skills/test.role-matched",
98
+ "title": "Test: Role Matched",
99
+ "purpose": "Recommended when context has nextjs stack. Tests positive matching path.",
100
+ "tags": ["nextjs", "frontend"],
101
+ "repoRoles": ["next-app"],
102
+ "requiresAny": [{ "stack": "nextjs" }],
103
+ "default": false,
104
+ "tokenEstimate": 100
105
+ },
106
+ {
107
+ "id": "haus.nx21-monorepo-patterns",
108
+ "source": "haus",
109
+ "type": "skill",
110
+ "path": "skills/haus.nx21-monorepo-patterns",
111
+ "title": "Haus Nx 21 Monorepo Patterns",
112
+ "purpose": "Triggers required-role-missing gate when nx-monorepo role is absent. Hardcoded check in recommend().",
113
+ "tags": ["nx", "monorepo"],
114
+ "repoRoles": ["nx-monorepo"],
115
+ "requiresAny": [{ "stack": "nx" }],
116
+ "default": false,
117
+ "tokenEstimate": 100
118
+ }
119
+ ]
120
+ }