@haus-tech/haus-workflow 5.1.0 → 5.3.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 +18 -0
- package/library/global/agents/request-assessor.md +13 -5
- package/library/global/agents/request-scorer.md +3 -1
- package/library/global/skills/request/SKILL.md +148 -27
- package/library/global/skills/request/scripts/archive.mjs +192 -8
- package/library/global/skills/request/scripts/contract-check.mjs +36 -2
- package/library/global/skills/request/scripts/kontroll.mjs +24 -6
- package/library/global/skills/request/scripts/korning.mjs +183 -50
- package/library/global/skills/request/scripts/lib.mjs +77 -13
- package/library/global/skills/request/scripts/precheck.mjs +16 -0
- package/library/global/skills/request/scripts/report.mjs +37 -2
- package/library/global/skills/request/scripts/svep.mjs +145 -48
- package/library/global/skills/request-assess-impact/SKILL.md +13 -0
- package/library/global/skills/request-score/SKILL.md +6 -0
- package/library/global/skills/request-sync/SKILL.md +23 -19
- package/library/global/skills/request-write-spec/SKILL.md +5 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.3.0](https://github.com/WeAreHausTech/haus-workflow/compare/v5.2.0...v5.3.0) (2026-09-09)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- **request-sync:** Original request title speglar Original request ([#542](https://github.com/WeAreHausTech/haus-workflow/issues/542)) ([cb7afea](https://github.com/WeAreHausTech/haus-workflow/commit/cb7afea56473d493b3f1776a490df778312a1651))
|
|
8
|
+
|
|
9
|
+
## [5.2.0](https://github.com/WeAreHausTech/haus-workflow/compare/v5.1.0...v5.2.0) (2026-09-08)
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
- **request:** avslutning "var posten står" via archive.mjs nasta-steg, Asana-fältnamnen följer poängaxeln ([#530](https://github.com/WeAreHausTech/haus-workflow/issues/530), [#529](https://github.com/WeAreHausTech/haus-workflow/issues/529)) ([#538](https://github.com/WeAreHausTech/haus-workflow/issues/538)) ([2582d12](https://github.com/WeAreHausTech/haus-workflow/commit/2582d12e0a0921318375cf2c6671fb359196cd18))
|
|
14
|
+
- **request:** formkrav på utfallsvalen, språkgrind på kundtexten, assessorns verktyg och egenbygge som prisavgörande ([#520](https://github.com/WeAreHausTech/haus-workflow/issues/520), [#521](https://github.com/WeAreHausTech/haus-workflow/issues/521), [#523](https://github.com/WeAreHausTech/haus-workflow/issues/523), [#524](https://github.com/WeAreHausTech/haus-workflow/issues/524)) ([#539](https://github.com/WeAreHausTech/haus-workflow/issues/539)) ([160d7b4](https://github.com/WeAreHausTech/haus-workflow/commit/160d7b4a72c2187d3975cd6837d790442d127f6c))
|
|
15
|
+
- **request:** mätkedjan bokför effort som begärd, samtidigheten och pid på en pågående körning ([#525](https://github.com/WeAreHausTech/haus-workflow/issues/525), [#526](https://github.com/WeAreHausTech/haus-workflow/issues/526), [#516](https://github.com/WeAreHausTech/haus-workflow/issues/516)) ([#537](https://github.com/WeAreHausTech/haus-workflow/issues/537)) ([fe8d01d](https://github.com/WeAreHausTech/haus-workflow/commit/fe8d01d70394b4c2caa8a3f471f1b408d48abbb1)), closes [#493](https://github.com/WeAreHausTech/haus-workflow/issues/493)
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
- **request:** kundtextfix täcker coverage_post.yta och en lyckad omdispatch bär sitt brott ([#517](https://github.com/WeAreHausTech/haus-workflow/issues/517), [#522](https://github.com/WeAreHausTech/haus-workflow/issues/522)) ([#536](https://github.com/WeAreHausTech/haus-workflow/issues/536)) ([b13a8f4](https://github.com/WeAreHausTech/haus-workflow/commit/b13a8f4d206a620ce7fa642c4b9b90bed1e22711))
|
|
20
|
+
|
|
3
21
|
## [5.1.0](https://github.com/WeAreHausTech/haus-workflow/compare/v5.0.1...v5.1.0) (2026-09-03)
|
|
4
22
|
|
|
5
23
|
### Features
|
|
@@ -21,17 +21,25 @@ repot — du läser koden på riktigt. Du frågar aldrig något och skriver inga
|
|
|
21
21
|
katalogen finns och ser ut som rätt projekt innan du börjar), `DEPS:`
|
|
22
22
|
(`installerade` eller `saknas`: vid saknas finns inga paket i arbetskopian,
|
|
23
23
|
installera aldrig något, och redovisa det du inte kunnat belägga i paketen
|
|
24
|
-
under _Ej verifierat_ enligt skillen), `
|
|
24
|
+
under _Ej verifierat_ enligt skillen), `SPRÅK:` (`svenska` eller
|
|
25
|
+
`engelska`: kundens språk, som analysens kundvända delar följer enligt
|
|
26
|
+
skillen), `KÄLLOR:` (källmanifestet specifiern
|
|
25
27
|
fick: grep-träffar och sökvägar från starten, ett underlag att verifiera,
|
|
26
28
|
aldrig ett facit; läs vidare själv där det pekar och belägg varje påstående
|
|
27
29
|
i koden som förut).
|
|
28
30
|
3. Spåra påverkan i koden med Read/Grep/Glob: delad kod, datalagring,
|
|
29
31
|
integrationspunkter, flöden, gränssnitt, testtäckning. Det du inte kan
|
|
30
32
|
verifiera skrivs ordagrant som overifierat, enligt skillen.
|
|
31
|
-
4. Bash får ENDAST användas för läsande git-kommandon
|
|
32
|
-
`git check-ignore`, `git log`, `git grep`
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
4. Bash får ENDAST användas för läsande git-kommandon: `git ls-files`,
|
|
34
|
+
`git check-ignore`, `git log`, `git grep`, `git status` och
|
|
35
|
+
`git rev-parse` — spårningsstatus är ofta analysens tyngsta faktum och
|
|
36
|
+
ska verifieras, inte antas. Kör dem som enkla, fristående kommandon:
|
|
37
|
+
ett `rtk`-prefix behövs aldrig men tillåts (`rtk git log`), aldrig
|
|
38
|
+
`git -C <katalog>` (kör från repo-roten), och aldrig kedjor med `&&` eller
|
|
39
|
+
`;` till något annat än pipe-målen `head`, `grep`, `wc` och `ls`. Allt
|
|
40
|
+
annat nekas tyst av behörighetslagret i headless-läget, och analysen står
|
|
41
|
+
då utan det faktum den skulle ha verifierat. Aldrig kommandon som
|
|
42
|
+
skriver, installerar eller kör kod.
|
|
35
43
|
5. Skillens abortgrindar gäller: saknas spec eller repo, avbryt och säg exakt
|
|
36
44
|
vad som saknas i stället för att gissa.
|
|
37
45
|
|
|
@@ -18,7 +18,9 @@ genom inringning mot skalans ankare, aldrig genom fri estimering.
|
|
|
18
18
|
Läs skalan (`references/poangskala.md`) innan du poängsätter — kan den inte
|
|
19
19
|
läsas: poängsätt inte, returnera felet i klartext.
|
|
20
20
|
2. Läs prompten: `REQUEST_ID:`, `MODE: pricing | guard`, `DELPOST:` (split-läge —
|
|
21
|
-
avgör om ett takfall är `DELA_UPP` eller `OVER_SKALAN`),
|
|
21
|
+
avgör om ett takfall är `DELA_UPP` eller `OVER_SKALAN`), `SPRÅK:`
|
|
22
|
+
(`svenska` eller `engelska`: kundens språk, som varje kundtextfält i
|
|
23
|
+
kuvertet skrivs på; kontrollen fäller fel språk), samt `SPEC:` och
|
|
22
24
|
`PÅVERKANSANALYS:` som ABSOLUTA SÖKVÄGAR (ADR-0099): läs de två filerna
|
|
23
25
|
via Read, ordagrant och i sin helhet — det är ditt underlag (guard-läge:
|
|
24
26
|
även `FULLPLAN:` och `TIDIGARE_POANG:` med förra körningens JSON). Mode
|
|
@@ -302,7 +302,10 @@ Modellkörningar från `utvärdera` bor i ett eget träd och är aldrig prispost
|
|
|
302
302
|
till `experiments` får suffixet `-post`.
|
|
303
303
|
- `experiment.json` bär `varianter: []` i deklarationsordning och `status` per
|
|
304
304
|
körning: `"klar"`, `"ofärdig"`, `"stopp"`, `"väntar på dom"`. Literalerna
|
|
305
|
-
skrivs exakt så, mellanslag och diakritiska tecken inkluderade.
|
|
305
|
+
skrivs exakt så, mellanslag och diakritiska tecken inkluderade. Startraden
|
|
306
|
+
(`"ofärdig"`, "startad, inte avslutad") bär dessutom startarens `pid`
|
|
307
|
+
medan körningen pågår; slutstatusen ersätter raden och tar bort den
|
|
308
|
+
(#516). Äldre filer
|
|
306
309
|
med `baselinemodell` och `kandidatmodell` läses utan fel; nya skrivningar
|
|
307
310
|
använder bara `varianter`. Filen skrivs BARA av `archive.mjs experiment`
|
|
308
311
|
(se `utvärdera` steg 1), aldrig för hand.
|
|
@@ -325,7 +328,10 @@ Modellkörningar från `utvärdera` bor i ett eget träd och är aldrig prispost
|
|
|
325
328
|
REPO-ROT, annars `saknas`; utan repo alltid `saknas`).
|
|
326
329
|
Skriv manifestet till `<katalog>/kallmanifest.md` i varje katalog specen
|
|
327
330
|
arkiveras i (steg 5), så att `bedöm` kan ge assessorn samma manifest utan
|
|
328
|
-
att bygga ett nytt.
|
|
331
|
+
att bygga ett nytt. Manifestets första rad är `SPRÅK: <svenska|engelska>`,
|
|
332
|
+
samma värde som prompten fick: `bedöm` läser språket därifrån till
|
|
333
|
+
assessorns och scorerns `SPRÅK:`-rad och till `kontroll.mjs --sprak`,
|
|
334
|
+
aldrig ur en ny gissning (#521).
|
|
329
335
|
Manifestet har sist sektionen `## Avgjorda val`: varje val som en människa
|
|
330
336
|
avgjort efter ett tidigare stopp, en rad var, ordagrant som svaret gavs;
|
|
331
337
|
`inga` om inga. Specifiern får aldrig flagga ett val som står där.
|
|
@@ -408,6 +414,8 @@ ja: …`), kör `archive.mjs stopp <katalog> --utfall TILLBAKA_TILL_SPEC
|
|
|
408
414
|
det bara på uttrycklig begäran. När en post läggs på brädan: sätt status
|
|
409
415
|
`spec_synced`, döp om slug-katalogen till det myntade gid:t, notera sluggen
|
|
410
416
|
i `former_slug` och uppdatera `request_id` i `state.json`.
|
|
417
|
+
**Avsluta enligt `## Avslutning: var posten står`** (tabellen ur
|
|
418
|
+
`archive.mjs nasta-steg`, brädraden, ISÄR-kontrollen), aldrig utan.
|
|
411
419
|
|
|
412
420
|
## Uppgift: `bedöm`
|
|
413
421
|
|
|
@@ -453,7 +461,9 @@ driftvakt.
|
|
|
453
461
|
Dispatcha `request-assessor` enligt promptmallen — specens granskarblock
|
|
454
462
|
skickas med som internt underlag (samma förtroendedomän; flaggorna där är
|
|
455
463
|
ofta analysens viktigaste ingång). Promptens `KÄLLOR:`-rad bär
|
|
456
|
-
`kallmanifest.md` ur katalogen ordagrant, eller `inga` när filen saknas
|
|
464
|
+
`kallmanifest.md` ur katalogen ordagrant, eller `inga` när filen saknas,
|
|
465
|
+
och `SPRÅK:`-raden bär manifestets `SPRÅK:`-värde (#521: kundtextens
|
|
466
|
+
språk gissas aldrig om, samma rad går till scorern i steg 4);
|
|
457
467
|
assessorn verifierar manifestet själv och ska aldrig ta det för sant
|
|
458
468
|
(ADR-0113: assessorn utforskade repot från noll trots att manifestet redan
|
|
459
469
|
fanns). Arkivera svaret som `impact.md`
|
|
@@ -480,10 +490,15 @@ driftvakt.
|
|
|
480
490
|
Ingen prislista, inget repo, inga andra posters dokument i prompten.
|
|
481
491
|
5. **Ankarlösning och kontraktskontroll.** Skriv agentens hela svarstext (JSON
|
|
482
492
|
plus svansrader) till fil och kör
|
|
483
|
-
`node <skillkatalog>/scripts/kontroll.mjs <svar.txt> <spec.md> <impact.md> --expect-id <katalogens id> --ut <svar.json> --fixa-kundtext --state <katalog>/state.json
|
|
493
|
+
`node <skillkatalog>/scripts/kontroll.mjs <svar.txt> <spec.md> <impact.md> --expect-id <katalogens id> --ut <svar.json> --fixa-kundtext --state <katalog>/state.json --sprak <svenska|engelska>`.
|
|
484
494
|
`--state` ger contract-check split-status: `OVER_SKALAN` på något som inte
|
|
485
495
|
är en split-del fälls, och ett inget-tak-utfall utan steg mot A16 fälls
|
|
486
|
-
(#503).
|
|
496
|
+
(#503). `--sprak` ger contract-check kundtextens språk, samma värde som
|
|
497
|
+
promptens `SPRÅK:`-rad (ur `experiment.json` i utvärdera, ur `SPRÅK:` i
|
|
498
|
+
`kallmanifest.md` här): kundtext med minst två funktionsord ur fel språk
|
|
499
|
+
fälls som BROTT och går till omdispatch, aldrig till kundtextfixen, som
|
|
500
|
+
byter ord men inte översätter (#521).
|
|
501
|
+
Scriptet strippar svansraderna (`MODELL:`, `LÄSTA:`, ev. `AVVIKELSE:`),
|
|
487
502
|
reparerar det dispatchern redan vet (`request_id`, enumform,
|
|
488
503
|
siffersträngar, LÄSTA-radens sökvägsform) och kör check-lasta,
|
|
489
504
|
`resolve-anchors.mjs` (beläggsankare till ordagranna källblock;
|
|
@@ -599,7 +614,9 @@ ref-hash.mjs på request-score/references/poangskala.md>
|
|
|
599
614
|
`detaljer <post>` gör det. Skriv-tillbaka till brädan sker via request-sync
|
|
600
615
|
i huvudkonversationen, bara på uttrycklig begäran — och det är den flytten
|
|
601
616
|
som tar posten ✅ Spec ok → ⚖️ Poängsättning redo för granskning enligt
|
|
602
|
-
syncens regler.
|
|
617
|
+
syncens regler. **Avsluta enligt `## Avslutning: var posten står`**
|
|
618
|
+
(tabellen ur `archive.mjs nasta-steg`, brädraden, ISÄR-kontrollen, och
|
|
619
|
+
stopputfall eller OLIKA som ett val användaren ska ta), aldrig utan.
|
|
603
620
|
|
|
604
621
|
**Stopputfall routas, aldrig tolkas.** Ett stopputfall arkiveras som varvets
|
|
605
622
|
fil (steg 7), statusen blir `assessed`, aldrig `priced`, och posten routas:
|
|
@@ -660,6 +677,9 @@ missta:
|
|
|
660
677
|
bekräftelsefråga. Säg tydligt att detta inte syns för någon annan än arkivet.
|
|
661
678
|
- Verben rör Offer status och kommentarer — aldrig Score, Class eller
|
|
662
679
|
beskrivningsfält.
|
|
680
|
+
- **Avsluta enligt `## Avslutning: var posten står`** när posten har en
|
|
681
|
+
arkivkatalog: tabellen ur `archive.mjs nasta-steg` plus brädraden, så
|
|
682
|
+
flytten syns tillsammans med vad den öppnar för (`bedöm`, kund, inget).
|
|
663
683
|
|
|
664
684
|
## Uppgift: `döm`
|
|
665
685
|
|
|
@@ -724,6 +744,10 @@ körd igen för samma post, vars återupptagbarhetsregel omvärderar en
|
|
|
724
744
|
Notisen är råmaterial till nästa instruktionsversion (mekanismen bakom
|
|
725
745
|
v0.2 till v0.6) och läses aldrig in i någon prompt. `archive.mjs kalibrering <arkivrot>`
|
|
726
746
|
listar alla.
|
|
747
|
+
4. **Avsluta enligt `## Avslutning: var posten står`**: tabellen ur
|
|
748
|
+
`archive.mjs nasta-steg` visar om spärren lyfts (raden pekar då vidare på
|
|
749
|
+
sync/godkänn) eller fortfarande väntar (`döm` igen efter en beställd
|
|
750
|
+
omkörning), plus brädraden.
|
|
727
751
|
|
|
728
752
|
**Granskarutslag skrivs som citat, aldrig som prosa.** När granskarens
|
|
729
753
|
beslut ska in i underlaget, alltså när det ändrar eller preciserar en
|
|
@@ -901,12 +925,13 @@ Frågan gäller alltså kostnaden, inte risken att förlora data.
|
|
|
901
925
|
node <skillkatalog>/scripts/svep.mjs --repo-rot <abs> --konto <namn> \
|
|
902
926
|
--modell <modell> [--modell <modell>]... \
|
|
903
927
|
--exp experiments/<slug> [--exp experiments/<slug>]... \
|
|
904
|
-
[--tickets-parallellt 2] [--om | --hoppa-över]
|
|
928
|
+
[--tickets-parallellt 2] [--modeller-parallellt 4] [--om | --hoppa-över]
|
|
905
929
|
```
|
|
906
930
|
|
|
907
931
|
Varje varv startas av `svep.mjs` som EN `korning.mjs`-process, och det är
|
|
908
|
-
det som ger mätningen gratis. Parallellregeln: två tickets åt gången,
|
|
909
|
-
modeller för en ticket
|
|
932
|
+
det som ger mätningen gratis. Parallellregeln: två tickets åt gången, högst
|
|
933
|
+
fyra modeller för en ticket i flykt (`--modeller-parallellt`, #526), och
|
|
934
|
+
nästa ticket startar först när en tickets samtliga
|
|
910
935
|
modeller är klara. Det är säkert därför att körningskatalogerna redan är
|
|
911
936
|
isolerade (`ny-korning` är atomisk, varje varv har egen katalog, manifest
|
|
912
937
|
och repo läses bara) och det enda delade tillståndet, `experiment.json`,
|
|
@@ -943,7 +968,12 @@ Frågan gäller alltså kostnaden, inte risken att förlora data.
|
|
|
943
968
|
`matning.json`: en process kan inte känna sin egen klocktid när arbetet
|
|
944
969
|
ligger i bakgrundsprocesser, och stegsvarens `duration_ms` räknar inte in väntan på dem.
|
|
945
970
|
`korning.json` bär summan över stegen, därav den egna filen. En kraschad körning har en klocktid, ofta det intressantaste
|
|
946
|
-
talet i tabellen, därför skrivs `matning.json` även vid krasch.
|
|
971
|
+
talet i tabellen, därför skrivs `matning.json` även vid krasch. Lasten
|
|
972
|
+
väggtiden mättes under står i `korning.json`:s steg som
|
|
973
|
+
`samtidiga_processer` (levande agentprocesser på maskinen vid stegets
|
|
974
|
+
start, räknat med `pgrep`, maskinvitt och best effort, `null` när
|
|
975
|
+
räkningen föll); rapporten visar maxvärdet bredvid väggtiden och märker
|
|
976
|
+
en körning utan fältet som mätt under okänd samtidighet (#526).
|
|
947
977
|
- **Proveniensen stämplas EFTER `korning.json`, aldrig före**, annars
|
|
948
978
|
saknar stämpeln faktureringsdatan. Kommandot räknar själv `skill_sha256`
|
|
949
979
|
(över `SKILL.md` plus de fyra agentdefinitionerna) och `underlag_sha256`,
|
|
@@ -994,7 +1024,10 @@ Frågan gäller alltså kostnaden, inte risken att förlora data.
|
|
|
994
1024
|
den ett modellnamn får varje agentprocess modell-override till den på ALLA
|
|
995
1025
|
tre agenter; overriden är `--model` på processen, aldrig en promptrad, och
|
|
996
1026
|
agentdefinitionerna röres aldrig, effort tas ur definitionen
|
|
997
|
-
som vanligt
|
|
1027
|
+
som vanligt, utom när `korning.mjs` fått `--effort`: då får varje
|
|
1028
|
+
agentprocess samma `--effort`-override, stegposten och `runs[]` bär den
|
|
1029
|
+
som begärd (`effort_begard`, `add-run --effort`), aldrig som verifierad,
|
|
1030
|
+
eftersom faktureringen inte bär någon effort (#525). Overriden verifieras per steg mot `modelUsage` i råsvaret
|
|
998
1031
|
(ADR-0099, se modellverifieringen ovan), svansraden arkiveras men avgör
|
|
999
1032
|
aldrig ensam. `approval` förblir `null`, `state.json`
|
|
1000
1033
|
får `"experiment": true` ur skelettet `ny-korning` skrev. `REQUEST_ID`
|
|
@@ -1059,8 +1092,8 @@ Frågan gäller alltså kostnaden, inte risken att förlora data.
|
|
|
1059
1092
|
### Batch: flera poster
|
|
1060
1093
|
|
|
1061
1094
|
`utvärdera <post1> <post2> … <modell…>` kör varje ticket och modell i en EGEN
|
|
1062
|
-
`korning.mjs`-process, parallellt enligt `svep.mjs`: två tickets åt gången,
|
|
1063
|
-
modeller för en ticket
|
|
1095
|
+
`korning.mjs`-process, parallellt enligt `svep.mjs`: två tickets åt gången, högst
|
|
1096
|
+
fyra modeller för en ticket i flykt, och nästa ticket startar när en ticket är
|
|
1064
1097
|
helt klar (steg 4). Raden `svep.mjs` kör per varv:
|
|
1065
1098
|
|
|
1066
1099
|
```
|
|
@@ -1111,7 +1144,12 @@ modellverifieringen och status via `archive.mjs experiment`), se steg 4.
|
|
|
1111
1144
|
över med en notis. `"ofärdig"` är avbruten data, inget resultat värt att
|
|
1112
1145
|
skydda: den utlöser aldrig omkörningsfrågan, utan körs om automatiskt som
|
|
1113
1146
|
en ny `k<N+1>` under samma modell. Den gamla ofärdiga körningen skrivs
|
|
1114
|
-
ändå aldrig över, den står kvar som historik över vad som gick fel.
|
|
1147
|
+
ändå aldrig över, den står kvar som historik över vad som gick fel. Ett
|
|
1148
|
+
undantag: en `"ofärdig"`-rad som bär en `pid` vars process lever är ingen
|
|
1149
|
+
avbruten körning utan en som pågår i ett annat svep (två konton mot samma
|
|
1150
|
+
checkout, ADR-0093); den hoppas med notisen att den pågår i en annan
|
|
1151
|
+
process och står som `pågår` i sluttabellen, aldrig som en dubblett
|
|
1152
|
+
(#516). En död pid, eller ingen pid alls, körs om som förut.
|
|
1115
1153
|
`"väntar på dom"` OMVÄRDERAS i stället för att hoppas över, det är den
|
|
1116
1154
|
enda platsen som är aktören för den statusen: kör `archive.mjs sparr` på
|
|
1117
1155
|
körningskatalogen. Exit 0 betyder att domen är fälld: sätt körningens
|
|
@@ -1172,6 +1210,56 @@ tvärs poster med olika modelluppsättning, eller uttalar sig om vilket utfall
|
|
|
1172
1210
|
som var korrekt. Bedömningen av vad som är ett acceptabelt utfall är
|
|
1173
1211
|
människans, gjord på erfarenhet av systemet. Rapporten visar spridningen.
|
|
1174
1212
|
|
|
1213
|
+
## Avslutning: var posten står
|
|
1214
|
+
|
|
1215
|
+
Uppgifterna `speca`, `bedöm`, `godkänn`, `underkänn` och `döm` avslutas
|
|
1216
|
+
ALLTID med det här blocket (#530). Ett svar som slutar utan det lämnar
|
|
1217
|
+
användaren att gissa var posten står, vad hon ska göra och vilket kommando
|
|
1218
|
+
som kör vidare, och arkiv och bräda kan då gå isär tyst (`spec_draft`
|
|
1219
|
+
lokalt, tom Offer status på brädan). Blocket består av fyra delar, i ordning:
|
|
1220
|
+
|
|
1221
|
+
1. **Tabellen ur `node <skillkatalog>/scripts/archive.mjs nasta-steg <katalog>`**
|
|
1222
|
+
klistras in som den är (`| post | står | väntar på | nästa |`, en rad per
|
|
1223
|
+
katalog och del), ALDRIG handskriven, av samma skäl som `bluf`: en
|
|
1224
|
+
handskriven avslutning tappar exakt den rad som skulle ha sagt vad som
|
|
1225
|
+
väntar. Scriptet räknar ut raderna ur `state.json` (status, `stopp`,
|
|
1226
|
+
`respec_varv`, `approval`, olyft OLIKA via spärren, scorerns gällande
|
|
1227
|
+
utfall ur prisfilen) med reglerna ur den här skillens egna grindar;
|
|
1228
|
+
regeltabellen med källhänvisning per rad står ovanför funktionen
|
|
1229
|
+
`nastaStegFor` i scriptet. Ett läge scriptet inte känner skrivs som
|
|
1230
|
+
`okänt läge: <status>`, aldrig som en gissning.
|
|
1231
|
+
2. **Brädraden.** Har posten ett gid: hämta Offer status via request-sync i
|
|
1232
|
+
huvudkonversationen (aldrig ur minnet) och skriv raden
|
|
1233
|
+
`Bräda: <Offer status>` direkt under tabellen. Saknar posten gid: skriv
|
|
1234
|
+
`Bräda: ingen (posten ligger inte på brädan)`.
|
|
1235
|
+
3. **ISÄR-kontrollen.** Arkivstatus och Offer status ska motsvara varandra
|
|
1236
|
+
enligt tabellen nedan (värdena är request-sync:s, normaliserade på
|
|
1237
|
+
alfabetiska kärnan som där). Avviker de skrivs en rad
|
|
1238
|
+
`ISÄR: arkiv <x>, bräda <y>` följd av det kommando som stänger gapet.
|
|
1239
|
+
|
|
1240
|
+
| arkivstatus (`state.json`) | förväntad Offer status | stänger gapet |
|
|
1241
|
+
| ---------------------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------- |
|
|
1242
|
+
| `spec_draft` | tom eller 📥 Inkommet | sync via request-sync (🔍) när specen ska granskas |
|
|
1243
|
+
| `spec_synced` | 🔍 Spec redo för granskning | `godkänn`/`underkänn`, eller sync om brädan står på 📥 |
|
|
1244
|
+
| `spec_synced`/`spec_draft` med `approval` satt | ✅ Spec ok | `bedöm`; står brädan på 🔍 är approval-anteckningen äldre än brädan, läs om grinden |
|
|
1245
|
+
| `assessed`/`priced`, poängen synkad | ⚖️ Poängsättning redo för granskning | sync via request-sync om brädan står kvar på ✅ |
|
|
1246
|
+
| klar (`godkänn` från ⚖️) | 📤 Klar – till kund | inget, kundens `Decision` avgör resten |
|
|
1247
|
+
|
|
1248
|
+
Arkivet är cache och Asana sanningen (Hårda regler): ett ISÄR löses alltid
|
|
1249
|
+
i riktning mot brädan, aldrig genom att skriva om brädan för att matcha
|
|
1250
|
+
arkivet. En experimentvariant (`experiment: true`) har ingen brädrad och
|
|
1251
|
+
ingen ISÄR-kontroll, den når aldrig Asana.
|
|
1252
|
+
|
|
1253
|
+
4. **Valet, när det finns ett.** Ett stopputfall (`TILLBAKA_TILL_SPEC`,
|
|
1254
|
+
`ESKALERA`, `KONCEPT`, `DIAGNOS`) och en olyft `double_run: olika`
|
|
1255
|
+
presenteras som ett val användaren ska ta, inte bara som routing:
|
|
1256
|
+
"här är ditt val", följt av alternativen (vid TILLBAKA_TILL_SPEC det
|
|
1257
|
+
öppna valet ur `stopp.orsak` eller källfilen; vid OLIKA de två
|
|
1258
|
+
körningarnas belägg sida vid sida, se bedöm steg 6) och kommandot som
|
|
1259
|
+
verkställer svaret (`speca <post>` efter `## Avgjorda val` + `respec`,
|
|
1260
|
+
`döm <post>`, kunddialog). Ett stopp som bara routas läses som "maskinen
|
|
1261
|
+
jobbar vidare", och ingen gör något.
|
|
1262
|
+
|
|
1175
1263
|
## Mekaniska script: `scripts/`
|
|
1176
1264
|
|
|
1177
1265
|
Tolv deterministiska script bor i katalogen: de fem kontrollerna nedan,
|
|
@@ -1205,7 +1293,7 @@ referensfiler vars regler det speglar och VARNAR när en katalogbump ändrat dem
|
|
|
1205
1293
|
FÖRE contract-check. Exit 0 = allt löst (eller inga ankare i filen), 1 =
|
|
1206
1294
|
minst ett OLÖST/FLERTYDIG ankare (kontraktsbrott, mekanisk omdispatch),
|
|
1207
1295
|
2 = användningsfel.
|
|
1208
|
-
- `scripts/contract-check.mjs <run.json> <spec.md> [impact.md] [--expect-id <id>]`
|
|
1296
|
+
- `scripts/contract-check.mjs <run.json> <spec.md> [impact.md] [--expect-id <id>] [--state <state.json>] [--sprak <svenska|engelska>]`
|
|
1209
1297
|
— kontraktskontroll av score-JSON EFTER körning: enums,
|
|
1210
1298
|
konfidensintervall, poängupplösning, inringningens närvaro (även per
|
|
1211
1299
|
alternativ; under-A1-fallet med floor null och tak A1 är giltigt), belägg/
|
|
@@ -1223,7 +1311,10 @@ referensfiler vars regler det speglar och VARNAR när en katalogbump ändrat dem
|
|
|
1223
1311
|
mellan between-paret, relation mot poäng; poäng PÅ ett ankare trots
|
|
1224
1312
|
storre/mindre är VARNING bara vid avrundningskollaps), att `type` är en av
|
|
1225
1313
|
skalans fem typer, och undantar svartlistade ord som står i specen
|
|
1226
|
-
(ADR-0115).
|
|
1314
|
+
(ADR-0115). Med `--sprak` prövas varje kundtextfält mot språket (#521):
|
|
1315
|
+
minst två OLIKA funktionsord ur fel språk, hela ord, skiftlägesokänsligt
|
|
1316
|
+
(listorna i `lib.mjs` `FUNKTIONSORD`), är BROTT `kundtext på fel språk`;
|
|
1317
|
+
diakritiska tecken är ingen signal. Utan flaggan ingen språkkontroll.
|
|
1227
1318
|
- `scripts/check-lasta.mjs "<LÄSTA-innehåll>" <spec.md> <impact.md>` —
|
|
1228
1319
|
kontrollerar scorerns läs-scope: LÄSTA-raden ska bära underlagens två
|
|
1229
1320
|
sökvägar och får därutöver bara bära filer under skillens egen katalog.
|
|
@@ -1255,29 +1346,41 @@ referensfiler vars regler det speglar och VARNAR när en katalogbump ändrat dem
|
|
|
1255
1346
|
`approval`, `granskarutslag` och `stopp`, rör aldrig `runs[]`) och
|
|
1256
1347
|
`bluf <katalog>` (markdown-tabellen `| post | poäng | utfall | konfidens | anm |`
|
|
1257
1348
|
över katalogen och dess `del-N/` rekursivt, bunt-roten som
|
|
1258
|
-
`bunt (N delar)`; värdena ur filerna, aldrig ur prosa)
|
|
1349
|
+
`bunt (N delar)`; värdena ur filerna, aldrig ur prosa) och
|
|
1350
|
+
`nasta-steg <katalog>` (läs-enbart, markdown-tabellen
|
|
1351
|
+
`| post | står | väntar på | nästa |` över katalogen och dess `del-N/`
|
|
1352
|
+
rekursivt: var posten står, vad en människa väntas göra och vilket
|
|
1353
|
+
`/request`-kommando som kör vidare, ur `state.json` och scorerns gällande
|
|
1354
|
+
utfall enligt regeltabellen i scriptet; okänt läge skrivs som
|
|
1355
|
+
`okänt läge: <status>` med exit 0, trasig `state.json` är exit 2, se
|
|
1356
|
+
`## Avslutning: var posten står`). `add-run` läser
|
|
1259
1357
|
`effort:` ur agentdefinitionen när `--effort` utelämnas och kanoniserar
|
|
1260
1358
|
`--model`; `set-status priced` vägrar när `stopp` är satt.
|
|
1261
|
-
`experiment <experimentkatalog> [--satt nyckel=värde]... [--variant <modell>]... [--korning <modell>/k<N> --status <klar|ofärdig|stopp|väntar på dom> [--orsak <text>]]`
|
|
1359
|
+
`experiment <experimentkatalog> [--satt nyckel=värde]... [--variant <modell>]... [--korning <modell>/k<N> --status <klar|ofärdig|stopp|väntar på dom> [--orsak <text>] [--pid <heltal>]]`
|
|
1262
1360
|
är den ENDA skrivaren av `experiment.json` (se `utvärdera` steg 1): låst
|
|
1263
1361
|
läs-modifiera-skriv med atomisk skrivning, katalog och fil skapas om de
|
|
1264
1362
|
saknas. `--satt` skriver toppnivåfält append-only (samma värde är no-op,
|
|
1265
1363
|
ett annat värde är exit 2; `eskalerad` tolkas som boolean), `--variant` är
|
|
1266
1364
|
UNION med bevarad ordning, och `--korning` kräver `--status` ur de fyra
|
|
1267
1365
|
statusliteralerna, rör ingen annan körning och kräver att katalogen
|
|
1268
|
-
`<modell>/k<N>` finns.
|
|
1269
|
-
|
|
1366
|
+
`<modell>/k<N>` finns. `--pid` (heltal, bara med `--korning`) skriver
|
|
1367
|
+
startarens pid på raden; en statusskrivning utan `--pid` ersätter raden
|
|
1368
|
+
helt, så pid:n försvinner med slutstatusen (#516). Exit 0 ok, 2
|
|
1369
|
+
användnings- eller tillståndsfel.
|
|
1370
|
+
- `scripts/svep.mjs --repo-rot <abs> --konto <namn> --modell <m>... --exp experiments/<slug>... [--tickets-parallellt 2] [--modeller-parallellt 4] [--om | --hoppa-över]`:
|
|
1270
1371
|
utvärderas startare (se `utvärdera` steg 4 och Batch). Kör två tickets åt
|
|
1271
|
-
gången med
|
|
1372
|
+
gången med högst fyra modeller per ticket i flykt, nästa ticket när en är helt
|
|
1272
1373
|
klar, och gör per varv `ny-korning`, starten av `korning.mjs`,
|
|
1273
1374
|
`stderr.log`, `matning.json`, `proveniens`,
|
|
1274
1375
|
modellverifiering mot `modelUsage` och status via `archive.mjs experiment`.
|
|
1376
|
+
Startraden i `experiment.json` bär svepets pid (#516).
|
|
1275
1377
|
Återupptar ur `experiment.json`: `klar` och `stopp` hoppas utan `--om`,
|
|
1276
|
-
`väntar på dom` prövas med `sparr`, `ofärdig` körs om
|
|
1378
|
+
`väntar på dom` prövas med `sparr`, `ofärdig` körs om, utom när raden bär
|
|
1379
|
+
en levande `pid` (pågår i ett annat svep, hoppas som `pågår`, #516). En `--exp` utan
|
|
1277
1380
|
`onskemal.md`, `kallmanifest.md` eller `experiment.json` med `request_id` märks
|
|
1278
1381
|
och hoppas över. Exit 0 när ingen körning blev `ofärdig`, 1 annars, 2 vid
|
|
1279
1382
|
användningsfel.
|
|
1280
|
-
- `scripts/korning.mjs --katalog <abs k<N>> --exp <abs experimentkatalog> --repo-rot <abs> --request-id <gid eller slug> --modell <modell|default> [--claude <kommando>] [--delar-parallellt 2]`:
|
|
1383
|
+
- `scripts/korning.mjs --katalog <abs k<N>> --exp <abs experimentkatalog> --repo-rot <abs> --request-id <gid eller slug> --modell <modell|default> [--claude <kommando>] [--delar-parallellt 2] [--effort <low|medium|high|xhigh|max|default>]`:
|
|
1281
1384
|
utvärderas inre process (se `utvärdera` steg 4), ett script utan
|
|
1282
1385
|
modellturer. Bygger prompterna ur `onskemal.md`, `kallmanifest.md` och
|
|
1283
1386
|
`experiment.json`, där `sprak` är OBLIGATORISK: saknas den skrivs en
|
|
@@ -1287,9 +1390,14 @@ referensfiler vars regler det speglar och VARNAR när en katalogbump ändrat dem
|
|
|
1287
1390
|
compare-scores) plus arkiveringen (`archive.mjs`) är scriptanrop.
|
|
1288
1391
|
Buntens delar körs två åt gången och scorerns två körningar samtidigt;
|
|
1289
1392
|
`DELA_UPP` körs inte autonomt i v1 utan ger status `stopp` med orsak.
|
|
1290
|
-
`
|
|
1291
|
-
`
|
|
1292
|
-
|
|
1393
|
+
`--effort` är en override på varje agentprocess, symmetrisk med
|
|
1394
|
+
`--modell`: `default` ger ingen flagga och add-run läser definitionen som
|
|
1395
|
+
förut; allt annat skickas till processen och till `add-run --effort` som
|
|
1396
|
+
begärd, aldrig verifierad (#525). `korning.json` är summan över stegen
|
|
1397
|
+
(`korningsmotor`, `steg` med `effort_begard` och `samtidiga_processer` per
|
|
1398
|
+
steg, `modellverifiering` plus rapportens vanliga nycklar). Exit 0 när
|
|
1399
|
+
körningen gick igenom, 1 när minst en del blev ofärdig, 2 vid
|
|
1400
|
+
användningsfel.
|
|
1293
1401
|
- `scripts/kontroll.mjs <svar.txt> <spec.md> <impact.md> --expect-id <id> --ut <ren.json> [--fixa-kundtext] [--claude <kommando>] [--fix-modell sonnet] [--fix-fil <rå.json>]`:
|
|
1294
1402
|
scorerns kontrollkedja i EN process (se `bedöm` steg 5): svansrader,
|
|
1295
1403
|
JSON-extraktion, deterministiska reparationer, sedan check-lasta,
|
|
@@ -1300,7 +1408,12 @@ referensfiler vars regler det speglar och VARNAR när en katalogbump ändrat dem
|
|
|
1300
1408
|
belägg, och varje reparation skrivs som en `REPARERAT:`-rad som anroparen
|
|
1301
1409
|
bokför i runs-radens `note`. `--fixa-kundtext` skriver om ett
|
|
1302
1410
|
protokollterm-brott i ett rent kundtextfält med en billig modell i stället
|
|
1303
|
-
för att kosta en hel scorerkörning, högst en runda.
|
|
1411
|
+
för att kosta en hel scorerkörning, högst en runda. `--state <state.json>`
|
|
1412
|
+
och `--sprak <svenska|engelska>` går rakt vidare till contract-check
|
|
1413
|
+
(split-status respektive kundtextens språk; `korning.mjs` tar språket ur
|
|
1414
|
+
`experiment.json`, det manuella flödet ur `SPRÅK:` i `kallmanifest.md`).
|
|
1415
|
+
Ett språkbrott är aldrig kundtextfixbart och går till omdispatch (#521).
|
|
1416
|
+
stdout bär `MODELL:`,
|
|
1304
1417
|
`LÄSTA:`, ev. `AVVIKELSE:`, `REPARERAT:`-rader och sist verdiktet. Exit 0 =
|
|
1305
1418
|
kedjan håller, 1 = BROTT (omdispatch enligt ADR-0092), 2 = användningsfel.
|
|
1306
1419
|
|
|
@@ -1351,6 +1464,7 @@ aldrig vidare som om kontrollen passerat.
|
|
|
1351
1464
|
```
|
|
1352
1465
|
REPO-ROT: <absolut sökväg>
|
|
1353
1466
|
DEPS: <installerade | saknas>
|
|
1467
|
+
SPRÅK: <svenska | engelska>
|
|
1354
1468
|
KÄLLOR:
|
|
1355
1469
|
<kallmanifest.md ordagrant, eller "inga">
|
|
1356
1470
|
|
|
@@ -1367,6 +1481,7 @@ aldrig vidare som om kontrollen passerat.
|
|
|
1367
1481
|
REQUEST_ID: <gid eller slug>
|
|
1368
1482
|
MODE: <pricing|guard>
|
|
1369
1483
|
DELPOST: <nej | ja, del N av M>
|
|
1484
|
+
SPRÅK: <svenska | engelska>
|
|
1370
1485
|
|
|
1371
1486
|
SPEC: <absolut sökväg till spec.md>
|
|
1372
1487
|
PÅVERKANSANALYS: <absolut sökväg till impact.md>
|
|
@@ -1375,6 +1490,12 @@ aldrig vidare som om kontrollen passerat.
|
|
|
1375
1490
|
(guard-läge lägger till `FULLPLAN:` och `TIDIGARE_POANG:` —
|
|
1376
1491
|
guard-kommandot kommer i ett senare steg.)
|
|
1377
1492
|
|
|
1493
|
+
`SPRÅK:` är kundtextens språk för assessorn och scorern (#521): samma
|
|
1494
|
+
värde som specifiern fick, ur `experiment.json` (`sprak`) i utvärdera och
|
|
1495
|
+
ur `SPRÅK:` i `kallmanifest.md` i det manuella flödet. Analysens
|
|
1496
|
+
kundvända delar och kuvertets kundtextfält skrivs på det språket;
|
|
1497
|
+
`contract-check --sprak` fäller kundtext på fel språk.
|
|
1498
|
+
|
|
1378
1499
|
- **Svansrader efter huvudinnehållet**, i denna ordning: `MODELL: <modell-id>`
|
|
1379
1500
|
(alla agenter), `LÄSTA: <kommaseparerade absoluta sökvägar eller "inga">`
|
|
1380
1501
|
(endast scorern — dess Read är promptbegränsad, raden gör regeln
|