jobbsok/skills/kandidatprofil/SKILL.md

96 lines
3.9 KiB
Markdown

---
name: kandidatprofil
description: "Leser, validerer og redigerer kandidatprofilen i arbeidsmappa, og eier den mekaniske sjekken mot build-brief 5.1. Utloeses av vis kandidatprofilen, vis profilen min, valider kandidatprofilen, oppdater lønnsgulvet, oppdater lonnsgulvet, sett opp arbeidsmappa, hvilken versjon kjører jobbsok og hvilken versjon kjorer jobbsok."
triggers:
- vis kandidatprofilen
- vis profilen min
- valider kandidatprofilen
- oppdater lønnsgulvet
- oppdater lonnsgulvet
- sett opp arbeidsmappa
- hvilken versjon kjører jobbsok
- hvilken versjon kjorer jobbsok
---
# kandidatprofil
Eier `profil/kandidat.md` i arbeidsmappa. Frontmatter er absolutt og leses
mekanisk; kroppen er prosa og leses med skjønn. Denne skillen validerer og
foreslår — den skriver aldri i profilen uten at operatøren har sagt ja til
akkurat den endringen.
All operatørrettet tekst er norsk bokmål.
## Løs opp arbeidsmappa først
Arbeidsmappa gjettes aldri. Løsningsrekkefølgen er `--workspace`, deretter
miljøvariabelen `JOBBSOK_WORKSPACE`, deretter en `workspace:`-linje i
`jobbsok.conf` under plugin-datamappa. Svarer ingen av de tre, si det og be om
stien. Ikke anta en hjemmekatalog.
Finnes ikke mappa ennå, kall `scaffold(root)` fra
`${CLAUDE_PLUGIN_ROOT}/scripts/jobbsok_lib/paths.py` og rapporter nøyaktig
hvilke kataloger og filer kallet opprettet. Kallet er idempotent, så en tom
liste betyr at alt allerede var på plass — si det, ikke påstå at noe ble laget.
`beslutninger.jsonl` blir aldri tømt av et scaffold.
## Valider
Kjør den mekaniske sjekken:
```
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/kandidat_schema.py
```
Bruk `validate_file(root, "profil", "kandidat.md")` når du kaller den som
modul. Rapporten er JSON med feltene `gyldig`, `feil`, `advarsler`,
`seksjoner`, `senioritet`, `ansettelsesform`, `absolutte_nei`,
`arbeidssteder`, `vekter_kilde` og `vekter`.
Les rapporten slik:
- **`feil`** er brudd på build-brief 5.1. Hvert element navngir nøkkelstien.
Gjengi stien ordrett til operatøren; ikke omskriv den til prosa.
- **`advarsler`** er ikke feil. En nøkkel utenfor 5.1 er operatørens egen, og
profilen er fortsatt gyldig. Advarselen for `arbeidssteder` sier at
vurderingen faktisk leser nøkkelen — skill den fra en advarsel om en nøkkel
ingenting leser.
- **`vekter_kilde`** er `default` når profilen ikke oppgir `vekter`. Det er en
normal tilstand, ikke et avvik.
- Malformert frontmatter er ingen rapport i det hele tatt: sjekken hever
`FrontmatterError` med linjenummeret. Gjengi linjenummeret.
Hele nøkkellista, seksjonsrekkefølgen, skilletegnkontrakten og standardvektene
står i `${CLAUDE_PLUGIN_ROOT}/skills/kandidatprofil/references/schema.md`. Les
den før du uttaler deg om hva som er påkrevd.
## Der fila og 5.1 er uenige, vinner fila
Operatøren eier denne fila. Foreslå aldri å skrive den om for å passe
kontrakten. Er strukturen ny og fornuftig, er det skjemaet som skal utvides —
si fra om det, ikke rett i fila.
Kroppen er skjønn. Et signaturprosjekt som sier *ikke målt* er en ærlig
tilstand, ikke et hull som skal fylles med et estimat. Et breddepunkt kan være
en disposisjon og ikke et fagfelt.
## Rediger bare som forslag
Ved endringsønske:
1. Les fila og valider den først.
2. Vis diffen — gammel linje, ny linje, og hvorfor.
3. Vent på et eksplisitt ja.
4. Skriv, valider på nytt, og vis den nye rapporten.
Hardfiltrene (`lonn.gulv_nok`, `geografi`, `absolutte_nei`) strammes aldri på
eget initiativ. En serie avslag på lønn er like gjerne et tegn på markedet som
på et feil gulv.
## Versjonsekko
Ber operatøren om versjon, skriv ut begge deler: innholdet i
`${CLAUDE_PLUGIN_ROOT}/BUILD_STAMP` og `version` fra plugin-manifestet
`.claude-plugin/plugin.json`. Mangler stempelfila, si det rett ut i stedet for
å oppgi bare manifestversjonen som om den var hele svaret. Fra M2 er det samme
ekkoet også tilgjengelig fra `dagens`.