feat(ms-ai-architect): decision-b Enhet 1 — dialekt-relabel 51 filer (Kategori→Category + Sist oppdatert→Last updated), 73 byte-eksakte swaps [skip-docs]

Ren value-preserving label-relabel av de to norske header-labelene til engelsk på 51 ref-filer (22 bærer begge). Ny testet ren primitiv relabelHeaderDialect() (header-blokk-scoped, kollisjons-/multiforekomst-guard) + manifest-drevet driver relabel-dialect.mjs (frosset 51-fil-manifest, hard per-fil-invariant, idempotent, isMain-guard). **Dato:** bevisst UTE (body-template-felle → Enhet 2). Premiss-korreksjon i roadmap R22: tredje Dato-dialekt (16), 0 bold-duplikater (ikke 4), 1 datoløs (ikke 5), category-none = vindus-artefakt. test-relabel-dialect 11/11; diff +73/-73 0 linjer utover label; suite 782/782 exit 0.
This commit is contained in:
Kjell Tore Guttormsen 2026-07-06 10:07:52 +02:00
commit e999b74eda
54 changed files with 405 additions and 75 deletions

View file

@ -1,4 +1,4 @@
# Plugin-roadmap: sesjonsplan R0R21 (2026-07)
# Plugin-roadmap: sesjonsplan R0R22 (2026-07)
_Styrende sesjonsplan for ms-ai-architect fra 2026-07-02, basert på full statusanalyse (visjon/planer, ground-truth-audit m/testkjøring, Spor 1-planlesing). Erstatter IKKE eksisterende planer (korrekthetsprogrammet, Spor 1-planen, briefer) — **sekvenserer** dem og fyller hullene analysen avdekket. Operatør-detaljer som ikke hører hjemme i repoet ligger i en LOCAL-ONLY-annex (`.claude/projects/2026-07-02-helhetlig-roadmap/`)._
@ -133,7 +133,26 @@ Maskineriet er bygget (krav 1+2+3 + per-kategori-hint); målingen er aldri kjør
- **26 not-due Last-updated** — 21 relabel (`Sist oppdatert`/`Dato``Last updated`, behold dato), 5 datoløse (git-avledet dato krever «innholds-commit»-heuristikk som ekskluderer R19/R20-metadata-pass).
- **3 norsk-dialekt Status** — engelsk `**Status:**` ville blande dialekt; håndteres i samme dialekt-pass.
- **4 dual-header `ai-act-*`-filer** — plain-blokk (`Last updated:`/`Status: GA`/`Category:` linje 68) vs bold-blokk. **NB:** samme plain-blokk er hvorfor **R20 la til duplikat `**Category:**`** her (bold `Category` linje 3 vs plain `Category` linje 8) — begge duplikatene lukkes i normaliseringspasset. Mønsteret er innkapslet til nøyaktig disse 4 filene korpus-vidt.
- **69 norsk-label-filer** (`Kategori`/`Sist oppdatert`) — engelsk label-normalisering.
- **69 norsk-label-filer** (`Kategori`/`Sist oppdatert`) — engelsk label-normalisering. _(Korrigert i R22: faktisk 42 `**Kategori:**` + 31 `**Sist oppdatert:**`, union 51 filer; «69» stemte ikke mot noen faktisk mengde.)_
## R22 — decision-(b) Enhet 1: ren dialekt-relabel (1 økt — ungated, ⊥ R7) ✅ 2026-07-06
**Mål:** lukk den trygge, verdi-bevarende kjernen av decision-(b)-residualen — ren label-oversettelse norsk→engelsk, ingen fabrikkering.
**Premiss-korreksjon (ground-truth 2026-07-06, `gt-audit`/`gt-labels` over alle 389, header-blokk = linjer før første `---`/`## `):** decision-(b)-tallene i R21-residualen var stale/ufullstendige på fire punkter:
1. **Tredje dato-dialekt oppdaget:** norsk dato bæres av `**Sist oppdatert:**` (31) **OG `**Dato:**` (16)** — R21 så bare `Sist oppdatert`. `**Dato:**` opptrer dessuten i **body-mal-blokker** (`**Dato:** [YYYY-MM-DD]`) → blind erstatning ville korruptert template-filer ⇒ Dato UTSATT til Enhet 2 (header-scoped ISO-dato-guard).
2. **«4 dual-header med duplikat `**Category:**`» → 0 bold-duplikater** korpus-vidt. De 4 `ai-act-*` bærer en *plain-text* `Category:`/`Status:`/`Last updated:`-blokk (ikke bold) — R21-reverten forhindret bold-duplikatet som fryktet. Håndteres i Enhet 3 (dedup).
3. **«5 datoløse» → 1** (kun `decision-trees.md` mangler dato helt i header) → Enhet 4.
4. **«Category-missing 0» / «8 mangler» er begge vindus-artefakter:** de 8 flagges av 500-byte-vinduet (≥1, `agentic-rag-patterns`, HAR Category forbi byte 500). Ekte gap verifiseres i Enhet 4.
**Utført (Enhet 1):** `**Sist oppdatert:**``**Last updated:**` (31) + `**Kategori:**``**Category:**` (42) = **73 relabels****51** filer (22 bærer begge). Ny testet ren primitiv `relabelHeaderDialect()` (header-blokk-scoped, kollisjons-guard mot eksisterende engelsk target, multi-forekomst-guard) + manifest-drevet driver `scripts/kb-update/relabel-dialect.mjs` (frosset 51-fil-manifest, hard per-fil-invariant «nøyaktig `applied.length` linjer endret, hver kun label-token, resten byte-identisk», idempotent skip, `isMain`-guard, aborterer FØR skriving). `**Dato:**` bevisst UTE av `LABEL_MAP`.
**Verifisering:** `test-relabel-dialect` 11/11; git diff **+73/73** på 51 filer (0 linjer endret utover label-token, verifisert via `grep` på begge dialekt-retninger); revers-substitusjon rekonstruerer original byte-eksakt; idempotent re-run = 0 relabels; ground truth `Kategori 42→0`, `Sist oppdatert 31→0`, `Missing English Last updated 52→21`; suite **782/782** exit 0.
**Gjenstående decision-(b)-enheter (egne økter, ⊥ R7):**
- **Enhet 2:** `**Dato:**``**Last updated:**` (16) med header-scoping + ISO-dato-guard som ekskluderer template-blokker (fellen).
- **Enhet 3:** Status-backfill 27 none-filer (`statusForFile`, R21-mønster) + 4 `ai-act-*` plain-blokk-dedup (bold-ify + fjern redundant plain-linjer).
- **Enhet 4:** 1 datoløs (`decision-trees.md`, git-«innholds-commit»-heuristikk, ALDRI «i dag») + verifiser de 8 «category-none» = ekte gap vs. vindus-artefakt.
## Parkert (krever eget operatør-go)

