Skip to content

Grupp C-piloten: textspoiler migreras ur det befintliga källformatet - #13

Merged
arena-ai-coding-agent[bot] merged 2 commits into
mainfrom
arena/01a0de4a-0-js
Sep 26, 2026
Merged

arena-ai-coding-agent[bot] merged 2 commits into
mainfrom
arena/01a0de4a-0-js

Conversation

@arena-ai-coding-agent

@arena-ai-coding-agent arena-ai-coding-agent Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Grupp C-piloten: utredningen av de sju avvikande kodvalven

Vald väg: PATH A — det befintliga källformatet räcker. Exakt en demo migreras
(textspoiler); generatorn, dess API och CI-arbetsflödet är orörda. De övriga sex
är medvetet kvar, med mätta skäl i docs/demo-kalla.md (Grupp C-avsnittet).

Varför PATH A, och varför bara en demo

Varje demo undersöktes maskinellt före någon ändring: kodvalvets HTML mot
live-markupen rad för rad, kodvalvets CSS mot stilbladet regel för regel, vilka
klasser som finns i live-markupen, och vilka regler fler än ett kort använder
(en delad regel kan inte flyttas in i en källa utan att dupliceras i stilbladet —
scripts/build.test.mjs §3 fäller på exakt det).

Demo Live-markup Valvets markup Live-only-CSS som valvet inte bär Varför den inte migrerades
textspoiler .spoiler i en <p class="demo-yta"> samma markup ingen — migrerad
prefers-reduced-motion .prov.prov-rm + .rm-prov/.rm-snurra + @keyframes rm-rot .media-list-enradare .rm-* (måste följa med), .prov* två genuint olika implementationer; .media-list delas av fyra kort (§6b)
hover-hover .prov.prov-hover + .hover-prov .media-list-enradare .hover-prov samma; .prov-hover används även av media-hover-pointer
round-mod .mat-trappa + reglage (--lv) + auto-kryssruta .nd-math, två statiska staplar .mat-trappa, hela labb-blocket två olika implementationer + interaktion
media-color-gamut .prov.prov-gamut, två .prov-rad .nd-gamut, två <span> .prov-familjen (7 basregler + 11 @media-block) .prov-familjen ägs av ingen och används av fem kort
media-scripting .prov.prov-script, två .prov-rad .nd-script, två <span> samma .prov-familj samma blockerare
media-hover-pointer .prov.prov-pekare (tre rader) + .prov.prov-hover .nd-pek, två <span> samma .prov-familj samma blockerare; två frågor i ett kort

Mätt stöd för tabellen:

  • Fyra av sju valv använder ett eget .nd-*-namnrum som förekommer noll
    gånger i live-markupen (nd-gamut, nd-math, nd-pek, nd-script). Deras
    CSS renderas alltså ingenstans på sidan — den är valv-only. Lika selektorer
    bevisar ingenting om lika innehåll, så slutsatsen vilar på klassräkningen, inte
    på namnen.
  • .prov-familjen i stilbladet (rad 545–579: sju basregler — .prov,
    .prov-rad, .prov-rad::before, .prov-rad.pa, .prov-rad.pa::before,
    .prov-rad b, .prov-rad.pa b — och elva @media-block med tre regler var)
    används av fem kort. Att migrera ett av dem kräver antingen att familjen flyttas in i källan
    (reglerna står då två gånger i stilbladet → byggtestet fäller) eller att den
    ligger kvar som <style data-live> (den kopierade koden får då ingen stil och
    slutar fungera). Det är samma ägarlösa delade block som redan är noterat för
    radioflikar i §6b — nu med mätt konsumentlista. Nästa steg är ett beslut om
    .prov-familjen (troligen <style data-include="prov">, som Grupp B gjorde med
    swatch), inte en ändring av källformatet.
  • textspoiler var den enda där live-markupen och valvet var samma markup.
    Den enda skillnaden var demots varningskommentar, som bara fanns i valvet.
    parseSource strippar bara första ledande kommentaren, så källans
    dokumentationshuvud försvinner medan varningen (filens andra kommentar) följer
    med till både kortet och kopian. Ingen utbyggnad behövs — och ingen demo
    tvingades in i formatet för att höja räknaren.

