From 59b4de938f06dfdd238d1d2b1bddb9ad40fee0af Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Tue, 23 Jun 2026 20:00:07 +0200 Subject: [PATCH] =?UTF-8?q?feat(ms-ai-architect):=20Spor=20E=20E-polish=20?= =?UTF-8?q?=E2=80=94=20per-kategori=20typisk/sjelden-hint=20i=20onboarding?= =?UTF-8?q?=20Phase=201=E2=80=935=20(TDD)=20[skip-docs]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Speiler Phase 6-coachingen til de fem strukturerte fasene: hver Phase 1–5 får et `**Hint — typisk relevant / sjelden relevant:**`-prosahint som agenten deler med brukeren før AskUserQuestion-spørsmålene, slik at intervjuet coacher mot riktig alternativ i stedet for å fyres av blankt. Hintene er grunnet i filens egne option-lister (ingen nye eksterne påstander → verifiseringsplikt ivaretatt). Agent-fil, ikke skill → ingen judge-/score-effekt. TDD: 4 nye assert i test-onboarding-parity.sh (RED→GREEN) — ASCII-only anker «typisk relevant / sjelden relevant» ×5 + «Del med brukeren» + begge framing-ord. Bash 3.2-fix: ankeret holdes ASCII-only fordi multibyte em-dash i en shell-var under `set -u` + gåseøyne-interpolasjon kræsjer scriptet. e2e onboarding-parity 25/25, validate 0/0, discovery 13/13, kb-integrity 192/0, full e2e grønn. Co-Authored-By: Claude Opus 4.8 (1M context) --- agents/onboarding-agent.md | 10 ++++++++++ tests/test-onboarding-parity.sh | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/agents/onboarding-agent.md b/agents/onboarding-agent.md index 763f8dc..8ef25b9 100644 --- a/agents/onboarding-agent.md +++ b/agents/onboarding-agent.md @@ -35,6 +35,8 @@ On start, check for existing onboarding state: ### Phase 1: Organization Profile (`org/organization-profile.md`) +**Hint — typisk relevant / sjelden relevant:** Del med brukeren før spørsmålene: kryss kun av de reguleringene som faktisk gjelder dere (Personopplysningsloven/GDPR gjelder praktisk talt alle). Sjelden relevant: ikke velg en regulering «for sikkerhets skyld» — DORA gjelder kun finanssektoren, Sikkerhetsloven kun virksomheter med nasjonal sikkerhetsbetydning. + Collect: - **Sektortype:** Use AskUserQuestion with options: Offentlig sektor, Privat sektor. Dette valget styrer hvilke oppfølgingsalternativer som presenteres (forgren intervjuet — ikke still private virksomheter offentlig-sektor-spørsmål). - **Sektor:** @@ -75,6 +77,8 @@ last_updated: [YYYY-MM-DD] ### Phase 2: Technology Stack (`org/technology-stack.md`) +**Hint — typisk relevant / sjelden relevant:** Del med brukeren før spørsmålene: oppgi lisensen dere faktisk har i dag — den avgjør hvilke Copilot-kapabiliteter som allerede er tilgjengelige. Sjelden relevant: AI-tjenester dere bare har vurdert men ikke tatt i bruk — velg «Ingen i dag» heller enn å overrapportere. + Collect: - **Skyplattform:** Use AskUserQuestion with multiSelect: Azure, Microsoft 365, Power Platform, On-premises, Hybrid, Annet - **Lisenstype:** Use AskUserQuestion with options: E3, E5, F1/F3, A3/A5 (Education), G3/G5 (Government), Annet @@ -84,6 +88,8 @@ After answers, write `technology-stack.md` to the data directory with same YAML ### Phase 3: Security & Compliance (`org/security-compliance.md`) +**Hint — typisk relevant / sjelden relevant:** Del med brukeren før spørsmålene: oppgi den høyeste dataklassifiseringen AI-systemet faktisk skal behandle. Sjelden relevant: «Hemmelig (sikkerhetsloven)» med mindre dere reelt håndterer skjermingsverdig informasjon — det nivået utløser helt andre krav enn ordinære AI-prosjekter. + Collect: - **Dataklassifisering:** Use AskUserQuestion with multiSelect: Åpen, Intern, Fortrolig, Strengt fortrolig, Hemmelig (sikkerhetsloven) - **Dataresidens-krav:** Use AskUserQuestion with options: Norge, Norden, EU/EØS, Ingen spesifikke krav @@ -94,6 +100,8 @@ After answers, write `security-compliance.md` to the data directory. ### Phase 4: Architecture Decisions (`org/architecture-decisions.md`) +**Hint — typisk relevant / sjelden relevant:** Del med brukeren før spørsmålene: «Ikke bestemt» / «Ikke definert» er fullgode svar tidlig — rådene tilpasses da bredere. Sjelden relevant: å låse plattformvalget her før dere har kjørt en sammenligning (`/architect:compare`). + Collect: - **Foretrukket plattform for AI:** Use AskUserQuestion with options: Azure AI Foundry, Copilot Studio, Power Platform/AI Builder, Semantic Kernel, Ikke bestemt - **Integrasjonsbehov:** Use AskUserQuestion with multiSelect: Microsoft 365, SharePoint, Dynamics 365, SAP, Fagsystemer, REST API-er, Annet @@ -103,6 +111,8 @@ After answers, write `architecture-decisions.md` to the data directory. ### Phase 5: Business References (`org/business-references.md`) +**Hint — typisk relevant / sjelden relevant:** Del med brukeren før spørsmålene: beskriv styringsmodellen dere faktisk har i dag, selv om den er umoden. Sjelden relevant: ønsket fremtidig modell — den hører heller hjemme i Fri kontekst (Phase 6). + Collect: - **Styringsmodell for AI:** Use AskUserQuestion with options: Sentralisert (IT/digital avdeling), Desentralisert (fagavdelinger), Hybrid (CoE + fagmiljøer), Ikke etablert - **Dokumentformat-preferanser:** Use AskUserQuestion with multiSelect: Markdown, Word (.docx), PDF, Confluence, SharePoint Wiki, Annet diff --git a/tests/test-onboarding-parity.sh b/tests/test-onboarding-parity.sh index c8a1675..b72c6b7 100755 --- a/tests/test-onboarding-parity.sh +++ b/tests/test-onboarding-parity.sh @@ -73,6 +73,29 @@ assert_matches_pattern "$AGENT" "(secrets|sensitive personopplysninger).*ALDRI" assert_matches_pattern "$AGENT" "ordrett" \ "Phase 6 lagrer fortsatt brukerens prosa ordrett (regresjonsvakt)" +# === Spor E (E-polish): per-kategori prosa-hint Phase 1–5 (speilet på Phase 6-coachingen) === +# De fem strukturerte fasene bruker AskUserQuestion, men skal IKKE fyres av blankt: hver fase +# skal gi et kort «typisk relevant / sjelden relevant»-hint slik at agenten coacher brukeren mot +# riktig alternativ — samme multiplikator-tanke som Phase 6, komprimert til strukturerte valg. +# ASCII-only anker (ingen em-dash/gåseøyne i shell-var → bash 3.2 + set -u-trygt). +HINT_ANCHOR='typisk relevant / sjelden relevant' +hint_count=$(grep -cF "$HINT_ANCHOR" "$AGENT" || true) +if [ "${hint_count:-0}" -ge 5 ]; then + pass "Alle 5 strukturerte faser har et per-kategori typisk/sjelden-hint ($hint_count funnet)" +else + fail "Per-kategori hint mangler — fant kun ${hint_count:-0}/5 hint-ankere" +fi + +# Agenten skal faktisk DELE hintet med brukeren (speiler Phase 6 «Presenter de to listene ... FØR») +assert_matches_pattern "$AGENT" "Del med brukeren" \ + "Per-kategori hint instrueres delt med brukeren før spørsmålene" + +# Begge framing-ordene finnes (inkludering + ekskludering, som Phase 6s to lister) +assert_matches_pattern "$AGENT" "typisk relevant" \ + "Hint-framing inneholder «typisk relevant» (inkludering)" +assert_matches_pattern "$AGENT" "[Ss]jelden relevant" \ + "Hint-framing inneholder «sjelden relevant» (ekskludering)" + # === Orkestratoren er sektor-nøytral (delegerer, hardkoder ikke offentlig) === if [ -f "$ORCH" ]; then if grep -qE "Onboarding-agenten styrer selve intervjuet" "$ORCH"; then