View file

@ -0,0 +1,194 @@
#!/usr/bin/env node
// Enhet 1 (decision-b dialect pass, path A, ⊥ R7) — pure value-preserving relabel of the two
// Norwegian header labels to their English equivalents:
// **Sist oppdatert:** → **Last updated:** (31 files)
// **Kategori:** → **Category:** (42 files) [22 files carry both → 73 relabels]
//
// This is a LABEL rename only: the value (date, category text, "(v1.0)" suffix) is byte-preserved,
// so no fact is ever fabricated — this is the safe core of the corrected decision-b residual.
//
// Scope is the header block (lines above the first `---` thematic break OR first `## ` heading),
// so a `**Kategori:**`/`**Sist oppdatert:**` inside a BODY template block is never touched. The
// **Dato:** dialect (16 files) is DELIBERATELY excluded: it also appears in body templates
// (`**Dato:** [YYYY-MM-DD]`) and needs a header-scoped ISO-date guard — deferred to Unit 2.
// Status backfill (27+4) and the ai-act dual-block dedup are Unit 3; decision-trees date is Unit 4.
//
// Safety: a frozen MANIFEST (ground-truth-verified 2026-07-06) + a hard per-file invariant asserted
// BEFORE any write (exactly `applied.length` lines changed, each equals the old line with only the
// label token swapped, everything else byte-identical). Idempotent: a file with no norsk header
// label is skipped, so a re-run is a no-op. Aborts and writes nothing on any drift or invariant breach.
//
// Usage: node scripts/kb-update/relabel-dialect.mjs [--dry]
import { readFileSync, writeFileSync, existsSync, realpathSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const __dirname = dirname(fileURLToPath(import.meta.url));
const PLUGIN_ROOT = join(__dirname, '..', '..');
// The two norsk→english label pairs. **Dato:** is intentionally absent (body-template trap).
export const LABEL_MAP = [
['**Sist oppdatert:**', '**Last updated:**'],
['**Kategori:**', '**Category:**'],
];
// The header block ends at the first thematic break (`---`) or the first `## ` section heading.
// Everything below is body (templates, prose) and is out of relabel scope.
function headerEnd(lines) {
for (let i = 0; i < lines.length; i++) {
if (/^---\s*$/.test(lines[i]) || /^##\s/.test(lines[i])) return i;
}
return lines.length;
}
/**
* Relabel the norsk header labels to English, in the header block only. Pure.
* Guards: a norsk label appearing >1× in the header block, or an English target label already
* present in the header block (would duplicate), abort. A norsk label only in the body is ignored.
* @param {string} content
* @param {[string,string][]} [labelMap]
* @returns {{content: string, applied: {from:string,to:string,line:number}[]}}
*/
export function relabelHeaderDialect(content, labelMap = LABEL_MAP) {
const lines = String(content ?? '').split('\n');
const end = headerEnd(lines);
const header = lines.slice(0, end);
const applied = [];
for (const [from, to] of labelMap) {
let occ = 0;
let idx = -1;
for (let i = 0; i < header.length; i++) {
const c = header[i].split(from).length - 1;
if (c > 0) { occ += c; idx = i; }
}
if (occ === 0) continue; // norsk label absent from header → nothing to do
if (occ > 1) throw new Error(`ABORT: '${from}' appears ${occ}× in header block`);
if (header.some((l) => l.includes(to))) throw new Error(`ABORT: target '${to}' already present in header (would duplicate)`);
header[idx] = header[idx].replace(from, to);
applied.push({ from, to, line: idx });
}
return { content: [...header, ...lines.slice(end)].join('\n'), applied };
}
// Frozen manifest — the 51 scope-confirmed targets (files carrying **Sist oppdatert:** and/or
// **Kategori:** in their header block), verified against ground truth 2026-07-06. The per-file
// invariant below re-proves each write; the manifest only bounds WHICH files may be touched.
export const MANIFEST = [
'skills/ms-ai-advisor/references/architecture/ai-utredning-template.md',
'skills/ms-ai-advisor/references/architecture/alternativanalyse-methodology.md',
'skills/ms-ai-advisor/references/architecture/capacity-feasibility-benchmarks.md',
'skills/ms-ai-advisor/references/architecture/diagram-prompt-templates.md',
'skills/ms-ai-advisor/references/architecture/regional-availability-verification.md',
'skills/ms-ai-advisor/references/architecture/source-traceability-assumption-register.md',
'skills/ms-ai-engineering/references/mlops-genaiops/cost-optimization-mlops-pipelines.md',
'skills/ms-ai-engineering/references/mlops-genaiops/feedback-loops-continuous-improvement.md',
'skills/ms-ai-engineering/references/mlops-genaiops/genaiops-llm-specific-practices.md',
'skills/ms-ai-engineering/references/mlops-genaiops/governance-audit-ml-operations.md',
'skills/ms-ai-engineering/references/mlops-genaiops/inferencing-optimization-caching.md',
'skills/ms-ai-engineering/references/mlops-genaiops/infrastructure-as-code-mlops.md',
'skills/ms-ai-engineering/references/mlops-genaiops/llm-evaluation-production.md',
'skills/ms-ai-engineering/references/mlops-genaiops/mlops-security-access-control.md',
'skills/ms-ai-engineering/references/mlops-genaiops/mlops-teams-collaboration-tools.md',
'skills/ms-ai-engineering/references/mlops-genaiops/monitoring-observability-ml-systems.md',
'skills/ms-ai-engineering/references/mlops-genaiops/prompt-flow-production-deployment.md',
'skills/ms-ai-engineering/references/mlops-genaiops/responsible-ai-mlops-integration.md',
'skills/ms-ai-governance/references/monitoring-observability/anomaly-detection-ai-systems.md',
'skills/ms-ai-governance/references/monitoring-observability/application-insights-llm-monitoring.md',
'skills/ms-ai-governance/references/monitoring-observability/azure-monitor-setup-ai-workloads.md',
'skills/ms-ai-governance/references/monitoring-observability/custom-dashboards-ai-operations.md',
'skills/ms-ai-governance/references/monitoring-observability/distributed-tracing-ai-pipelines.md',
'skills/ms-ai-governance/references/monitoring-observability/log-analytics-kql-ai-queries.md',
'skills/ms-ai-governance/references/monitoring-observability/token-usage-tracking-attribution.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/gevinstrealisering-dfo-methodology.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/norwegian-nlp-benchmarks.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/ros-ai-threat-library.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/ros-dpia-security-integration.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/ros-maestro-multiagent.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/ros-methodology-ns5814-iso31000.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/ros-report-templates.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/ros-scoring-rubrics-7x5.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/ros-sector-checklists.md',
'skills/ms-ai-governance/references/norwegian-public-sector-governance/samfunnsokonomisk-analyse-nnv.md',
'skills/ms-ai-governance/references/responsible-ai/ai-act-annex-iii-checklist.md',
'skills/ms-ai-governance/references/responsible-ai/ai-center-of-excellence-setup.md',
'skills/ms-ai-governance/references/responsible-ai/ai-governance-structure-framework.md',
'skills/ms-ai-governance/references/responsible-ai/red-teaming-ai-models.md',
'skills/ms-ai-security/references/ai-security-engineering/adversarial-input-robustness-testing.md',
'skills/ms-ai-security/references/ai-security-engineering/ai-prompt-shield-network.md',
'skills/ms-ai-security/references/ai-security-engineering/ai-red-team-operations-practical.md',
'skills/ms-ai-security/references/ai-security-engineering/data-leakage-prevention-ai.md',
'skills/ms-ai-security/references/ai-security-engineering/entra-agent-id-zero-trust.md',
'skills/ms-ai-security/references/ai-security-engineering/model-fingerprinting-watermarking.md',
'skills/ms-ai-security/references/ai-security-engineering/secure-model-deployment-hardening.md',
'skills/ms-ai-security/references/ai-security-engineering/security-copilot-integration.md',
'skills/ms-ai-security/references/ai-security-engineering/security-scoring-rubrics-6x5.md',
'skills/ms-ai-security/references/ai-security-engineering/supply-chain-security-ai-models.md',
'skills/ms-ai-security/references/ai-security-engineering/zero-trust-ai-services.md',
'skills/ms-ai-security/references/cost-optimization/deterministic-cost-calculation-model.md',
];
function run({ dry }) {
const planned = [];
const missing = [];
let dateRelabels = 0;
let catRelabels = 0;
for (const rel of MANIFEST) {
const abs = join(PLUGIN_ROOT, rel);
if (!existsSync(abs)) { missing.push(rel); continue; }
const old = readFileSync(abs, 'utf8');
const { content: out, applied } = relabelHeaderDialect(old);
if (applied.length === 0) continue; // idempotent — already relabeled (re-run)
// Hard invariant: exactly `applied.length` lines changed, each is the old line with ONLY
// the label token swapped; line count unchanged; everything else byte-identical.
const o = old.split('\n');
const n = out.split('\n');
if (n.length !== o.length) throw new Error(`ABORT ${rel}: line count changed (${o.length}${n.length})`);
let diffs = 0;
for (let i = 0; i < o.length; i++) {
if (o[i] === n[i]) continue;
diffs++;
const hit = applied.find((a) => a.line === i);
if (!hit) throw new Error(`ABORT ${rel}: line ${i} changed but not in applied set`);
if (n[i].replace(hit.to, hit.from) !== o[i]) throw new Error(`ABORT ${rel}: line ${i} changed beyond the label token`);
}
if (diffs !== applied.length) throw new Error(`ABORT ${rel}: ${diffs} lines changed ≠ ${applied.length} applied`);
for (const a of applied) {
if (a.from === '**Sist oppdatert:**') dateRelabels++;
else if (a.from === '**Kategori:**') catRelabels++;
}
planned.push({ rel, applied, out });
}
if (missing.length) {
console.error(`ABORT — ${missing.length} manifest target(s) not found (corpus drift):`);
missing.forEach((m) => console.error(' ' + m));
process.exit(1);
}
console.log(`Manifest: ${MANIFEST.length} | files to relabel: ${planned.length} | already-english (skipped): ${MANIFEST.length - planned.length}`);
console.log(` ${dateRelabels} **Sist oppdatert:** → **Last updated:**`);
console.log(` ${catRelabels} **Kategori:** → **Category:**`);
console.log(` ${dateRelabels + catRelabels} total relabels`);
if (dry) {
console.log('\n(dry run — no writes)');
for (const p of planned) {
console.log(` ~ ${p.rel} [${p.applied.map((a) => a.from.replace(/\*/g, '')).join(', ')}]`);
}
return;
}
for (const p of planned) writeFileSync(join(PLUGIN_ROOT, p.rel), p.out);
console.log(`\nWrote ${planned.length} files.`);
}
const isMain = (() => {
try {
return realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url));
} catch {
return false;
}
})();
if (isMain) run({ dry: process.argv.includes('--dry') });

