feat(ms-ai-architect): renderer batch C (econ + docs 8) + structural test asserts [skip-docs]
Sesjon 5 av v1.10.0-løpet (8 av 17 renderers wrapped med renderPageShell). Nå alle 17 renderers bruker felles grunnskjelett (page__eyebrow + h1 + verdict). Renderers wrapped: - C.1 renderCost: eyebrow=KOSTNAD, key-stats utvidet med DOMINERENDE-komponent - C.2 renderLicense: eyebrow=LISENS, scenario-card-grid per kandidat-lisens, TOPP-LISENS key-stat - C.3 renderMigrate: eyebrow=MIGRASJON, E2 mat-ladder erstatter aiact-timeline, E4 cycle-ribbon ved aktiv fase - C.4 renderAdr: eyebrow=ADR, D4 critique-card per beslutningsseksjon, ADR-status → verdict-pille (accepted/proposed/rejected/deprecated) - C.5 renderSummary: eyebrow=SAMMENDRAG, E8 read-more for lange rationale - C.6 renderPoc: eyebrow=POC, E2 mat-ladder + B5 traffic-light per success-kriterie, pocVerdict styrer verdict-pille - C.7 renderUtredning: eyebrow=UTREDNING, A4 screen-tabs (Bakgrunn/Funn/Konklusjon/ Anbefaling) + E8 read-more på lange seksjoner - C.8 renderCompare: eyebrow=SAMMENLIGN, D1 scenario-cards-grid per kandidat, parseComparison.winner styrer vinner-pille + VINNER key-stat Parser-utvidelser (R15 forward-compat — eksisterende fixtures uendret): - parsePhasedPlan: phases[].status (planned/active/done), currentPhaseIndex, pocVerdict (kun ved POC-Verdict-linje) - parseComparison: optional winner-felt fra "## Vinner: <id>"-linje Topic 2 strategi A i handlePasteImport: sentralisert _consumer-tildeling (result.data._consumer ||= cmd.id), respekterer parser-spesifikk verdi (parseMatrixRisk → 'ros'). Fixture-updates: migrate/poc med Status: per fase + POC-Verdict, compare med "## Vinner:"-linje. Test-asserts (tests/test-playground-v3.sh +18 PASS, totalt 201/201): - 25e SC8 per-renderer for batch C (8 renderers) - 25f Step 12 must_contain (mat-ladder, screen-tabs, _consumer) - 25g Felles grunnskjelett: alle 17 renderers bruker renderPageShell - 25h Tier 3-bruk: kanban i conformity/review, mat-ladder i migrate/poc - 25i Onboarding field-distribution (4 strukturerte, 14 fritekst) Verifisert: 201/201 statiske, 70/70 parser-fixtures, 7/7 migrations PASS. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
b97251bda3
commit
fc48d01f1e
5 changed files with 521 additions and 58 deletions
|
|
@ -456,6 +456,103 @@ else
|
|||
fail "suppressed markup mangler (Step 11 must_contain krever >=1)"
|
||||
fi
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 25e. SC8 — per-renderer verdict-pill emission for Sub-batch C (R7)
|
||||
# Hver av de 8 Sub-batch C-rendererene må enten emitte data-verdict direkte
|
||||
# i sin body, eller invokere renderPageShell (som emitter via helper).
|
||||
# -------------------------------------------------------
|
||||
SC8_RENDERERS_C="renderCost renderLicense renderMigrate renderAdr renderSummary renderPoc renderUtredning renderCompare"
|
||||
for fn in $SC8_RENDERERS_C; do
|
||||
body=$(awk "/function $fn\(/,/^ \}$/" "$HTML_FILE")
|
||||
if echo "$body" | grep -qE "verdict[^A-Za-z]*data-verdict\s*=\s*[\"'](go|go-with-conditions|block|approved|failed|allow|warning|n-a)[\"']" \
|
||||
|| echo "$body" | grep -q "renderPageShell"; then
|
||||
pass "SC8 verdict-pill: $fn (direkte eller via renderPageShell)"
|
||||
else
|
||||
fail "SC8 verdict-pill: $fn mangler både data-verdict og renderPageShell"
|
||||
fi
|
||||
done
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 25f. Step 12 must_contain — mat-ladder + screen-tabs + _consumer
|
||||
# -------------------------------------------------------
|
||||
matladder_count=$( { grep -cE "mat-ladder" "$HTML_FILE" || true; } | tr -d ' ')
|
||||
if [ "${matladder_count:-0}" -ge 1 ]; then
|
||||
pass "mat-ladder markup til stede ($matladder_count treff, Step 12 must_contain)"
|
||||
else
|
||||
fail "mat-ladder markup mangler (Step 12 must_contain krever >=1)"
|
||||
fi
|
||||
|
||||
screentabs_count=$( { grep -cE "screen-tabs" "$HTML_FILE" || true; } | tr -d ' ')
|
||||
if [ "${screentabs_count:-0}" -ge 1 ]; then
|
||||
pass "screen-tabs markup til stede ($screentabs_count treff, Step 12 must_contain)"
|
||||
else
|
||||
fail "screen-tabs markup mangler (Step 12 must_contain krever >=1)"
|
||||
fi
|
||||
|
||||
consumer_count=$( { grep -cE "_consumer" "$HTML_FILE" || true; } | tr -d ' ')
|
||||
if [ "${consumer_count:-0}" -ge 1 ]; then
|
||||
pass "_consumer-mekanisme til stede ($consumer_count treff, Step 12 must_contain)"
|
||||
else
|
||||
fail "_consumer-mekanisme mangler (Step 12 must_contain krever >=1)"
|
||||
fi
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 25g. Felles grunnskjelett — alle 17 renderers emiter page__eyebrow + h1 + verdict
|
||||
# Step 12 strukturell assert per R7 + plan-spec.
|
||||
# -------------------------------------------------------
|
||||
ALL_RENDERERS="renderAiActPyramid renderRequirements renderTransparency renderFria renderConformity renderDpia renderSecurity renderRos renderReview renderCost renderLicense renderMigrate renderAdr renderSummary renderPoc renderUtredning renderCompare"
|
||||
shell_count=0
|
||||
for fn in $ALL_RENDERERS; do
|
||||
body=$(awk "/function $fn\(/,/^ \}$/" "$HTML_FILE")
|
||||
if echo "$body" | grep -q "renderPageShell"; then
|
||||
shell_count=$((shell_count + 1))
|
||||
fi
|
||||
done
|
||||
if [ "$shell_count" -eq 17 ]; then
|
||||
pass "Alle 17 renderers bruker renderPageShell (felles grunnskjelett: page__eyebrow + h1 + verdict via helper)"
|
||||
else
|
||||
fail "Kun $shell_count/17 renderers bruker renderPageShell — felles grunnskjelett ufullstendig"
|
||||
fi
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 25h. Tier 3-bruk per Step 12 — kanban (conformity/review), mat-ladder (migrate/poc)
|
||||
# -------------------------------------------------------
|
||||
for fn in renderConformity renderReview; do
|
||||
body=$(awk "/function $fn\(/,/^ \}$/" "$HTML_FILE")
|
||||
if echo "$body" | grep -qE "kanban-board|kanban-col"; then
|
||||
pass "Tier 3 kanban: $fn bruker kanban-markup"
|
||||
else
|
||||
fail "Tier 3 kanban: $fn mangler kanban-markup"
|
||||
fi
|
||||
done
|
||||
for fn in renderMigrate renderPoc; do
|
||||
body=$(awk "/function $fn\(/,/^ \}$/" "$HTML_FILE")
|
||||
if echo "$body" | grep -q "mat-ladder"; then
|
||||
pass "Tier 3 mat-ladder: $fn bruker mat-ladder"
|
||||
else
|
||||
fail "Tier 3 mat-ladder: $fn mangler mat-ladder"
|
||||
fi
|
||||
done
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 25i. Onboarding-config field-type-distribution (4 strukturerte / 14 fritekst)
|
||||
# Step 12 strukturell assert per R4 / R7. Counts ONBOARDING_SCHEMA-felter
|
||||
# med type=select/multiSelect (strukturerte) vs text/textarea (fritekst).
|
||||
# -------------------------------------------------------
|
||||
onb_block=$(awk '/const ONBOARDING_SCHEMA = \[/,/^ \];/' "$HTML_FILE")
|
||||
struct_count=$(printf '%s\n' "$onb_block" | grep -cE "type:\s*'(select|multiSelect)'" | tr -d ' ')
|
||||
free_count=$(printf '%s\n' "$onb_block" | grep -cE "type:\s*'(text|textarea)'" | tr -d ' ')
|
||||
if [ "${struct_count:-0}" -ge 4 ] && [ "${struct_count:-0}" -le 5 ]; then
|
||||
pass "Onboarding strukturerte felter: $struct_count (forventet 4)"
|
||||
else
|
||||
fail "Onboarding strukturerte felter: $struct_count (forventet 4)"
|
||||
fi
|
||||
if [ "${free_count:-0}" -ge 13 ] && [ "${free_count:-0}" -le 16 ]; then
|
||||
pass "Onboarding fritekst-felter: $free_count (forventet ~14)"
|
||||
else
|
||||
fail "Onboarding fritekst-felter: $free_count (forventet ~14)"
|
||||
fi
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 25. Inline-script eneste JS — ingen <script src=> til lokale .js-filer
|
||||
# -------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue