@haus-tech/haus-workflow 5.2.0 → 5.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 +16 -0
- package/dist/cli.js +851 -462
- package/library/catalog/manifest.json +52 -8
- package/library/global/skills/request-sync/SKILL.md +13 -8
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "6.
|
|
2
|
+
"version": "6.5.0",
|
|
3
3
|
"manifestFormat": 2,
|
|
4
4
|
"globalPlugins": [
|
|
5
5
|
{
|
|
@@ -10,6 +10,30 @@
|
|
|
10
10
|
"ref": "v6.3.0"
|
|
11
11
|
}
|
|
12
12
|
],
|
|
13
|
+
"profiles": {
|
|
14
|
+
"poc": {
|
|
15
|
+
"exclude": {
|
|
16
|
+
"tags": ["testing", "review", "security"],
|
|
17
|
+
"ids": [
|
|
18
|
+
"haus.agentic-workflow-standard",
|
|
19
|
+
"haus.lefthook-quality",
|
|
20
|
+
"haus.lefthook-branch-guard",
|
|
21
|
+
"haus.lefthook-security",
|
|
22
|
+
"haus.decision-template",
|
|
23
|
+
"haus.decisions-ci-gate",
|
|
24
|
+
"haus.adr-decisions",
|
|
25
|
+
"haus.issue-authoring",
|
|
26
|
+
"haus.issue-creator",
|
|
27
|
+
"haus.ecc-common-coding-style-rule",
|
|
28
|
+
"haus.ecc-react-coding-style-rule",
|
|
29
|
+
"haus.ecc-vue-coding-style-rule",
|
|
30
|
+
"haus.ecc-typescript-coding-style-rule",
|
|
31
|
+
"haus.ecc-common-patterns-rule"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"keepIds": ["haus.currents-dev-playwright-best-practices"]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
13
37
|
"items": [
|
|
14
38
|
{
|
|
15
39
|
"id": "haus.agentic-workflow-standard",
|
|
@@ -30,6 +54,26 @@
|
|
|
30
54
|
"reviewStatus": "approved",
|
|
31
55
|
"riskLevel": "low"
|
|
32
56
|
},
|
|
57
|
+
{
|
|
58
|
+
"id": "haus.agentic-workflow-poc",
|
|
59
|
+
"version": "1.0.0",
|
|
60
|
+
"source": "haus",
|
|
61
|
+
"type": "template",
|
|
62
|
+
"path": "templates/agentic-workflow-poc.md",
|
|
63
|
+
"title": "PoC workflow standard",
|
|
64
|
+
"purpose": "Workflow standard for throwaway proofs of concept and customer demos: brainstorm to a demo script, one executable Playwright manus, main always green, no test suite, no review loop. Written to .haus-workflow/WORKFLOW.md by the CLI under profile poc.",
|
|
65
|
+
"whenToUse": "Never install by hand: `haus init --profile poc` writes it as WORKFLOW.md.",
|
|
66
|
+
"whenNotToUse": "Not for anything that ships to production; use haus.agentic-workflow-standard.",
|
|
67
|
+
"tags": ["workflow", "project-instructions"],
|
|
68
|
+
"repoRoles": [],
|
|
69
|
+
"ecosystem": "general",
|
|
70
|
+
"installMode": "copy-selected",
|
|
71
|
+
"tokenEstimate": 2094,
|
|
72
|
+
"tokenBudget": 2723,
|
|
73
|
+
"default": false,
|
|
74
|
+
"reviewStatus": "approved",
|
|
75
|
+
"riskLevel": "low"
|
|
76
|
+
},
|
|
33
77
|
{
|
|
34
78
|
"id": "haus.apollo-apollo-client",
|
|
35
79
|
"version": "1.1.0",
|
|
@@ -4277,7 +4321,7 @@
|
|
|
4277
4321
|
"purpose": "React Security",
|
|
4278
4322
|
"whenToUse": "React Security",
|
|
4279
4323
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
4280
|
-
"tags": ["workflow", "react"],
|
|
4324
|
+
"tags": ["workflow", "react", "security"],
|
|
4281
4325
|
"repoRoles": [],
|
|
4282
4326
|
"tokenEstimate": 1599,
|
|
4283
4327
|
"tokenBudget": 2079,
|
|
@@ -4317,7 +4361,7 @@
|
|
|
4317
4361
|
"purpose": "React Testing",
|
|
4318
4362
|
"whenToUse": "React Testing",
|
|
4319
4363
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
4320
|
-
"tags": ["workflow", "react"],
|
|
4364
|
+
"tags": ["workflow", "react", "testing"],
|
|
4321
4365
|
"repoRoles": [],
|
|
4322
4366
|
"tokenEstimate": 1757,
|
|
4323
4367
|
"tokenBudget": 2285,
|
|
@@ -4459,7 +4503,7 @@
|
|
|
4459
4503
|
"purpose": "Vue Security",
|
|
4460
4504
|
"whenToUse": "Vue Security",
|
|
4461
4505
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
4462
|
-
"tags": ["workflow", "vue"],
|
|
4506
|
+
"tags": ["workflow", "vue", "security"],
|
|
4463
4507
|
"repoRoles": [],
|
|
4464
4508
|
"tokenEstimate": 494,
|
|
4465
4509
|
"tokenBudget": 643,
|
|
@@ -4493,7 +4537,7 @@
|
|
|
4493
4537
|
"purpose": "Vue Testing",
|
|
4494
4538
|
"whenToUse": "Vue Testing",
|
|
4495
4539
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
4496
|
-
"tags": ["workflow", "vue"],
|
|
4540
|
+
"tags": ["workflow", "vue", "testing"],
|
|
4497
4541
|
"repoRoles": [],
|
|
4498
4542
|
"tokenEstimate": 512,
|
|
4499
4543
|
"tokenBudget": 666,
|
|
@@ -4677,7 +4721,7 @@
|
|
|
4677
4721
|
"purpose": "Security Guidelines",
|
|
4678
4722
|
"whenToUse": "Security Guidelines",
|
|
4679
4723
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
4680
|
-
"tags": ["workflow"],
|
|
4724
|
+
"tags": ["workflow", "security"],
|
|
4681
4725
|
"repoRoles": [],
|
|
4682
4726
|
"tokenEstimate": 216,
|
|
4683
4727
|
"tokenBudget": 281,
|
|
@@ -4729,7 +4773,7 @@
|
|
|
4729
4773
|
"purpose": "Testing Requirements",
|
|
4730
4774
|
"whenToUse": "Testing Requirements",
|
|
4731
4775
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
4732
|
-
"tags": ["workflow"],
|
|
4776
|
+
"tags": ["workflow", "testing"],
|
|
4733
4777
|
"repoRoles": [],
|
|
4734
4778
|
"tokenEstimate": 350,
|
|
4735
4779
|
"tokenBudget": 455,
|
|
@@ -4873,7 +4917,7 @@
|
|
|
4873
4917
|
"purpose": "TypeScript/JavaScript Security",
|
|
4874
4918
|
"whenToUse": "TypeScript/JavaScript Security",
|
|
4875
4919
|
"whenNotToUse": "Do not use when a more specific skill or command applies.",
|
|
4876
|
-
"tags": ["workflow", "typescript"],
|
|
4920
|
+
"tags": ["workflow", "typescript", "security"],
|
|
4877
4921
|
"repoRoles": [],
|
|
4878
4922
|
"tokenEstimate": 134,
|
|
4879
4923
|
"tokenBudget": 175,
|
|
@@ -65,7 +65,7 @@ Hämta brädans sektioner. **En sektion:** ingen fråga, använd den. **Flera se
|
|
|
65
65
|
|
|
66
66
|
Hämta fälten på båda brädorna och gå igenom tre saker:
|
|
67
67
|
|
|
68
|
-
- **Finns fälten?** Kundbrädan behöver `Original request`, `Customer`, `Requested by` och kundstatusfältet. Samlingsbrädan behöver dessa plus `Offer status`, `Source`, `Request type`, `Funding`, `Score`, `Has conditions`, `Decision`, `Decision reason`, `Spec iterations`, `Score iterations`.
|
|
68
|
+
- **Finns fälten?** Kundbrädan behöver `Original request`, `Original request title`, `Customer`, `Requested by` och kundstatusfältet. Samlingsbrädan behöver dessa plus `Offer status`, `Source`, `Request type`, `Funding`, `Score`, `Has conditions`, `Decision`, `Decision reason`, `Spec iterations`, `Score iterations`.
|
|
69
69
|
- **Är de delade fälten samma fält?** Jämför gid, inte namn. Två fält med samma namn och olika gid är en dubblett — de driftar isär omedelbart, och felet syns först hos kunden.
|
|
70
70
|
- **Går alternativen att slå upp?** Normaliserat, enligt regeln ovan. Rapportera vilka som inte gick att matcha och vilka alternativ som faktiskt finns.
|
|
71
71
|
|
|
@@ -116,6 +116,7 @@ Domän-JSON till vänster, fältnamn till höger. Ingen annan skill får se hög
|
|
|
116
116
|
| --------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
|
|
117
117
|
| `request_id` | task gid | — |
|
|
118
118
|
| `original_request` | Original request + beskrivningens `## Ursprunglig förfrågan` | Skrivs en gång. Ändras aldrig, inte ens för stavfel |
|
|
119
|
+
| `original_request_title` | Original request title | Skrivs en gång. Ändras aldrig, inte ens för stavfel. Tomt när kunden aldrig skrev en rubrik |
|
|
119
120
|
| `source` | Source | Kunden skrev själv · Mejl · Möte · Haus initierade |
|
|
120
121
|
| `customer` | Customer | |
|
|
121
122
|
| `requested_by` | Requested by | people-fält, kräver user gid |
|
|
@@ -333,13 +334,14 @@ Ursprunget avgör vad du gör, och det avgör också hur underlaget ska tolkas s
|
|
|
333
334
|
|
|
334
335
|
### Kunden skrev själv på sin bräda
|
|
335
336
|
|
|
336
|
-
Kundens ord ligger i beskrivningen, och
|
|
337
|
+
Kundens ord ligger i beskrivningen och i task name, och båda skrivs över senare: beskrivningen görs om till sektionsform, namnet byts till det förändrade tillståndet när specen skrivs. Det är de **enda destruktiva operationerna i hela flödet**, och ordningen är inte förhandlingsbar:
|
|
337
338
|
|
|
338
|
-
1. Kopiera beskrivningen ordagrant till `Original request`
|
|
339
|
-
2. **Läs tillbaka
|
|
340
|
-
3. Först då skriv om beskrivningen
|
|
339
|
+
1. Kopiera beskrivningen ordagrant till `Original request` och task name ordagrant till `Original request title`
|
|
340
|
+
2. **Läs tillbaka båda fälten och verifiera att texten landat**
|
|
341
|
+
3. Först då skriv om beskrivningen, samma text ordagrant under `## Ursprunglig förfrågan`, specen under `## Specifikation`
|
|
342
|
+
4. **Byt aldrig task name innan `Original request title` är skrivet och läst tillbaka.** Namnbytet sker när specen skrivs, ofta i en senare körning, och då finns kundens rubrik bara i det fältet
|
|
341
343
|
|
|
342
|
-
Hoppar du över steg 2 och skrivningen tyst misslyckas är kundens egna ord borta för alltid — vilket är precis det `Original request` finns för att förhindra. `Source` = kunden skrev själv.
|
|
344
|
+
Hoppar du över steg 2 och skrivningen tyst misslyckas är kundens egna ord borta för alltid — vilket är precis det `Original request` finns för att förhindra, och ett namnbyte utan steg 4 gör samma sak med rubriken. `Source` = kunden skrev själv.
|
|
343
345
|
|
|
344
346
|
### Mejl, möte eller annat underlag
|
|
345
347
|
|
|
@@ -347,6 +349,8 @@ Här skapar agenten både task och spec i ett svep, och kundens ord ligger kvar
|
|
|
347
349
|
|
|
348
350
|
**Klistra in det relevanta stycket ur mejlet eller anteckningen ordagrant** i `Original request` och under `## Ursprunglig förfrågan` i beskrivningen — inte en sammanfattning, inte en parafras. Risken för glid är störst just här, eftersom underlaget är råare och agenten tolkat mer.
|
|
349
351
|
|
|
352
|
+
**Rubriken** är mejlets ärenderad eller anteckningens egen rubrik, ordagrant, i `Original request title`. Skrev kunden aldrig någon rubrik lämnas fältet tomt. En rubrik vi formulerat själva ser i granskningen ut som kundens ord, och ett fält som blandar de två är sämre än ett tomt.
|
|
353
|
+
|
|
350
354
|
Blir det flera requests ur samma underlag får var och en **sitt eget relevanta stycke**, inte hela mejlet klistrat en gång per post. Ett fält som innehåller allt håller ingenting.
|
|
351
355
|
|
|
352
356
|
`Source` = mejl eller möte. Statusarna sätts enligt skapandesekvensen nedan. Notera bara att en task inte får hamna i ett granskningsläge utan att specen faktiskt är skriven — en tom task i granskningskön ser ut som ett fel i skillen när det är ett fel i regeln.
|
|
@@ -363,6 +367,7 @@ Kundbrädan bär bara det kunden ska se. Interna fält finns enbart på samlings
|
|
|
363
367
|
| Spec iterations · Score iterations | Original request · Customer · Requested by |
|
|
364
368
|
| Has conditions | Request type · Funding |
|
|
365
369
|
| | Score · Decision · Decision reason |
|
|
370
|
+
| | Original request title |
|
|
366
371
|
|
|
367
372
|
Ett delat fält är **samma** fält på båda brädorna. Finns två fält med samma namn och olika gid är det en dubblett, inte en delning — de driftar isär omedelbart och felet syns först när en kund tittar på något som inte uppdaterats. Upptäcker du en sådan: skriv inte till någon av dem, säg till.
|
|
368
373
|
|
|
@@ -370,7 +375,7 @@ Ett delat fält är **samma** fält på båda brädorna. Finns två fält med sa
|
|
|
370
375
|
|
|
371
376
|
Ordningen spelar roll, eftersom de interna fälten inte existerar på kundbrädan.
|
|
372
377
|
|
|
373
|
-
**1 — Skapa på kundbrädan** med det som finns där: task name, `Original request`, `Customer`, `Requested by`. Lägg tasken i rätt sektion (se nedan), och **sätt `Request status` redan här**, explicit:
|
|
378
|
+
**1 — Skapa på kundbrädan** med det som finns där: task name, `Original request`, `Original request title`, `Customer`, `Requested by`. Lägg tasken i rätt sektion (se nedan), och **sätt `Request status` redan här**, explicit:
|
|
374
379
|
|
|
375
380
|
| Läge vid skapandet | Request status |
|
|
376
381
|
| ------------------------------------ | --------------- |
|
|
@@ -394,7 +399,7 @@ Försöker du sätta `Offer status` eller `Source` i steg 1 avbryter uppslagning
|
|
|
394
399
|
|
|
395
400
|
Efter skapandet rör du aldrig `Request status` igen. Då härleds den av Asana-regeln ur `Offer status`.
|
|
396
401
|
|
|
397
|
-
Task name ska vara det förändrade tillståndet, inte uppgiften, samma regel som specrubriken. Finns ingen spec än: använd önskemålets egna ord, och byt namn när specen skrivs.
|
|
402
|
+
Task name ska vara det förändrade tillståndet, inte uppgiften, samma regel som specrubriken. Finns ingen spec än: använd önskemålets egna ord, och byt namn när specen skrivs. Men namnbytet förutsätter att `Original request title` bär den ursprungliga rubriken och att den är läst tillbaka, se _Kunden skrev själv på sin bräda_.
|
|
398
403
|
|
|
399
404
|
### Sektion på kundbrädan
|
|
400
405
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haus-tech/haus-workflow",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.0",
|
|
4
4
|
"description": "Haus AI workflow CLI for Claude Code.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -62,8 +62,8 @@
|
|
|
62
62
|
"@types/fs-extra": "11.0.4",
|
|
63
63
|
"@types/node": "22.20.1",
|
|
64
64
|
"@types/semver": "7.8.0",
|
|
65
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
66
|
-
"@typescript-eslint/parser": "8.
|
|
65
|
+
"@typescript-eslint/eslint-plugin": "8.69.0",
|
|
66
|
+
"@typescript-eslint/parser": "8.69.0",
|
|
67
67
|
"c8": "11.0.0",
|
|
68
68
|
"esbuild": "0.28.2",
|
|
69
69
|
"eslint": "9.39.5",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"lefthook": "1.13.6",
|
|
72
72
|
"prettier": "3.9.6",
|
|
73
73
|
"release-it": "20.2.1",
|
|
74
|
-
"tsx": "4.23.
|
|
74
|
+
"tsx": "4.23.13",
|
|
75
75
|
"typescript": "5.9.3"
|
|
76
76
|
},
|
|
77
77
|
"engines": {
|