View file

@ -1,6 +1,6 @@
# AI-arkitekturutredning — Mal for norsk offentlig sektor
**Sist oppdatert:** 2026-06-24 (v1.0)
**Last updated:** 2026-06-24 (v1.0)
**Målgruppe:** Løsningsarkitekter, prosjektledere og beslutningstagere i norsk offentlig sektor
**Format:** Strukturert utredningsmal basert på utredningsinstruksen, Digdirs arkitekturprinsipper, rammeverk for digital samhandling og EU AI Act
**Category:** Solution Architecture & Advisory

View file

@ -1,6 +1,6 @@
# Alternativanalyse-metodikk — Vektet multi-kriterie-analyse (MCA)
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Målgruppe:** Arkitekter som gjennomfører AI-arkitekturutredninger for norsk offentlig sektor
**Regulatorisk forankring:** Utredningsinstruksen (2016), DFOs veileder til utredningsinstruksen
**Category:** Solution Architecture & Advisory

View file

@ -1,6 +1,6 @@
# Kapasitet og gjennomførbarhetsvurdering — Benchmarks for AI-prosjekter
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Målgruppe:** Arkitekter og prosjektledere som vurderer gjennomførbarhet av AI-prosjekter i norsk offentlig sektor
**Formål:** Gi konkrete benchmarks for kompetansevurdering, tidsplanvalidering, risikovurdering og MVP-avgrensning
**Category:** Solution Architecture & Advisory

