From de0d94cbc139fb95a59b70fb34e12e31f7e1b5cc Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Tue, 7 Jul 2026 07:45:27 +0200 Subject: [PATCH] =?UTF-8?q?feat(ms-ai-architect):=20R22=20decision-b=20Enh?= =?UTF-8?q?et=203=20=E2=80=94=20Status-backfill=2025=20none=20+=20ai-act?= =?UTF-8?q?=20dual-header-dedup=204=20(Missing=20Status/Last-updated=2029+?= =?UTF-8?q?4=E2=86=920)=20[skip-docs]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To operasjoner, én økt (⊥ R7), begge ren metadata-normalisering (verdi aldri fabrikkert). Premiss-korreksjon (ground truth 2026-07-07): roadmap sa «27 none + 4 ai-act». Målt: 29 mangler bold **Status:** = 25 rene none + 4 ai-act (plain Status: GA). De «27» inkluderte 2 for mye — 2 filer (custom-dashboards-ai-operations, zero-trust-ai-services) har bold **Status:** KUN forbi byte 500 (present for full-fil-audit, usynlig for 500B header-parser) → egen header-slanking-residual (§8-register), utenfor Enhet 3. Op A — Status-backfill 25 rene none: utvidet backfill-status.mjs MANIFEST 14→39 (samme statusForFile + insertMetaField + hard per-fil-invariant, idempotent skip på de 14 R21-gjorte). Alle 25 → **Status:** Established Practice (ingen matcher template|matrix|benchmarks|register). Diff +25/-0. Op B — ai-act dual-header-dedup (4 filer): ny driver dedup-plain-header.mjs + 2 rene primitiver i transform.mjs — boldifyPlainField (plain→bold, verdi bevart byte-eksakt, header-scoped, idempotent) + dropRedundantPlainField (sletter plain KUN når bold m/ identisk verdi beviser redundans; kaster ved avvik/manglende bold). Per fil: plain Last updated: + Status: GA → bold (2026-06-18/2026-02, GA bevart), redundant plain Category: fjernet. Hard per-fil-invariant (net -1 linje, begge felt bold m/ bevart verdi, ingen plain-header igjen, body byte-identisk). Diff -12/+8. Verifisering: test-backfill-status 8/8 + test-dedup-plain-header 13/13; audit Missing Status 29→0, Missing English Last updated 4→0; skills-diff 29 filer +33/-12 (kun **Status:** + 8 bold-swaps), diff-kontekst inspisert per fil; begge drivere idempotent (re-run 0 writes); suite 806/806 exit 0; none=8 uendret (Enhet 4). --- docs/plugin-roadmap-2026-07.md | 16 +- scripts/kb-update/backfill-status.mjs | 70 ++++++--- scripts/kb-update/dedup-plain-header.mjs | 139 ++++++++++++++++++ scripts/kb-update/lib/transform.mjs | 82 +++++++++++ .../cost-optimization-mlops-pipelines.md | 1 + .../feedback-loops-continuous-improvement.md | 1 + .../genaiops-llm-specific-practices.md | 1 + .../governance-audit-ml-operations.md | 1 + .../inferencing-optimization-caching.md | 1 + .../infrastructure-as-code-mlops.md | 1 + .../llm-evaluation-production.md | 1 + .../mlops-security-access-control.md | 1 + .../mlops-teams-collaboration-tools.md | 1 + .../model-deployment-strategies-azure.md | 1 + .../monitoring-observability-ml-systems.md | 1 + .../prompt-flow-production-deployment.md | 1 + .../responsible-ai-mlops-integration.md | 1 + .../anomaly-detection-ai-systems.md | 1 + .../azure-monitor-setup-ai-workloads.md | 1 + .../log-analytics-kql-ai-queries.md | 1 + .../token-usage-tracking-attribution.md | 1 + .../ai-act-classification-methodology.md | 5 +- .../ai-act-deployer-obligations.md | 5 +- .../responsible-ai/ai-act-fria-template.md | 5 +- .../ai-act-provider-obligations.md | 5 +- .../ai-center-of-excellence-setup.md | 1 + .../ai-governance-structure-framework.md | 1 + .../responsible-ai/red-teaming-ai-models.md | 1 + .../ai-red-team-operations-practical.md | 1 + .../data-leakage-prevention-ai.md | 1 + .../secure-model-deployment-hardening.md | 1 + .../security-copilot-integration.md | 1 + .../supply-chain-security-ai-models.md | 1 + tests/kb-update/test-backfill-status.test.mjs | 92 +++++++++--- .../test-dedup-plain-header.test.mjs | 123 ++++++++++++++++ 35 files changed, 510 insertions(+), 57 deletions(-) create mode 100644 scripts/kb-update/dedup-plain-header.mjs create mode 100644 tests/kb-update/test-dedup-plain-header.test.mjs diff --git a/docs/plugin-roadmap-2026-07.md b/docs/plugin-roadmap-2026-07.md index 495602d..b1d4ee8 100644 --- a/docs/plugin-roadmap-2026-07.md +++ b/docs/plugin-roadmap-2026-07.md @@ -163,10 +163,22 @@ Maskineriet er bygget (krav 1+2+3 + per-kategori-hint); målingen er aldri kjør **Verifisering:** `test-relabel-dato` 10/10 (inkl. disk-integritet: committed-state + at de 5 dual-filene forblir urørt); git diff **+16/−16** på 16 filer (hver endret linje = label-swap, verifisert begge retninger); revers-substitusjon byte-eksakt; idempotent re-run = 0; verdier bevart (`2026-04`, `5. februar 2026`, …); ground truth `Missing English Last updated (non-advisor) 20→4`, gjenstående `**Dato:**` = 13 (5 dual + 8 body); R22-Enhet-1-tool fortsatt no-op (51/51 already-english); suite **792/792** exit 0. +### Enhet 3 — Status-backfill + ai-act dual-header-dedup ✅ 2026-07-07 + +To operasjoner, én økt (⊥ R7), begge metadata-normalisering (verdi ALDRI fabrikkert). + +**Premiss-korreksjon (ground truth 2026-07-07, `audit-corpus-headers.mjs` + worklist):** roadmap sa «27 none + 4 ai-act». Målt: **29** filer mangler bold `**Status:**` = **25 rene «none»** (ingen Status-markør) + **4 ai-act** (plain `Status: GA`). De «27» inkluderte 2 for mye: **2 filer** (`monitoring-observability/custom-dashboards-ai-operations`, `ai-security-engineering/zero-trust-ai-services`) bærer bold `**Status:**` KUN forbi byte 500 → present for full-fil-audit, men **usynlig for 500-byte header-parseren**. De er IKKE manglende felt — de er en egen **header-slanking-residual** (§8-register), utenfor Enhet 3. + +**Op A — Status-backfill 25 rene none-filer.** Utvidet den ene Status-mekanismen `backfill-status.mjs` (MANIFEST 14→**39**; samme `statusForFile` + `insertMetaField` + hard per-fil-invariant, idempotent skip på de 14 R21-gjorte). Alle 25 → `**Status:** Established Practice` (ingen matcher `template|matrix|benchmarks|register`-token). Diff **+25/−0**, hver = én `**Status:**`-linje i bold-meta-run innenfor 500B. + +**Op B — ai-act dual-header-dedup (4 filer).** Ny driver `dedup-plain-header.mjs` + 2 nye rene primitiver i `transform.mjs`: `boldifyPlainField()` (plain `