From a6ff17fd45e5784b2907dd9572da5d847ac0814c Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Tue, 23 Jun 2026 17:56:43 +0200 Subject: [PATCH] =?UTF-8?q?feat(ms-ai-architect):=20Spor=20D=20steg=20A=20?= =?UTF-8?q?=E2=80=94=20eng+infra=20K10-fix=20=E2=86=92=20korpus-invariant?= =?UTF-8?q?=20=E2=89=A590=20oppfylt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Skjerper ms-ai-infrastructure-description for å bryte build↔operate-overlappet mot ms-ai-engineering (operatør-godkjent leaning, S38): "multi-region"→"cross-region" og "edge AI architecture"→"edge AI deployment". Fjerner de delte distinktive tokenene `multi` (vekt 0.5) og `architecture` (0.333) → eng↔infra combined 7.4167→6.5833 (< 7.0 terskel). Korpus-maks faller til 6.8333 (eng↔gov, pass). Begge edits sammen gir lavere worst-case enn edit #1 alene (6.9167), derfor robust margin. Resultat: K10-gulvet løftes for begge → eng 89→96, infra 89→96. ALLE 5 skills nå ≥90 (advisor 91, eng/gov/infra/sec 96). Korpus-invarianten (operatør-krav S38) oppfylt. Judge-cache (🔑-regel): description-edit invaliderer infra K1. Re-judget mot det operatør-kuraterte 20-settet — UENDRET 1.0/0.0/1.0 (edit fjerner kun tokens → kan ikke gi falske positive; in-domain #2/#6 trigger fortsatt på BCDR/hybrid-vokabular). K4/K7/K8/K9 uendret (body/refs urørt). Provenance oppdatert S11→S39. Test: K10-real-five-testen pinnet pre-fix-baseline (eng+infra FAIL) — oppdatert til å pinne korpus-invarianten (alle 5 pass, eng↔infra < 7.0). kb-eval 142/142, kb-update 316/316, validate 239/0, kb-integrity 192/0. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/kb-eval/data/judge-results.json | 4 +-- skills/ms-ai-infrastructure/SKILL.md | 2 +- .../kb-eval/test-k10-sibling-overlap.test.mjs | 25 +++++++++++++------ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/scripts/kb-eval/data/judge-results.json b/scripts/kb-eval/data/judge-results.json index 575e380..11d6f95 100644 --- a/scripts/kb-eval/data/judge-results.json +++ b/scripts/kb-eval/data/judge-results.json @@ -30,8 +30,8 @@ "K9_noTimeSensitive": { "pass": true, "findings": [] } }, "ms-ai-infrastructure": { - "_updated": "S11 (2026-06-20) — K1 authoritative (blinded judge vs curated 20-set); K9 prior S10", - "K1_triggerPrecision": { "provisional": false, "inDomainHitRate": 1.0, "outDomainFalsePositiveRate": 0.0, "precision": 1.0, "pass": true, "misclassified": [], "notes": "S11 authoritative: blinded judge vs operator-curated 20-set. 10/10 in-domain hits, 0/10 false positives. BCDR/edge/sovereign/hybrid in-domain all triggered; engineering/governance/security/advisor/cost correctly excluded." }, + "_updated": "S39 (2026-06-23) — K1 RE-JUDGED after K10 description edit (multi-region→cross-region, edge AI architecture→deployment); K4/K7/K8/K9 unchanged (body/refs untouched), prior S10/S11", + "K1_triggerPrecision": { "provisional": false, "inDomainHitRate": 1.0, "outDomainFalsePositiveRate": 0.0, "precision": 1.0, "pass": true, "misclassified": [], "notes": "S39 re-judge vs operator-curated 20-set after K10 boundary-sharpening edit. 10/10 in-domain hits, 0/10 false positives — UNCHANGED from S11. Edit only removed tokens (multi, architecture) → cannot add false positives; in-domain #2 (multi-region failover) and #6 (hybrid arkitektur) still trigger on remaining BCDR/resilience/hybrid vocabulary. engineering/governance/security/advisor/cost still correctly excluded." }, "K4_noDuplication": { "score": 5, "pass": true, "evidence": "S10 re-judge: consistent summary+pointer pattern; §1.2 RTO/RPO now ~2 lines delegating to bcdr/rto-rpo-planning-ai-services.md (265 lines). SLA table replaced by relative-guidance prose. No procedural duplication." }, "K7_imperativeStyle": { "ratio": 1.0, "pass": true, "notes": "10/10 sampled instruction sentences imperative/infinitive." }, "K8_sourceCitation": { "ratio": 1.0, "pass": true, "notes": "5/5 'Last updated: 2026-02' + Status; no source-URL on header line." }, diff --git a/skills/ms-ai-infrastructure/SKILL.md b/skills/ms-ai-infrastructure/SKILL.md index 54a9043..d0a19ef 100644 --- a/skills/ms-ai-infrastructure/SKILL.md +++ b/skills/ms-ai-infrastructure/SKILL.md @@ -1,7 +1,7 @@ --- name: ms-ai-infrastructure description: >- - Disaster recovery for AI workloads, multi-region Azure AI deployment, hybrid or edge AI architecture, sovereign cloud for Norway, offline-first AI patterns, AI infrastructure resilience. Covers BCDR, Azure Arc for AI, ONNX Runtime edge deployment, disconnected scenarios, Norwegian data sovereignty. Triggers on: "disaster recovery for AI workloads", "edge AI deployment", "sovereign cloud AI", "Azure Arc for AI", "BCDR for AI". + Disaster recovery for AI workloads, cross-region Azure AI deployment, hybrid or edge AI deployment, sovereign cloud for Norway, offline-first AI patterns, AI infrastructure resilience. Covers BCDR, Azure Arc for AI, ONNX Runtime edge deployment, disconnected scenarios, Norwegian data sovereignty. Triggers on: "disaster recovery for AI workloads", "edge AI deployment", "sovereign cloud AI", "Azure Arc for AI", "BCDR for AI". --- > **INSTRUKSJON:** Denne ferdigheten dekker infrastrukturresiliens og driftsarkitektur for AI-arbeidsbelastninger. diff --git a/tests/kb-eval/test-k10-sibling-overlap.test.mjs b/tests/kb-eval/test-k10-sibling-overlap.test.mjs index 20740ec..cc7510e 100644 --- a/tests/kb-eval/test-k10-sibling-overlap.test.mjs +++ b/tests/kb-eval/test-k10-sibling-overlap.test.mjs @@ -79,9 +79,16 @@ test('perSkillSiblingOverlap — empty pairs yields empty verdict map', () => { // Real-data path — eng + infra FAIL at 7.0; the other three PASS // --------------------------------------------------------------------------- -test('K10 on the real five — eng+infra FAIL (Azure-deployment boundary), rest PASS', () => { +test('K10 on the real five — ALL pass (eng↔infra boundary sharpened S39, corpus invariant)', () => { // Build descriptions straight from the curated belongs_to graph + lexical // surfaces via the same core the detector uses, so this asserts on live tokens. + // + // S39 (steg A): the eng↔infra pair used to fail K10 at combined=7.4167 (the + // Azure-deployment build↔operate boundary). The infra description was sharpened + // — "multi-region"→"cross-region", "edge AI architecture"→"edge AI deployment" — + // removing the shared distinctive tokens `multi` (0.5) and `architecture` (0.333), + // dropping the pair under threshold. This test now pins the corpus invariant: + // every skill passes K10 (a precondition for the ≥90 % score on all five). const skills = ['ms-ai-advisor', 'ms-ai-engineering', 'ms-ai-governance', 'ms-ai-infrastructure', 'ms-ai-security']; const descriptionsBySkill = {}; for (const s of skills) { @@ -90,13 +97,15 @@ test('K10 on the real five — eng+infra FAIL (Azure-deployment boundary), rest } const overlap = computeOverlapFromInputs(descriptionsBySkill, promptSet); const k10 = perSkillSiblingOverlap(overlap.pairs, { threshold: 7.0 }); - assert.equal(k10['ms-ai-engineering'].pass, false); - assert.equal(k10['ms-ai-infrastructure'].pass, false); - assert.equal(k10['ms-ai-engineering'].worstSibling, 'ms-ai-infrastructure'); - assert.equal(k10['ms-ai-infrastructure'].worstSibling, 'ms-ai-engineering'); - assert.equal(k10['ms-ai-advisor'].pass, true); - assert.equal(k10['ms-ai-governance'].pass, true); - assert.equal(k10['ms-ai-security'].pass, true); + for (const s of skills) { + assert.equal(k10[s].pass, true, `${s} must pass K10 (maxCombined ${k10[s].maxCombined} < 7.0)`); + assert.ok(k10[s].maxCombined < 7.0, `${s} maxCombined ${k10[s].maxCombined} must be < 7.0`); + } + // The formerly-failing pair is now safely under threshold (was 7.4167). + const engInfra = overlap.pairs.find( + (p) => p.key === 'ms-ai-engineering|ms-ai-infrastructure', + ); + assert.ok(engInfra.combined < 7.0, `eng↔infra combined ${engInfra.combined} must be < 7.0`); }); // ---------------------------------------------------------------------------