View file

@ -1,6 +1,6 @@
# Diagram Prompt Templates for Imagen 3
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Målgruppe:** diagram-generation-agent
**Format:** Prompt-maler for `mcp__mcp-image__generate_image` (Imagen 3 / Nano Banana Pro)
**Category:** Solution Architecture & Advisory

View file

@ -1,6 +1,6 @@
# Regional tilgjengelighetsverifisering — Azure AI-tjenester
**Sist oppdatert:** 2026-06-24 (v1.0)
**Last updated:** 2026-06-24 (v1.0)
**Målgruppe:** Arkitekter som verifiserer Azure-tjenestetilgjengelighet for norsk offentlig sektor
**Datakilde:** Microsoft Learn (MCP-verifisert 2026-06-24), Azure Products by Region
**Category:** Solution Architecture & Advisory

View file

@ -1,6 +1,6 @@
# Kildesporing og antakelsesregister
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Målgruppe:** Arkitekter som utarbeider AI-arkitekturvurderinger og utredninger
**Formål:** Sikre sporbarhet, transparens og etterprøvbarhet i arkitekturvurderinger
**Category:** Solution Architecture & Advisory

View file

@ -1,7 +1,7 @@
# Kostnadsoptimalisering i MLOps-pipelines
**Dato:** 2026-04
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Relevans:** Azure Machine Learning, MLOps-implementering, FinOps for AI
**Type:** reference
**Source:** https://learn.microsoft.com/azure/machine-learning/concept-ml-pipelines

View file

@ -1,6 +1,6 @@
# Feedback Loops and Continuous Improvement
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Dato:** 2026-02-04
**Last updated:** 2026-06-24
**Confidence:** HIGH (basert på offisiell Microsoft-dokumentasjon)

View file

@ -2,7 +2,7 @@
**Dato:** 2026-02-04
**Last updated:** 2026-06-19
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Konfidensgrad:** Høy (basert på 18 MCP-kilder fra Microsoft Learn)
**Type:** reference
**Source:** https://learn.microsoft.com/python/api/overview/azure/ai-evaluation-readme

View file

@ -1,6 +1,6 @@
# Governance and Audit Trails in MLOps
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Dato:** 2026-06-19
**Confidence:** 95% (High — bygger på offisiell Microsoft-dokumentasjon og Azure-referansearkitekturer)
**Type:** reference

View file

@ -1,6 +1,6 @@
# Inferencing Optimization and Caching
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Dato:** 2026-06-19
**Forfattet av:** Cosmo Skyberg, Senior Microsoft AI Solution Architect
**Type:** reference

View file

@ -1,7 +1,7 @@
# Infrastructure as Code for MLOps
**Dato:** 2026-06-19
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Forfatter:** Cosmo Skyberg, Senior Microsoft AI Solution Architect
**Type:** reference
**Source:** https://learn.microsoft.com/azure/aks/concepts-machine-learning-ops

View file

@ -1,7 +1,7 @@
# LLM Evaluation in Production Contexts
**Kategori:** MLOps & GenAIOps
**Sist oppdatert:** 2026-06-19
**Category:** MLOps & GenAIOps
**Last updated:** 2026-06-19
**Confidence:** High (basert på offisiell Microsoft dokumentasjon, Microsoft Foundry SDK, og MLflow 3)
**Type:** reference
**Source:** https://learn.microsoft.com/azure/foundry/concepts/observability

View file

@ -1,6 +1,6 @@
# Security and Access Control in MLOps
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Last updated:** 2026-06-19
**Dato:** 2026-06-19
**Confidence:** HIGH — Basert på offisiell Microsoft Learn dokumentasjon (8 MCP-oppslag, 16 kilder)

View file

@ -1,7 +1,7 @@
# MLOps Team Collaboration and Tools Integration
**Kategori:** MLOps & GenAIOps
**Sist oppdatert:** 2026-06-19
**Category:** MLOps & GenAIOps
**Last updated:** 2026-06-19
**Kilde:** Microsoft Learn, Azure Architecture Center
**Konfidensgradering:** ⭐⭐⭐⭐⭐ (Verifisert mot offisiell Microsoft-dokumentasjon)
**Type:** reference

View file

@ -1,6 +1,6 @@
# Monitoring and Observability for ML Systems
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Dato:** 2026-04
**Kilder:** Microsoft Learn (azure-machine-learning, azure-monitor)
**Konfidensgrad:** ⭐⭐⭐⭐⭐ (Verifisert mot offisiell Microsoft-dokumentasjon)

View file

@ -1,6 +1,6 @@
# Prompt Flow and Production Deployment
**Kategori:** MLOps & GenAIOps
**Category:** MLOps & GenAIOps
**Dato:** 2026-02-04
**Last updated:** 2026-06-19
**Confidence:** 🟢 Høy (basert på offisiell Microsoft-dokumentasjon fra Microsoft Foundry og Azure Machine Learning)

View file

@ -1,7 +1,7 @@
# Responsible AI Integration in MLOps
**Kategori:** MLOps & GenAIOps
**Sist oppdatert:** 2026-06-19
**Category:** MLOps & GenAIOps
**Last updated:** 2026-06-19
**Confidence:** 95% (basert på offisiell Microsoft-dokumentasjon og Azure Machine Learning-referanser)
**Type:** reference
**Source:** https://learn.microsoft.com/azure/machine-learning/concept-responsible-ai-dashboard

View file

@ -1,7 +1,7 @@
# Anomaly Detection for AI Systems
**Dato:** 5. februar 2026
**Kategori:** Monitoring & Observability
**Category:** Monitoring & Observability
**Målgruppe:** AI-arkitekter, DevOps-team, MLOps-ingeniører
**Type:** reference
**Source:** https://learn.microsoft.com/azure/ai-services/anomaly-detector/overview

View file

@ -1,6 +1,6 @@
# Application Insights for LLM Monitoring
**Kategori:** Monitoring & Observability
**Category:** Monitoring & Observability
**Dato:** 2026-02-05
**Status:** Komplett
**Type:** reference

View file

@ -1,7 +1,7 @@
# Azure Monitor Setup and Configuration for AI Workloads
**Kategori:** Monitoring & Observability
**Sist oppdatert:** 2026-02-05
**Category:** Monitoring & Observability
**Last updated:** 2026-02-05
**Gjelder for:** Azure OpenAI, Azure AI Services, Azure AI Search, Microsoft Foundry
**Type:** reference

View file

@ -1,7 +1,7 @@
# Custom Dashboards for AI Operations
**Kategori:** Monitoring & Observability
**Sist oppdatert:** 2026-06-19 | Verified: MCP 2026-06-19
**Category:** Monitoring & Observability
**Last updated:** 2026-06-19 | Verified: MCP 2026-06-19
**Brukes av:** Cosmo Skyberg, Microsoft AI Solution Architect
**Type:** reference
**Source:** https://learn.microsoft.com/azure/azure-monitor/visualize/workbooks-overview

View file

@ -1,6 +1,6 @@
# Distributed Tracing for AI Pipelines
**Kategori:** Monitoring & Observability
**Category:** Monitoring & Observability
**Dato:** 2026-06-19
**Status:** ✅ Komplett
**Type:** reference

View file

@ -1,6 +1,6 @@
# Log Analytics KQL Queries for AI
**Kategori:** Monitoring & Observability
**Category:** Monitoring & Observability
**Dato:** 2026-05
**Forfatter:** Cosmo Skyberg, AI Solution Architect
**Type:** reference

View file

@ -1,6 +1,6 @@
# Token Usage Tracking and Attribution
**Kategori:** Monitoring & Observability
**Category:** Monitoring & Observability
**Dato:** 2026-06-19
**Versjon:** 1.0
**Type:** reference

View file

@ -1,8 +1,8 @@
# DFØs 5-stegs modell for gevinstrealisering i AI-prosjekter
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Status:** Gjeldende
**Kategori:** Norwegian Public Sector AI Governance
**Category:** Norwegian Public Sector AI Governance
**Konfidens:** Høy (basert på DFØ veileder og Prosjektveiviseren)
**Type:** methodology

View file

@ -1,6 +1,6 @@
# Norske NLP-benchmarks og språkkvalitetsvurdering
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Status:** Gjeldende
**Category:** Norwegian Public Sector AI Governance
**Type:** reference

View file

@ -1,7 +1,7 @@
# AI-trusselbibliotek for ROS-analyse
**Sist oppdatert:** 2026-06-18
**Kategori:** Norwegian Public Sector AI Governance
**Last updated:** 2026-06-18
**Category:** Norwegian Public Sector AI Governance
**Status:** Established Practice
**Formål:** Strukturert trusselkatalog for ros-analysis-agent — gir deterministisk trusselidentifisering med standardverdier for sannsynlighet og konsekvens
**Type:** methodology

View file