Exakta filändringar

Fil Ändring
demos/textspoiler.html ny kanonisk källa (markup + demots fyra .spoiler-regler, ordagrant ur stilbladet)
index.html markörparet <!-- demo:textspoiler:markup --> runt .demo-yta-raden, /* demo:textspoiler:css */ runt reglerna, kodvalvet omgenererat (rows 11 → 14). Live-ytan oförändrad, övriga 132 kort orörda
scripts/demo-spec.mjs manifestpost för textspoiler (typ grupp-c) + typdokumentationen
tests/demo-scenarios.mjs scenario avslojad (fokus på partiet)
tests/demo-source.mjs 21 påståenden för sidan och den fristående kopian
scripts/check.test.mjs negativtestet "obalanserade CSS-klammerblock" pekade på valvets gamla ihopkomprimerade text; samma mutation, samma förväntade fel, ny sträng
tests/baseline/demos.json endast tillagd post (se nedan)
docs/demo-kalla.md endast Grupp C-avsnittet: metod, tabell, beslut, bevis, vad som inte gjordes

Avsiktliga skillnader live ↔ kopierat exempel

Inga nya. Skillnaden mot förut är att kopians CSS är formaterad som stilbladet
(fyra regler över flera rader i stället för ihopkomprimerade) och att
varningskommentaren nu står i både kortet och kopian i stället för bara i kopian.
Ingen regel har lagts till, tagits bort eller ändrats; ingen post lades till i
INTENTIONAL_DIFFS och ingen tolerans ändrades.

Testresultat

Lokalt (Chromium 153.0.8010.0 — exakt baslinjens bygge, via
CHROMIUM_PATH; se "Begränsningar" för varför bygget inte är Playwrights):

Kontroll Resultat
npm run build:check grön, 31 demos ur demos/, index.html i fas
npm run check (struktur, snippets, regressionstest, byggtest, registertest) grön; snippets 133 exempel / 14 basvariabler, byggtest 31 migrerade demos
node tests/menu-keyboard.mjs 16 ✓
node tests/ux-polish.mjs 51 ✓
node tests/register-nav.mjs 104 ✓
node tests/demo-source.mjs 504 ✓, 0 ✗ — 31 demos, sidan + fristående kopia
node tests/demo-parity.mjs 43 890 värden, 0 strukturella avvikelser; textspoiler: 534 värden, 0 strukturella, 0 px geometri

