feat(m1): add kandidatvurdering skill that persists nothing
This commit is contained in:
parent
3c74968ec1
commit
cdb4a8fda9
3 changed files with 268 additions and 0 deletions
73
skills/kandidatvurdering/SKILL.md
Normal file
73
skills/kandidatvurdering/SKILL.md
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
---
|
||||
name: kandidatvurdering
|
||||
description: "Scorer en stillingsannonse mot kandidatprofilen, kjoerer hardfiltrene foerst og leverer score, begrunnelse og bekymringer paa norsk. Skriver ingenting. Utloeses av vurder denne annonsen, score denne stillingen, hva er scoren på denne, hva er scoren pa denne, passer denne stillingen for meg, kjør hardfiltrene og kjor hardfiltrene."
|
||||
triggers:
|
||||
- vurder denne annonsen
|
||||
- score denne stillingen
|
||||
- hva er scoren på denne
|
||||
- hva er scoren pa denne
|
||||
- passer denne stillingen for meg
|
||||
- kjør hardfiltrene
|
||||
- kjor hardfiltrene
|
||||
---
|
||||
|
||||
# kandidatvurdering
|
||||
|
||||
Scorer én annonse mot `profil/kandidat.md`. **Skriver ingenting.** Ingen fil,
|
||||
ingen logg, ingen sak. I M1 finnes ingen ingest-vakt ennå, så teksten som
|
||||
vurderes er utrygg — og det eneste som holder den utenfor arbeidsmappa, er at
|
||||
denne stien ikke skriver i det hele tatt. Skal noe lagres, er det `beslutning`
|
||||
og `sak` som gjør det, etter at operatøren har bestemt seg.
|
||||
|
||||
All operatørrettet tekst er norsk bokmål.
|
||||
|
||||
## Arbeidsdelingen
|
||||
|
||||
Regnestykket er ikke ditt. Du leverer skjønn per kriterium; scriptet
|
||||
`${CLAUDE_PLUGIN_ROOT}/scripts/vurdering.py` gjør aritmetikken. En score du
|
||||
regner ut selv er ikke reproduserbar, og M6 leser den som et tall på en
|
||||
vektavhengig skala.
|
||||
|
||||
Gjør dette, i denne rekkefølgen:
|
||||
|
||||
1. Les profilen med `les_profil_fil(root, "profil", "kandidat.md")`.
|
||||
2. Sett delscore for hvert kriterium — `fagomrade`, `oppgavetype`,
|
||||
`teknologi`, `selskapstype` — som et heltall 0-100. Alle fire må være med;
|
||||
et manglende eller ugyldig kriterium blir avvist ved navn.
|
||||
3. Skriv bekymringene dine som fri tekst i `bekymringer`. Scriptet leverer dem
|
||||
tilbake urørt — det oppfinner ingen.
|
||||
4. Kall `vurder(profil, annonse, brodtekst, last)` og les resultatet.
|
||||
|
||||
## Les resultatet slik
|
||||
|
||||
- **`verdikt`** er `avvist` så snart minst én hardfilter slo til, ellers
|
||||
`vurderes`.
|
||||
- **`avvisninger`** navngir frontmatter-nøkkelen hver avvisning kom fra. Gjengi
|
||||
nøkkelen ordrett. Annonsen får en score uansett, slik at operatøren kan veie
|
||||
avslaget mot et tall.
|
||||
- **`advarsler`** er filtre som ikke kunne kjøre. Lønn som ikke er oppgitt er
|
||||
ikke lønn under gulvet, og en stillingskode rangtabellen ikke kjenner er
|
||||
ikke lav senioritet. Si hva som ikke ble sjekket.
|
||||
- **`vekt_hash`** identifiserer vektvektoren scoren ble regnet med. Ta den med
|
||||
når scoren refereres videre.
|
||||
|
||||
Står arbeidsstedet i profilens `arbeidssteder`, blir reisetid en advarsel og
|
||||
ikke et avslag. Det er operatørens eget valg, kodet — ikke en lekkasje i
|
||||
filteret.
|
||||
|
||||
## Lever på norsk
|
||||
|
||||
Gi operatøren fire ting, i denne rekkefølgen: score, verdikt med de
|
||||
navngitte nøklene, begrunnelse for delscorene, og bekymringene. Ikke pynt på
|
||||
et avslag, og ikke gjett på lønn eller reisetid annonsen ikke oppgir.
|
||||
|
||||
## Uten verktøyserveren
|
||||
|
||||
Er `jobbsok-tools` ikke tilgjengelig, degraderer skillen i stedet for å stoppe:
|
||||
les profilen direkte, sett delscorene som vanlig, og be operatøren kjøre
|
||||
scriptet fra kommandolinja for aritmetikken. Ikke regn ut summen selv som en
|
||||
mellomløsning — da er tallet ikke lenger reproduserbart, og det er hele
|
||||
poenget med delingen.
|
||||
|
||||
Vektene og frontmatter-kontrakten står i
|
||||
`${CLAUDE_PLUGIN_ROOT}/skills/kandidatvurdering/references/vekter.md`.
|
||||
49
skills/kandidatvurdering/references/vekter.md
Normal file
49
skills/kandidatvurdering/references/vekter.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# Vekter for kandidatvurdering
|
||||
|
||||
## Kriteriene
|
||||
|
||||
Fire, og bare fire. Delscore settes per kriterium som et heltall 0-100.
|
||||
Mangler ett, eller ligger ett utenfor intervallet, blir hele lasten avvist ved
|
||||
navn — det er med vilje, siden en score regnet på tre av fire kriterier ser
|
||||
akkurat ut som en score regnet på alle fire.
|
||||
|
||||
| Kriterium | Hva det måler | Standardvekt |
|
||||
| --- | --- | --- |
|
||||
| `fagomrade` | treff mot dybden i profilen | 40 |
|
||||
| `oppgavetype` | er oppgavene de operatøren vil ha | 30 |
|
||||
| `teknologi` | teknologisk overlapp | 20 |
|
||||
| `selskapstype` | organisasjonsform og modenhet | 10 |
|
||||
|
||||
Tallene summerer til 100 for at vektoren skal leses som en fordeling.
|
||||
Aritmetikken normaliserer på summen, så en hvilken som helst ikke-negativ
|
||||
heltallsvektor virker like godt.
|
||||
|
||||
## Frontmatter-kontrakten
|
||||
|
||||
Profilen kan overstyre vektene med en `vekter`-nøkkel i frontmatter
|
||||
(operatørbeslutning 14.3):
|
||||
|
||||
```
|
||||
vekter:
|
||||
fagomrade: 4
|
||||
oppgavetype: 3
|
||||
teknologi: 2
|
||||
selskapstype: 1
|
||||
```
|
||||
|
||||
Rapporten fra skjemasjekken sier hvor vektene kom fra:
|
||||
|
||||
- `vekter_kilde: profil` — profilen oppga dem
|
||||
- `vekter_kilde: default` — profilen oppga dem ikke, og standardvektene over
|
||||
gjelder
|
||||
|
||||
Manglende kriterium under `vekter` arver standarden og gir en advarsel. Et
|
||||
ukjent kriterium gir en advarsel og leses ikke. En vekt som ikke er et heltall
|
||||
≥ 0 er en feil.
|
||||
|
||||
## Vekthashen
|
||||
|
||||
Hver score følges av `vekt_hash`, en sha256 over vektvektoren. Den skrives ned
|
||||
sammen med scoren ved beslutningstidspunktet, slik at en senere endring av
|
||||
vektene blir synlig i stedet for å reskalere historikken i stillhet. To scorer
|
||||
med ulik `vekt_hash` er ikke sammenlignbare tall.
|
||||
Loading…
Add table
Add a link
Reference in a new issue