@ -1,7 +1,7 @@
# Integrasjonsguide: ROS, DPIA og sikkerhetsvurdering
**Sist oppdatert:** 2026-02
**Kategori:** Norwegian Public Sector AI Governance
**Last updated:** 2026-02
**Category:** Norwegian Public Sector AI Governance
**Status:** Established Practice
**Formål:** Veiledning for koordinering mellom ROS-analyse, DPIA og sikkerhetsvurdering — unngå duplisering, sikre dekning, og produser et sammenhengende risikovurderingsgrunnlag
**Type:** methodology

View file

@ -1,7 +1,7 @@
# MAESTRO 7-lags sikkerhetsmodell for multiagent AI-systemer
**Sist oppdatert:** 2026-02
**Kategori:** Norwegian Public Sector AI Governance
**Last updated:** 2026-02
**Category:** Norwegian Public Sector AI Governance
**Status:** Established Practice
**Formål:** Strukturert sikkerhetsmodell for multiagent-orkestrering — brukes av ros-analysis-agent for dybdevurdering av agent-baserte systemer
**Type:** methodology

View file

@ -1,7 +1,7 @@
# ROS-metodikk: NS 5814, ISO 31000 og AI-spesifikke rammeverk
**Sist oppdatert:** 2026-06-18
**Kategori:** Norwegian Public Sector AI Governance
**Last updated:** 2026-06-18
**Category:** Norwegian Public Sector AI Governance
**Status:** Established Practice
**Formål:** Detaljert metodikkguide for ros-analysis-agent — kobler AI-ROS til etablerte standarder og sikrer revisjonssporbarhet
**Type:** regulatory

View file

@ -1,7 +1,7 @@
# ROS-rapportmaler for AI-systemer
**Sist oppdatert:** 2026-02
**Kategori:** Norwegian Public Sector AI Governance
**Last updated:** 2026-02
**Category:** Norwegian Public Sector AI Governance
**Status:** Established Practice
**Formål:** Standardiserte rapportmaler for ros-analysis-agent — Quick ROS og Full ROS
**Type:** template

View file

@ -1,7 +1,7 @@
# ROS-scoringsrubrikker (7×5)
**Sist oppdatert:** 2026-02 (v1.0)
**Kategori:** Norwegian Public Sector AI Governance
**Last updated:** 2026-02 (v1.0)
**Category:** Norwegian Public Sector AI Governance
**Status:** Established Practice
**Formål:** Deterministiske rubrikker for ros-analysis-agent — erstatter vage 1-5 beskrivelser med eksakte, verifiserbare sjekkpunkter
**Type:** methodology

View file

@ -1,7 +1,7 @@
# Sektorspesifikke ROS-sjekklister for AI-systemer
**Sist oppdatert:** 2026-02
**Kategori:** Norwegian Public Sector AI Governance
**Last updated:** 2026-02
**Category:** Norwegian Public Sector AI Governance
**Status:** Established Practice
**Formål:** Sektortilpassede sjekklister for ros-analysis-agent — gir sektor-spesifikk risikoidentifisering utover generell AI-risikovurdering
**Type:** template

View file

@ -1,8 +1,8 @@
# Samfunnsøkonomisk analyse med NNV-beregning for AI-prosjekter
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Status:** Gjeldende
**Kategori:** Norwegian Public Sector AI Governance
**Category:** Norwegian Public Sector AI Governance
**Konfidens:** Høy (basert på DFØ veileder 2023 og Finansdepartementets R-109/21)
**Type:** methodology

View file

@ -1,6 +1,6 @@
# EU AI Act — Annex III Sjekkliste for høyrisiko-klassifisering
**Sist oppdatert:** 2026-02 (v1.0)
**Last updated:** 2026-02 (v1.0)
**Status:** GA
**Category:** Responsible AI & Governance
**Hjemmel:** Regulation (EU) 2024/1689, Annex III, Article 6(2)-(3)

View file

@ -1,7 +1,7 @@
# AI Center of Excellence - Building Organizational Capability
**Kategori:** Responsible AI & Governance
**Opprettet:** 2026-04 | **Sist oppdatert:** 2026-06-19
**Category:** Responsible AI & Governance
**Opprettet:** 2026-04 | **Last updated:** 2026-06-19
**Confidence:** HIGH (basert på Microsoft Cloud Adoption Framework og offisiell dokumentasjon)
**Type:** reference
**Source:** https://learn.microsoft.com/azure/cloud-adoption-framework/scenarios/ai/govern

View file

@ -1,7 +1,7 @@
# AI Governance Structure - Building an Organizational Framework
**Dato:** 2026-02-03
**Kategori:** Responsible AI & Governance
**Category:** Responsible AI & Governance
**Målgruppe:** Tekniske beslutningstakere, AI-arkitekter, governance-team
**Oppdateringsfrekvens:** Kvartalsvis (Q1 2026)
**Type:** methodology

View file

@ -1,7 +1,7 @@
# Red Teaming AI Models - Adversarial Testing & Security
**Dato:** 2026-06-19
**Kategori:** Responsible AI & Governance
**Category:** Responsible AI & Governance
**Målgruppe:** Arkitekter, sikkerhetsteam, AI-utviklere
**Konfidensgrad:** ⚠️ HIGH — Basert på offisiell Microsoft-dokumentasjon (jun 2026)
**Type:** reference

View file

@ -1,6 +1,6 @@
# Adversarial Input Robustness Testing and Fuzzing
**Kategori:** AI Security Engineering
**Category:** AI Security Engineering
**Dato:** 2026-06-19
**Status:** Aktiv
**Type:** reference

View file