Bevis för att live-ytan är orörd:

  • Skärmbilder av #textspoiler .demo-yta (1280×900, animations: disabled) i
    vila och i avslöjat läge är byte-identiska före och efter migreringen:
    be689d988c4c0b2a5a3ed618fdfc557e1e567404d2986c21eb2d161f4f4432e6 (vila)
    och 687e101de59dd13f8b8c449a08c4fc9d3567cbf2c682f4a371d5cb23383abeec
    (avslöjad). Reproduktion:
    node tests/demo-parity.mjs --capture --merge --demo textspoiler --shots <dir>
    mot före- respektive efterdokumentet.
  • Textmetrikvarningarna varierar mellan körningar även för ett och samma
    dokument (7 i den inledande kontrollkörningen av orörd main, 19 i de
    jämförande körningarna). Därför kördes före- och efterdokumentet i samma
    körning: de 19 avvikelserna ligger på samma demos med samma tal
    (störst 21,74 px, target.elements[8].rect.y) — listorna är radvis identiska.
    Ingen ny avvikelse och ingen ny tolerans.
  • Ändringen i scripts/check.test.mjs är ett strängbyte i ett negativtest,
    inte en uppmjukning: samma mutation (ta bort { i en regel) ska fortfarande
    ge /klammerblock/; strängen pekar nu på den nya valvtexten. Utan bytet hade
    testet rapporterat "mutationen matchade ingenting" (testet trasigt), vilket är
    exakt vad som hände innan raden uppdaterades.

Baslinjens härkomst

  • Posten för textspoiler fångades med
    node tests/demo-parity.mjs --capture --merge --demo textspoiler före
    migreringen, ur dokumentet med sha256 2d2e2a5e… (= orörd main), Chromium
    153.0.8010.0, samma bygge som baslinjens.
  • tests/baseline/demos.json: 617 tillagda rader, 0 borttagna. De 30
    historiska posterna och hela mergeLog (16 poster) är oförändrade;
    mergeBaselineDemos vägrar skriva över en befintlig post, så en oavsiktlig
    omskrivning är inte möjlig.

Begränsningar

  • Webbläsarbygget är Sparticuz Chromium 153.0.8010.0 (samma versionssträng
    som baslinjen), inte Playwrights eget nedladdade bygge — Playwrights CDN är
    blockerat i den här miljön. Pariteten kördes därför utan
    --require-same-browser; versionssträngen är identisk, men bygget är inte
    nödvändigtvis bit-identiskt med det som fångade baslinjen i september. Det
    syns i textmetrikvarningarna ovan och är samma klass som de sedan tidigare
    kända varningarna — de räknas inte som strukturella regressioner.
  • CI kördes på riktigt efter den första publiceringen av PR:en och är grön:
    Statiska kontroller + regressionstest: pass (17 s) och
    Webbläsarkontroll (Playwright): pass (8 m 20 s) — hela sviten på GitHub
    Actions med runnerns eget Chromium, alltså ett oberoende bygge vid sidan av
    de lokala körningarna ovan. Arbetsflödet är oförändrat; GitHub
    App-sessionen saknar behörighet att ändra .github/workflows/, och någon
    sådan ändring behövs inte.
  • Den översta statusraden i docs/demo-kalla.md (och räknarna i §7) är
    historiska och lämnades orörda med flit — den här PR:en rör bara
    Grupp C-avsnittet. Aktuellt antal är 31 av 133.

Minsta logiska nästa steg

Ett beslut om .prov-familjen (ägare: ett delat fragment prov, som swatch i
Grupp B). Då blir media-color-gamut, media-scripting och media-hover-pointer
migrerbara med samma metod som textspoiler, och radioflikar låses upp.
round-mod, prefers-reduced-motion och hover-hover kräver därefter ett
separat beslut, eftersom de har två genuint olika implementationer.

FullThrottle83 and others added 2 commits September 26, 2026 16:11
Grupp C-piloten: de sju demos vars kodvalv skiljer sig från live-markupen är
utredda. Exakt en av dem migreras — textspoiler — eftersom den var den enda
där live-markupen och valvet var samma markup; bara demots varningskommentar
fanns i valvet.

Källformatet räcker: parseSource strippar bara FÖRSTA ledande kommentaren, så
dokumentationshuvudet försvinner medan varningen (filens andra kommentar) följer
med till både kortet och kopian. Ingen utbyggnad av generatorn.

De övriga sex är kvar med mätta skäl: fyra har en påhittad .nd-*-variant vars
CSS inte finns i live-markupen (noll träffar), och prefers-reduced-motion,
hover-hover och round-mod har två genuint olika implementationer. De tre
.prov-korten är pedagogiskt bättre live men blockerade av att .prov-familjen
(6 regler + 7 aktiveringsregler) används av fem kort utan ägare — samma beslut
som redan är noterat för radioflikar.

Bevis: skärmbilderna av #textspoiler .demo-yta är byte-identiska före/efter
(vila och avslöjat läge); pariteten är 534 värden, 0 strukturella avvikelser,
0 px; geometriavvikelselistan för hela dokumentet är identisk före/efter.
Baslinjeposten fångades med --capture --merge före migreringen; 30 historiska
poster och hela mergeLog är orörda (617 tillagda rader, 0 borttagna).

Regressionstäckning: scenario 'avslojad' + 21 påståenden i tests/demo-source.mjs
(sidan och fristående kopia), inklusive hover, :focus-visible via riktigt
tangentbordsfokus, kopians regeluppsättning och att varningen följer med.

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
Sju basregler och elva @media-block (tre regler var) — inte sex plus sju.
Konsumentlistan och slutsatsen är oförändrade.

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
@arena-ai-coding-agent
arena-ai-coding-agent Bot merged commit e606522 into main Sep 26, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant