@haus-tech/haus-workflow 5.0.0 → 5.1.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 +13 -0
- package/dist/cli.js +913 -751
- package/library/catalog/manifest.json +67 -61
- package/library/global/agents/request-assessor.md +10 -2
- package/library/global/agents/request-specifier-eskalerad.md +8 -0
- package/library/global/agents/request-specifier.md +8 -3
- package/library/global/skills/request/SKILL.md +590 -227
- package/library/global/skills/request/scripts/archive.mjs +736 -59
- package/library/global/skills/request/scripts/compare-scores.mjs +119 -13
- package/library/global/skills/request/scripts/contract-check.mjs +268 -40
- package/library/global/skills/request/scripts/kontroll.mjs +622 -0
- package/library/global/skills/request/scripts/korning.mjs +1502 -0
- package/library/global/skills/request/scripts/lib.mjs +477 -5
- package/library/global/skills/request/scripts/precheck.mjs +132 -5
- package/library/global/skills/request/scripts/report.mjs +85 -14
- package/library/global/skills/request/scripts/svep.mjs +640 -0
- package/library/global/skills/request-assess-impact/SKILL.md +45 -4
- package/library/global/skills/request-score/SKILL.md +51 -11
- package/library/global/skills/request-score/references/poangskala.md +3 -0
- package/library/global/skills/request-sync/SKILL.md +3 -3
- package/library/global/skills/request-write-spec/SKILL.md +9 -4
- package/library/global/skills/request-write-spec/references/specformat.md +48 -0
- package/package.json +1 -1
|
@@ -87,7 +87,7 @@ Testfrågan: **skulle användaren märka skillnad mellan alternativen?**
|
|
|
87
87
|
|
|
88
88
|
**Nej** — delad komponent eller speciallösning, vilket mönster som återanvänds, var koden hamnar, hur något lagras när beteendet blir detsamma. Det här är ditt beslut. Välj det som är bäst för systemet på sikt och redovisa varför.
|
|
89
89
|
|
|
90
|
-
**Ja** — funktionen beter sig olika, något ingår eller inte, användaren ser eller får olika saker. Då är det inte ditt val. Det är en fråga specen skulle ha besvarat, och den ska tillbaka dit. Skriv ut
|
|
90
|
+
**Ja** — funktionen beter sig olika, något ingår eller inte, användaren ser eller får olika saker. Då är det inte ditt val. Det är en fråga specen skulle ha besvarat, och den ska tillbaka dit. Skriv ut valet i granskarblocket under _Obesvarade utfallsval_ med alternativen. Etiketten på _Avvikelse mot specen_ blir `precisering` så länge minst ett listat alternativ levererar specens Problem; `motsägelse` bara när inget gör det.
|
|
91
91
|
|
|
92
92
|
Design, utseende, flöde och UX hör alltid till den andra kategorin.
|
|
93
93
|
|
|
@@ -114,10 +114,40 @@ Analysen som ett dokument, en sida. Sedan ett kort block till granskaren:
|
|
|
114
114
|
## Till granskaren
|
|
115
115
|
|
|
116
116
|
**Ej verifierat:** [vad du inte kunnat belägga i koden, och varför]
|
|
117
|
-
**Avvikelse mot specen:** [
|
|
118
|
-
**Obesvarade utfallsval:** [
|
|
117
|
+
**Avvikelse mot specen:** <ingen | precisering | motsägelse>. [fritext: vad koden säger och vad specen förutsätter]
|
|
118
|
+
**Obesvarade utfallsval:** [inga, eller en listpunkt per val ("- "), se nedan]
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
### Avvikelse mot specen
|
|
122
|
+
|
|
123
|
+
Raden börjar ALLTID med en av tre etiketter, som första ord efter kolonet.
|
|
124
|
+
Formkontrollen läser etiketten, och poängsättaren agerar på den. En rad med
|
|
125
|
+
bara fritext ("bör tillbaka till specen") är osynlig för båda: det var så två
|
|
126
|
+
motsägelser i samma ärende prissattes i stället för att stoppas.
|
|
127
|
+
|
|
128
|
+
- `ingen`: koden stämmer med det specen förutsätter.
|
|
129
|
+
- `precisering`: specen lämnar något öppet som koden fyller i utan att specen
|
|
130
|
+
blir fel, till exempel exakt var ett fält hamnar i en befintlig vy. Skriv
|
|
131
|
+
vad du preciserat; det blir en förutsättning i förslaget, aldrig ett stopp.
|
|
132
|
+
- `motsägelse`: specen förutsätter något som inte stämmer i systemet, eller en
|
|
133
|
+
punkt går inte att leverera som den står. Posten går tillbaka till specen
|
|
134
|
+
utan poäng. Skriv vad som inte stämmer och var i koden det syns. Etiketten
|
|
135
|
+
får bara sättas när _Obesvarade utfallsval_ är `inga` eller när varje listat
|
|
136
|
+
alternativ är struket (se nedan). Listar du ett alternativ som löser
|
|
137
|
+
problemet är etiketten `precisering`, och poängsättarens fyrstegsregel
|
|
138
|
+
avgör. Formkontrollen fäller `motsägelse` med ostrukna alternativ.
|
|
139
|
+
|
|
140
|
+
Efter etiketten följer fritexten som förut. Flera avvikelser: etiketten är den
|
|
141
|
+
allvarligaste av dem (motsägelse väger över precisering), och varje avvikelse
|
|
142
|
+
får en egen mening.
|
|
143
|
+
|
|
144
|
+
### Beroenden i arbetskopian
|
|
145
|
+
|
|
146
|
+
Prompten bär `DEPS: installerade | saknas`. Vid `saknas` finns inga
|
|
147
|
+
installerade paket i arbetskopian: verifiera aldrig genom att installera
|
|
148
|
+
något, och redovisa det du inte kunnat belägga i paketen (exporter, versioner,
|
|
149
|
+
API-ytor) under _Ej verifierat_ med orsaken "beroenden ej installerade".
|
|
150
|
+
|
|
121
151
|
### Obesvarade utfallsval
|
|
122
152
|
|
|
123
153
|
Ett utfallsval som specen lämnat öppet skrivs ut med tre saker, och alla tre behövs:
|
|
@@ -132,12 +162,23 @@ Ett utfallsval som specen lämnat öppet skrivs ut med tre saker, och alla tre b
|
|
|
132
162
|
kunna beskriva systemet. Skriv "beskriven utifrån X", aldrig "vi väljer X" — valet
|
|
133
163
|
är inte ditt.
|
|
134
164
|
|
|
165
|
+
Varje val är en egen listpunkt på översta nivån som börjar med "- ", och de tre
|
|
166
|
+
delarna ovan (alternativen, om de skiljer sig i vad som måste byggas, vilket
|
|
167
|
+
alternativet analysen är skriven utifrån) skrivs på indenterade underrader
|
|
168
|
+
under den punkten, inte som egna listpunkter. Formkontrollen räknar bara
|
|
169
|
+
listpunkter på kolumn 0; en underrad räknas inte som ett eget alternativ.
|
|
170
|
+
|
|
171
|
+
**Struket alternativ.** Ett alternativ som inte löser specens _Problem_ raderas inte,
|
|
172
|
+
det stryks: den översta listpunkten (samma nivå som alternativets "- ") börjar med
|
|
173
|
+
`struket:` (engelska: `struck:`) följt av skälet, prefixet flyttas aldrig ner till en
|
|
174
|
+
underrad. Så syns det att alternativet prövats.
|
|
175
|
+
|
|
135
176
|
Skälet till punkt 2: den som poängsätter posten har inte repot och kan inte se om
|
|
136
177
|
alternativen kostar olika. Utan din rad måste den anta det värsta och stoppa posten,
|
|
137
178
|
även när båda vägarna är samma arbete. Det är den vanligaste orsaken till att en post
|
|
138
179
|
studsar tillbaka till specen i onödan.
|
|
139
180
|
|
|
140
|
-
|
|
181
|
+
Avvikelseraden är den viktigaste. Förutsätter specen något som inte stämmer i systemet är det ett fel som ska tillbaka till specen, inte något som ska poängsättas, och etiketten `motsägelse` är det som gör att det faktiskt händer.
|
|
141
182
|
|
|
142
183
|
## Vad du aldrig gör
|
|
143
184
|
|
|
@@ -35,7 +35,7 @@ Poäng sätts bara på en post som går att bygga. Fem utfall stoppar poängsät
|
|
|
35
35
|
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
36
36
|
| `KONCEPT` | Formen är okänd — designfråga, oavgjort vägval, flera lösningsvägar utan beslut | Egen post som levererar ett förslag och en poäng på bygget |
|
|
37
37
|
| `DIAGNOS` | Orsaken är okänd och går att undersöka. Gäller framför allt fel där ingen vet varför något är trasigt | Tidsboxad undersökning som levererar besked och en poängsatt åtgärd |
|
|
38
|
-
| `TILLBAKA_TILL_SPEC` |
|
|
38
|
+
| `TILLBAKA_TILL_SPEC` | Påverkansanalysen anger `motsägelse` under _Avvikelse mot specen_ (specen förutsätter något som inte stämmer), eller inget alternativ löser problemet (steg 2 nedan) | Specen kompletteras, sedan ny körning |
|
|
39
39
|
| `DELA_UPP` | Posten går inte att ringa in på egen hand — se nedan | Ny analysrunda som pekar ut delarna, sedan en körning per del |
|
|
40
40
|
| `ESKALERA` | Bedömningen kräver en människa: ett prisbärande avgörande som inte får vila på en gissning, och som varken är en delningsfråga (`DELA_UPP`) eller ett hål i underlaget (`INPUT_SAKNAS`) | Posten visas för en människa; skriv i `notes` vilken fråga och varför |
|
|
41
41
|
|
|
@@ -62,6 +62,26 @@ den `OVER_SKALAN` och offereras — den delas inte vidare.
|
|
|
62
62
|
**En post som redan har poängsatta delar poängsätts aldrig som helhet.** Föräldern bär
|
|
63
63
|
summan av sina delar, inte en egen siffra.
|
|
64
64
|
|
|
65
|
+
### Motsägelse först
|
|
66
|
+
|
|
67
|
+
Påverkansanalysens granskarblock börjar raden _Avvikelse mot specen_ med en
|
|
68
|
+
etikett: `ingen`, `precisering` eller `motsägelse`. Läs den innan något annat.
|
|
69
|
+
|
|
70
|
+
`motsägelse` betyder att specen förutsätter något som inte stämmer i systemet,
|
|
71
|
+
eller att en punkt inte går att leverera som den står. Etiketten är satt bara
|
|
72
|
+
när analysen inte listar något ostruket alternativ (ADR-0117); formkontrollen
|
|
73
|
+
har redan fällt en analys som bär `motsägelse` tillsammans med alternativ, så
|
|
74
|
+
du möter aldrig det fallet. Då är utfallet
|
|
75
|
+
`TILLBAKA_TILL_SPEC`, utan undantag och före fyrstegsregeln nedan: en poäng på
|
|
76
|
+
en spec som motsäger koden prissätter något som inte går att bygga. Skriv i
|
|
77
|
+
`customer_rationale`, i kundens språk, vad som behöver avgöras. Kontrakts-
|
|
78
|
+
kontrollen fäller varje annat utfall när analysen bär `motsägelse`, och
|
|
79
|
+
orkestratorn dispatchar dig normalt inte alls i det läget.
|
|
80
|
+
|
|
81
|
+
`precisering` är ingen avvikelse att stoppa på: analysen har fyllt i något
|
|
82
|
+
specen lämnade öppet utan att specen blev fel. Det preciserade går in i
|
|
83
|
+
`assumptions_stated` som en förutsättning. `ingen` kräver inget.
|
|
84
|
+
|
|
65
85
|
### Obesvarade utfallsval
|
|
66
86
|
|
|
67
87
|
Påverkansanalysens granskarblock listar under _Obesvarade utfallsval_ de val specen
|
|
@@ -119,10 +139,14 @@ mellan två körningar. Ringa in i stället, i fyra steg. Alla fyra redovisas i
|
|
|
119
139
|
Får du inget golv: posten är mindre än A1 och får A1:s poäng. Skalans nedre ände är
|
|
120
140
|
ändå dominerad av den fasta processavgiften.
|
|
121
141
|
|
|
122
|
-
Får du inget tak: posten är större än skalans högsta referensuppdrag.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
142
|
+
Får du inget tak: posten är större än skalans högsta referensuppdrag. Du måste ha
|
|
143
|
+
jämfört mot skalans översta ankare (A16) och redovisat det i `bracket.steps` innan du
|
|
144
|
+
säger det; ett "inget tak" utan den jämförelsen fälls av kontraktskontrollen. Sätt då
|
|
145
|
+
`DELA_UPP` och ingen poäng, så att posten först prövas i delar. Är posten redan en
|
|
146
|
+
split-del (`split.part` i underlaget, en tidigare `DELA_UPP`) sätter du i stället
|
|
147
|
+
`OVER_SKALAN`: underlaget för den nivån är för tunt att jämföra mot, och posten
|
|
148
|
+
offereras separat. En buntdel (`bundle.part`, flera specar ur samma önskemål) är inte
|
|
149
|
+
en split-del; på en buntdel utan tak är utfallet `DELA_UPP`.
|
|
126
150
|
|
|
127
151
|
**Steg 3 — snäva in.** Gå igenom referensuppdragen mellan golv och tak. För varje: är
|
|
128
152
|
posten större eller mindre, och på vilken grund? Fortsätt tills du har två
|
|
@@ -153,8 +177,10 @@ repot saknar testsvit. Räkna bara det manuella arbete som återstår när en fu
|
|
|
153
177
|
testsvit gjort sitt: det som kräver en människa av sin natur, alltså kontroll mot en
|
|
154
178
|
extern tjänsts testläge, visuell granskning, eller genomgång på flera enheter eller i
|
|
155
179
|
flera miljöer. Saknas testsviten är det inte en rabatt: täckningen byggs som en egen
|
|
156
|
-
post före ändringen och poängsätts för sig.
|
|
157
|
-
som saknar täckning,
|
|
180
|
+
post före ändringen och poängsätts för sig. Fyll då `coverage_post` med `yta` (den
|
|
181
|
+
yta som saknar täckning, i kundens språk) och `omfattning` (en mening om vad
|
|
182
|
+
täckningsposten bygger). Fältet är det som gör att posten kan skapas, en not i
|
|
183
|
+
`notes` räcker inte. Utelämna fältet helt när antagandet inte görs.
|
|
158
184
|
|
|
159
185
|
**Vad som händer om det blir fel.** Felaktig betalning, felaktig åtkomst till någon
|
|
160
186
|
annans uppgifter, förlorad data eller bruten befintlig funktion väger tungt. Fel text
|
|
@@ -179,6 +205,10 @@ uppdrag av en typ som saknas i skalan poängsätts mot de närmaste i storlek, i
|
|
|
179
205
|
någon påhittad justering. Skriv ut vilken typ du bedömt posten som — den loggas för att
|
|
180
206
|
kunna mäta i efterhand om någon typ hamnar systematiskt fel.
|
|
181
207
|
|
|
208
|
+
`type` är ett av översiktstabellens fem värden, ordagrant: Kundvänd funktion, Underhåll,
|
|
209
|
+
Teknisk uppsättning, Integration, Internt verktyg. Saknar posten en självklar typ, välj
|
|
210
|
+
den närmaste och skriv resonemanget under `notes`, aldrig i själva värdet.
|
|
211
|
+
|
|
182
212
|
## Grindläget
|
|
183
213
|
|
|
184
214
|
Körs skillen på en fullständig implementationsplan efter kundens godkännande, sätt
|
|
@@ -205,7 +235,7 @@ Bygger fullplanen ett annat vägval än det som såldes är det en händelse att
|
|
|
205
235
|
"floor": { "anchor": "", "score": null, "why": "" },
|
|
206
236
|
"ceiling": { "anchor": "", "score": null, "why": "" },
|
|
207
237
|
"between": ["", ""],
|
|
208
|
-
"steps": []
|
|
238
|
+
"steps": [{ "anchor": "A12", "relation": "storre | mindre | lika", "grund": "" }]
|
|
209
239
|
},
|
|
210
240
|
"drivers": [],
|
|
211
241
|
"confidence": "hog | medel | lag",
|
|
@@ -214,6 +244,7 @@ Bygger fullplanen ett annat vägval än det som såldes är det en händelse att
|
|
|
214
244
|
"alternatives": [],
|
|
215
245
|
"dependencies": [],
|
|
216
246
|
"notes": [],
|
|
247
|
+
"coverage_post": { "yta": "…", "omfattning": "…" },
|
|
217
248
|
"customer_rationale": "",
|
|
218
249
|
"guard_diff": []
|
|
219
250
|
}
|
|
@@ -222,9 +253,13 @@ Bygger fullplanen ett annat vägval än det som såldes är det en händelse att
|
|
|
222
253
|
`score` sätts bara när `outcome` är `POANG`, och alltid på skalans upplösning: steg om
|
|
223
254
|
0,25 under 3 poäng, hela poäng från 3 och uppåt.
|
|
224
255
|
|
|
225
|
-
`bracket.steps` är jämförelserna från steg 3, en per referensuppdrag du vägde mot
|
|
226
|
-
|
|
227
|
-
|
|
256
|
+
`bracket.steps` är jämförelserna från steg 3, en per referensuppdrag du vägde mot. Varje
|
|
257
|
+
steg är ett objekt med exakt tre nycklar: `anchor` (ankarets id, `A12`), `relation`
|
|
258
|
+
(`storre` om posten är större än ankaret, `mindre` om den är mindre, `lika` om den är
|
|
259
|
+
jämbördig; ASCII, samma stil som `hog/medel/lag`) och `grund` (på vilken grund, en eller
|
|
260
|
+
två meningar). Inga andra nycklar, ingen poäng i steget: ankarets poäng står i skalan.
|
|
261
|
+
Det är det som gör poängen granskbar, och det är stegen driftvakten jämför mellan två
|
|
262
|
+
körningar. En poäng utan inringning är inte ett giltigt utfall.
|
|
228
263
|
|
|
229
264
|
`drivers` är de två eller tre faktorer som mest avgjorde placeringen. Varje driver är
|
|
230
265
|
ett objekt: `pastaende` (faktorn med dina ord, utan citattecken) och `ankare`
|
|
@@ -246,6 +281,11 @@ hit och ska utelämnas helt. Är listan tom fanns bara en väg som löser proble
|
|
|
246
281
|
`notes` är iakttagelser som inte hör till poängen men som någon bör känna till, till
|
|
247
282
|
exempel att ett repo saknar testsvit.
|
|
248
283
|
|
|
284
|
+
`coverage_post` är valfritt: bara när repot saknar den täckning skalan förutsätter
|
|
285
|
+
(se "Vad du jämför på"). `yta` är den yta som saknar täckning, i kundens språk;
|
|
286
|
+
`omfattning` är en mening om vad täckningsposten bygger. Utelämna fältet helt när
|
|
287
|
+
antagandet inte görs.
|
|
288
|
+
|
|
249
289
|
**Ett antagande som analysen flaggat som overifierat ska alltid ut.** Går det att
|
|
250
290
|
undersöka hör det till `notes` med hur det undersöks. Går det inte att undersöka blir
|
|
251
291
|
det ett villkor i `conditions`, formulerat som "bygger på att X; faller X tidigt
|
|
@@ -39,6 +39,9 @@ saknar tester i dag.
|
|
|
39
39
|
Skälet är att alla sjutton referensuppdrag är satta som om en testsvit fanns. Jämförs en
|
|
40
40
|
post mot dem på annan grund mäter den inte samma sak, och skalan slutar hålla ihop.
|
|
41
41
|
|
|
42
|
+
Saknar repot täckningen: sätt poängen som om den fanns och fyll `coverage_post` i
|
|
43
|
+
utfallet, så att täckningen blir en egen post före ändringen och poängsätts för sig.
|
|
44
|
+
|
|
42
45
|
Saknas täckningen är det inte en rabatt. Den byggs då som en egen post före ändringen
|
|
43
46
|
och poängsätts för sig. Räkna här bara det manuella arbete som återstår när testerna
|
|
44
47
|
gjort sitt: kontroll mot en extern tjänsts testläge, visuell granskning, och genomgång
|
|
@@ -17,7 +17,7 @@ Skapa aldrig en request direkt på samlingsbrädan. En request som föds där sy
|
|
|
17
17
|
|
|
18
18
|
## Sessionsstart
|
|
19
19
|
|
|
20
|
-
Läs `.haus/request.json` i repo-roten:
|
|
20
|
+
Läs `.haus-workflow/request.json` i repo-roten:
|
|
21
21
|
|
|
22
22
|
```json
|
|
23
23
|
{
|
|
@@ -39,7 +39,7 @@ Brädnamn är inte unika och flera brädor kan höra till samma kund. Använd al
|
|
|
39
39
|
|
|
40
40
|
## Uppsättning
|
|
41
41
|
|
|
42
|
-
Kör den här när `.haus/request.json` saknas, och när användaren ber om det — "sätt upp", "koppla repot", "kör uppsättningen igen". Ett steg i taget, med användarens svar emellan. Fråga aldrig allt på en gång.
|
|
42
|
+
Kör den här när `.haus-workflow/request.json` saknas, och när användaren ber om det — "sätt upp", "koppla repot", "kör uppsättningen igen". Ett steg i taget, med användarens svar emellan. Fråga aldrig allt på en gång.
|
|
43
43
|
|
|
44
44
|
**1 — Var är repo-roten?**
|
|
45
45
|
|
|
@@ -399,7 +399,7 @@ Task name ska vara det förändrade tillståndet, inte uppgiften, samma regel so
|
|
|
399
399
|
|
|
400
400
|
### Sektion på kundbrädan
|
|
401
401
|
|
|
402
|
-
- **Finns `customer_section` i konfigurationen:** använd den, men verifiera först att sektionen fortfarande finns på brädan — sektioner byter namn och tas bort. Är den borta: fråga vilken som gäller nu och uppdatera `.haus/request.json`.
|
|
402
|
+
- **Finns `customer_section` i konfigurationen:** använd den, men verifiera först att sektionen fortfarande finns på brädan — sektioner byter namn och tas bort. Är den borta: fråga vilken som gäller nu och uppdatera `.haus-workflow/request.json`.
|
|
403
403
|
- **Saknas `customer_section` och brädan har flera sektioner:** fråga **en gång** och använd svaret för hela omgången. Skapar du tio tasks ur ett mejl ska du inte fråga tio gånger. Erbjud att spara svaret i konfigurationsfilen så frågan inte återkommer.
|
|
404
404
|
- **Har brädan bara en sektion:** fråga inte.
|
|
405
405
|
- **Spänner omgången flera sektioner** — ett mejl innehåller ofta önskemål som hör till olika projekt — gissa inte utifrån innehållet. Fråga en gång om alla ska till samma sektion, och be om fördelningen om svaret är nej.
|
|
@@ -55,7 +55,7 @@ Missar du en sådan fråga blir den ett tyst val längre fram i kedjan, fattat a
|
|
|
55
55
|
|
|
56
56
|
**En skärm.** Behöver specen skrollas innehåller den nästan alltid två beslut.
|
|
57
57
|
|
|
58
|
-
**Kundens språk.** Specen läses av kunden. Inga interna termer (protokolltermer, repo-namn, "backlog-post"), ingen story-mall ("Som X vill jag Y").
|
|
58
|
+
**Kundens språk.** Specen läses av kunden. Inga interna termer (protokolltermer, repo-namn, "backlog-post"), ingen story-mall ("Som X vill jag Y"). Specen skrivs på önskemålets språk, svenska eller engelska, och rubrikerna tas ur specformatets rubriktabell på samma språk som brödtexten, aldrig blandat. Granskarblocket är internt och alltid på svenska. Anger prompten `SPRÅK:` är det avgjort där.
|
|
59
59
|
|
|
60
60
|
## Normalfallet: en rubrik och en mening
|
|
61
61
|
|
|
@@ -88,11 +88,11 @@ Tre situationer, tre olika hanteringar — och ingen av dem är att fråga:
|
|
|
88
88
|
|
|
89
89
|
**Ett värde någon annan ska bestämma** (t.ex. "gräns vid 12, 18 eller 24 månader?"): gör värdet konfigurerbart i lösningen så att frågan upphör att vara en fråga. "Gränsen ändras utan nytt bygge" är en utfallspunkt; det exakta värdet är en inställning, inte ett spec-beslut.
|
|
90
90
|
|
|
91
|
-
**Ett vägval som inte går att avgöra utan kunden** — designfrågor, UX-riktning, okänd felorsak, eller ett val som påverkar andra poster: skriv INTE en låtsasspec.
|
|
91
|
+
**Ett vägval som inte går att avgöra utan kunden** — designfrågor, UX-riktning, okänd felorsak, eller ett val som påverkar andra poster: skriv INTE en låtsasspec. Skriv posten i **kandidatformen** (se `references/specformat.md`, avsnittet Kandidatform): rubriken, direkt under den markörraden `**Koncept-kandidat**` (formen okänd) eller `**Diagnos-kandidat**` (orsaken okänd), på engelska `**Concept candidate**` / `**Diagnosis candidate**`, sedan **Problem** och det som är känt under Ingår inte, Kräver eller Villkor. Ingen Lösning och ingen När det är klart: en kandidat har inget utfall att lova, och med en Lösning är det ingen kandidat längre. Formen är entydig med flit, formkontrollen läser markören och flödet stoppar posten som KONCEPT eller DIAGNOS utan analys eller poäng. Nämn kandidaten även under _Flaggor_ i granskarblocket, med vad som behöver avgöras.
|
|
92
92
|
|
|
93
93
|
## Output
|
|
94
94
|
|
|
95
|
-
Skriv varje spec som ett eget block, exakt enligt formatet. Efter
|
|
95
|
+
Skriv varje spec som ett eget block, exakt enligt formatet. Efter VARJE spec: ett eget **granskarblock** (`## Till granskaren`) för just den specen, internt, följer aldrig med till kund. I en bunt bär varje block bara det som gäller sin egen spec; det som gäller bunten som helhet (att delarna hör ihop, ordningen dem emellan) står under Flaggor i första specens block. Ett block delat över flera specar fälls av formkontrollen (ADR-0118):
|
|
96
96
|
|
|
97
97
|
```
|
|
98
98
|
---
|
|
@@ -101,14 +101,19 @@ Skriv varje spec som ett eget block, exakt enligt formatet. Efter alla specar: e
|
|
|
101
101
|
**Antaganden:** [tolkningar av otydligt underlag, en rad var — "tom" om inga]
|
|
102
102
|
**Vägval jag gjort:** [beslut du fattat på eget bevåg + en rads motivering — märk ut de som rör vad användaren får, de är specbeslut och det är dem granskaren måste titta på]
|
|
103
103
|
**Öppna utfallsval:** [frågor om vad användaren får som inte gick att avgöra ur underlaget — "inga" om inga. Rena byggbeslut hör inte hit]
|
|
104
|
-
**
|
|
104
|
+
**Prisavgörande öppet val:** [nej · eller "ja: <valet i en mening, i kundens språk>" när alternativen skiljer sig i vad som måste byggas och du inte kan välja ett utan att gissa kundens avsikt. Ett ja stoppar posten före analys tills valet är avgjort; ett val som redan står under "Avgjorda val" i KÄLLOR flaggas aldrig]
|
|
105
|
+
**Flaggor:** [Koncept-/Diagnos-kandidat med skäl (specen själv bär markörraden, det här är granskarens sammanfattning) · misstänkt bunt/beroende till annan post · sådant som ser ut att röra behörighet, betalning, oåterkallelig data eller personuppgifter]
|
|
105
106
|
**Struket ur underlaget:** [tidsord, belopp, interna anteckningar som inte hör hemma i spec]
|
|
106
107
|
```
|
|
107
108
|
|
|
109
|
+
**Avgjorda val i KÄLLOR.** Under `## Avgjorda val` i KÄLLOR står val en människa redan tagit. De är fast indata: skriv specen utifrån dem och flagga dem aldrig som öppna eller prisavgörande.
|
|
110
|
+
|
|
108
111
|
Behörighets-/betalnings-/dataflaggan finns för att poängsättningen väger sådana poster tyngre — granskaren ska inte behöva upptäcka det själv.
|
|
109
112
|
|
|
110
113
|
De två vägvalsraderna är åtskilda för att de kräver olika sak av granskaren: den första är beslut som redan är fattade och bara ska bekräftas, den andra är hål i specen som måste fyllas innan posten går vidare. Ett öppet utfallsval som ligger kvar i den första raden ser ut som ett fattat beslut och passerar granskningen.
|
|
111
114
|
|
|
115
|
+
Prisavgörande öppet val är det enda i granskarblocket som stoppar posten. Vanliga öppna utfallsval löses av poängsättarens fyrstegsregel; den här raden är för valet där två alternativ ger två olika priser och bara kunden kan välja.
|
|
116
|
+
|
|
112
117
|
## Exempel i korthet
|
|
113
118
|
|
|
114
119
|
Rått önskemål: _"Som chef vill jag själv kunna radera en skattning så att olämpligt innehåll kan tas bort direkt utan att ringa Haus."_
|
|
@@ -34,6 +34,54 @@ Varje spec har exakt de här rubrikerna, i den här ordningen. De tre sista finn
|
|
|
34
34
|
|
|
35
35
|
**Villkor** _(vid behov)_ — när posten vilar på något vi inte kan verifiera i förväg. "Bygger på att X. Faller det avbryter vi utan kostnad."
|
|
36
36
|
|
|
37
|
+
### Språk
|
|
38
|
+
|
|
39
|
+
Specen skrivs på önskemålets språk, svenska eller engelska. Rubrikerna tas ur
|
|
40
|
+
tabellen nedan på samma språk som brödtexten, aldrig blandat: kunden ser
|
|
41
|
+
rubrikerna, och en engelsk spec under svenska rubriker läses som ett
|
|
42
|
+
klipp-och-klistra-fel. Granskarblocket är internt och alltid på svenska.
|
|
43
|
+
Formkontrollen känner båda kolumnerna och fäller en spec som blandar dem.
|
|
44
|
+
|
|
45
|
+
| Svenska | English |
|
|
46
|
+
| ---------------- | ------------ |
|
|
47
|
+
| Problem | Problem |
|
|
48
|
+
| Lösning | Solution |
|
|
49
|
+
| När det är klart | Done when |
|
|
50
|
+
| Ingår inte | Not included |
|
|
51
|
+
| Utseende | Appearance |
|
|
52
|
+
| Kräver | Requires |
|
|
53
|
+
| Villkor | Conditions |
|
|
54
|
+
|
|
55
|
+
### Kandidatform
|
|
56
|
+
|
|
57
|
+
När formen eller orsaken inte går att avgöra utan kunden (designfråga,
|
|
58
|
+
UX-riktning, okänd felorsak) skrivs ingen låtsasspec. Posten skrivs i
|
|
59
|
+
kandidatform: rubriken, en markörrad direkt under den, sedan Problem. Lösning
|
|
60
|
+
och När det är klart finns inte, det är hela poängen: en kandidat har inget
|
|
61
|
+
utfall att lova ännu. Ingår inte, Kräver och Villkor får stå med när de är
|
|
62
|
+
kända.
|
|
63
|
+
|
|
64
|
+
Markörraden är en av två, som egen fetstilsrad:
|
|
65
|
+
|
|
66
|
+
| Svenska | English | Utfall |
|
|
67
|
+
| ---------------------- | ------------------------- | --------------------------------------- |
|
|
68
|
+
| `**Koncept-kandidat**` | `**Concept candidate**` | KONCEPT, formen ska tas fram med kunden |
|
|
69
|
+
| `**Diagnos-kandidat**` | `**Diagnosis candidate**` | DIAGNOS, orsaken ska undersökas först |
|
|
70
|
+
|
|
71
|
+
En kandidat går aldrig till analys eller poängsättning. Formkontrollen läser
|
|
72
|
+
markören och flödet stoppar posten som KONCEPT eller DIAGNOS direkt, så att
|
|
73
|
+
den når kunddialogen utan att kosta en bedömning. Skriver du en kandidat med
|
|
74
|
+
en Lösning är det ingen kandidat längre, och formkontrollen fäller den.
|
|
75
|
+
|
|
76
|
+
> **Förhandsgranskning visar ändringen innan den publiceras**
|
|
77
|
+
>
|
|
78
|
+
> **Diagnos-kandidat**
|
|
79
|
+
>
|
|
80
|
+
> **Problem**
|
|
81
|
+
> Förhandsgranskningen svarar "Unable to connect" i skarpt läge medan samma
|
|
82
|
+
> sida fungerar lokalt. Ingen vet ännu om felet sitter i vår konfiguration
|
|
83
|
+
> eller i tjänsten bakom.
|
|
84
|
+
|
|
37
85
|
---
|
|
38
86
|
|
|
39
87
|
## Reglerna
|