@ -1,7 +1,7 @@
# AI Prompt Shield — Nettverksnivå Prompt Injection-beskyttelse
**Kategori:** AI Security Engineering
**Sist oppdatert:** 2026-06-19
**Category:** AI Security Engineering
**Last updated:** 2026-06-19
**Målgruppe:** Arkitekter som skal beskytte AI-systemer mot prompt injection og jailbreak-angrep
**Status:** To separate produkter — Content Safety Prompt Shields (GA), AI Gateway Prompt Shield (Preview)
**Type:** reference

View file

@ -1,7 +1,7 @@
# Practical Red Team Operations for AI Systems
**Kategori:** AI Security Engineering
**Sist oppdatert:** 2026-02-05
**Category:** AI Security Engineering
**Last updated:** 2026-02-05
**Relatert:** ai-prompt-injection-defense.md, ai-jailbreak-prevention.md
**Source:** https://learn.microsoft.com/security/ai-red-team/training
**Type:** reference

View file

@ -1,7 +1,7 @@
# Data Leakage Prevention in AI Contexts
**Kategori:** AI Security Engineering
**Sist oppdatert:** 2026-06-19 | Verified: MCP 2026-06-19
**Category:** AI Security Engineering
**Last updated:** 2026-06-19 | Verified: MCP 2026-06-19
**Målgruppe:** Enterprise AI architects og security teams
**Type:** reference
**Source:** https://learn.microsoft.com/security/benchmark/azure/mcsb-v2-artificial-intelligence-security

View file

@ -1,7 +1,7 @@
# Microsoft Entra Agent ID — Zero Trust for AI-agentidentiteter
**Kategori:** AI Security Engineering
**Sist oppdatert:** 2026-06-19 | Verified: MCP 2026-06
**Category:** AI Security Engineering
**Last updated:** 2026-06-19 | Verified: MCP 2026-06
**Status:** Public Preview, utvidet etter Ignite 2025 (50+ nye/oppdaterte artikler i Entra Agent ID-portføljen; opt-out er midlertidig — vil bli obligatorisk for nye agenter) *(Verified MCP 2026-06)*
**Målgruppe:** Arkitekter som skal sikre AI-agenter med dedikerte identiteter og Zero Trust-prinsipper
**Type:** reference

View file

@ -1,6 +1,6 @@
# Model Fingerprinting and Watermarking for Attribution
**Kategori:** AI Security Engineering
**Category:** AI Security Engineering
**Dato:** 2026-06-19
**Status:** Active
**Type:** reference

View file

@ -1,6 +1,6 @@
# Secure Model Deployment and Runtime Hardening
**Kategori:** AI Security Engineering
**Category:** AI Security Engineering
**Dato:** 2026-02-05
**Målgruppe:** Arkitekter som skal sikre AI-modeller i produksjonsmiljøer
**Type:** reference

View file

@ -1,7 +1,7 @@
# Microsoft Security Copilot — AI-drevet sikkerhetsoperasjonsplattform
**Kategori:** AI Security Engineering
**Sist oppdatert:** 2026-06-19 | Verified: MCP 2026-06
**Category:** AI Security Engineering
**Last updated:** 2026-06-19 | Verified: MCP 2026-06
**Målgruppe:** Sikkerhetsarkitekter og SOC-ledere som vurderer AI-assistert sikkerhetsoperasjon
**Type:** reference
**Source:** https://learn.microsoft.com/copilot/security/agents-overview

View file

@ -1,7 +1,7 @@
# Sikkerhets-scoringsrubrikker (6×5)
**Sist oppdatert:** 2026-06-19 (v1.0)
**Kategori:** AI Security Engineering
**Last updated:** 2026-06-19 (v1.0)
**Category:** AI Security Engineering
**Status:** Established Practice
**Formål:** Deterministiske rubrikker for security-assessment-agent — erstatter vage 1-5 beskrivelser med eksakte, verifiserbare sjekkpunkter
**Type:** reference

View file

@ -1,6 +1,6 @@
# Supply Chain Security for AI Models and Dependencies
**Kategori:** AI Security Engineering
**Category:** AI Security Engineering
**Dato:** 2026-06-19
**Relatert plattform:** Microsoft Foundry, Azure Machine Learning, Azure DevOps, Microsoft Defender for Cloud
**Type:** reference

View file

@ -1,7 +1,7 @@
# Zero Trust Architecture Applied to AI Services
**Kategori:** AI Security Engineering
**Sist oppdatert:** 2026-06-19
**Category:** AI Security Engineering
**Last updated:** 2026-06-19
**Målgruppe:** Arkitekter som skal sikre AI-tjenester med Zero Trust-prinsipper
**Type:** reference
**Source:** https://learn.microsoft.com/security/zero-trust/apply-zero-trust-azure-services-overview

View file

@ -1,6 +1,6 @@
# Deterministisk kostnadsberegningsmodell for AI-arkitekturvurderinger
**Sist oppdatert:** 2026-06 (v1.2)
**Last updated:** 2026-06 (v1.2)
**Status:** GA
**Category:** Cost Optimization & FinOps for AI
**Rolle:** Kanonisk prissannhet — eneste autoritative enhetspris-register for pluginen

View file

@ -0,0 +1,117 @@
// tests/kb-update/test-relabel-dialect.test.mjs
// TDD for Enhet 1 (decision-b, path A, ⊥ R7) — pure value-preserving dialect relabel of the
// Norwegian header labels to their English equivalents on the 51 ref files that carry them:
// **Sist oppdatert:** → **Last updated:** (31 files)
// **Kategori:** → **Category:** (42 files) [22 files carry both → 73 relabels]
//
// The applier (relabel-dialect.mjs) is a manifest-driven driver over the pure primitive
// relabelHeaderDialect(). The ONLY new production logic is that primitive + the frozen MANIFEST.
// This suite pins the primitive's safety contract and the manifest's structural well-formedness.
//
// Explicitly OUT of Enhet 1 (deferred to later units, per the corrected residual):
// - **Dato:** → **Last updated:** (16) — Dato also appears in BODY templates ([YYYY-MM-DD]),
// a blind replace would corrupt them; needs a header-scoped ISO-date guard (Unit 2).
// - Status backfill (27 none + 4 plain) and the ai-act dual-block dedup (Unit 3).
// - decision-trees.md date backfill (Unit 4).
import { test } from 'node:test';
import assert from 'node:assert/strict';
import {
relabelHeaderDialect,
LABEL_MAP,
MANIFEST,
} from '../../scripts/kb-update/relabel-dialect.mjs';
// ── primitive: value-preserving relabel ────────────────────────────────────
test('relabels **Sist oppdatert:** → **Last updated:**, value byte-identical', () => {
const input = '# T\n\n**Sist oppdatert:** 2026-02 (v1.0)\n**Status:** GA\n\n---\n\n## Body\n';
const { content, applied } = relabelHeaderDialect(input);
assert.equal(applied.length, 1);
assert.match(content, /\*\*Last updated:\*\* 2026-02 \(v1\.0\)/);
assert.doesNotMatch(content, /\*\*Sist oppdatert:\*\*/);
// Only the label token changed — reversing the sub reconstructs the original exactly.
assert.equal(content.replace('**Last updated:**', '**Sist oppdatert:**'), input);
});
test('relabels **Kategori:** → **Category:**, value byte-identical', () => {
const input = '# T\n\n**Kategori:** AI Security Engineering\n**Type:** reference\n\n## Body\n';
const { content, applied } = relabelHeaderDialect(input);
assert.equal(applied.length, 1);
assert.match(content, /\*\*Category:\*\* AI Security Engineering/);
assert.doesNotMatch(content, /\*\*Kategori:\*\*/);
assert.equal(content.replace('**Category:**', '**Kategori:**'), input);
});
test('applies BOTH relabels when both norsk labels are present', () => {
const input = '# T\n\n**Sist oppdatert:** 2026-06-19\n**Kategori:** X\n**Status:** GA\n\n---\n\n## Body\n';
const { content, applied } = relabelHeaderDialect(input);
assert.equal(applied.length, 2);
assert.match(content, /\*\*Last updated:\*\* 2026-06-19/);
assert.match(content, /\*\*Category:\*\* X/);
});
test('header-scoping: a norsk label in the BODY (past first --- / ##) is NOT touched', () => {
// The template-contamination trap: only the header block above the first thematic break
// or section heading is in scope.
const input =
'# T\n\n**Kategori:** Real Header Value\n\n---\n\n## Mal\n**Kategori:** [fyll inn]\n';
const { content, applied } = relabelHeaderDialect(input);
assert.equal(applied.length, 1);
assert.match(content, /\*\*Category:\*\* Real Header Value/);
// The body template line survives verbatim.
assert.match(content, /## Mal\n\*\*Kategori:\*\* \[fyll inn\]/);
});
test('no-op when no norsk label is present (English-dialect file)', () => {
const input = '# T\n\n**Last updated:** 2026-06\n**Category:** X\n**Status:** GA\n\n## Body\n';
const { content, applied } = relabelHeaderDialect(input);
assert.equal(applied.length, 0);
assert.equal(content, input); // byte-identical
});
test('idempotent: re-running on the output is a no-op', () => {
const input = '# T\n\n**Sist oppdatert:** 2026-02\n**Kategori:** X\n\n## Body\n';
const once = relabelHeaderDialect(input);
const twice = relabelHeaderDialect(once.content);
assert.equal(twice.applied.length, 0);
assert.equal(twice.content, once.content);
});
test('collision-guard: throws if the English target label already exists in the header', () => {
// A dual-header file (bold **Category:** + norsk **Kategori:**) would duplicate on relabel.
const input = '# T\n\n**Category:** X\n**Kategori:** X\n\n## Body\n';
assert.throws(() => relabelHeaderDialect(input), /already present/i);
});
test('multi-occurrence-guard: throws if a norsk label appears twice in the header block', () => {
const input = '# T\n\n**Kategori:** X\n**Kategori:** Y\n\n## Body\n';
assert.throws(() => relabelHeaderDialect(input), /appears/i);
});
test('LABEL_MAP is exactly the two norsk→english pairs of Enhet 1 (no Dato)', () => {
const froms = LABEL_MAP.map((p) => p[0]);
assert.deepEqual(froms.sort(), ['**Kategori:**', '**Sist oppdatert:**']);
// **Dato:** is intentionally excluded (body-template trap → deferred to Unit 2).
assert.ok(!froms.some((f) => /Dato/.test(f)));
});
// ── MANIFEST: structural well-formedness ───────────────────────────────────
test('MANIFEST: exactly 51 distinct, well-formed reference paths', () => {
assert.equal(MANIFEST.length, 51);
const set = new Set(MANIFEST);
assert.equal(set.size, 51, 'duplicate path in MANIFEST');
for (const p of MANIFEST) {
assert.match(p, /^skills\/ms-ai-[a-z]+\/references\/.+\.md$/, p);
}
});
test('MANIFEST: excludes advisor files already English-normalised by R21', () => {
// adr-template / poc-template etc. got their Status via R21 but were already English-dialect
// for Category/Last-updated → they must NOT be in this relabel manifest.
for (const p of MANIFEST) {
assert.ok(!p.endsWith('adr-template.md'));
assert.ok(!p.endsWith('poc-template.md'));
}
});