Skip to content

feat: wrong-answer remediation loop — KP-level practice, session paus… #239

feat: wrong-answer remediation loop — KP-level practice, session paus…

feat: wrong-answer remediation loop — KP-level practice, session paus… #239

Triggered via push April 12, 2026 02:01
Status Failure
Total duration 1m 37s
Artifacts

ci-deploy.yml

on: push
Unit & Component Tests
1m 34s
Unit & Component Tests
E2E Tests
0s
E2E Tests
Deploy Backend
0s
Deploy Backend
Fit to window
Zoom out
Zoom in

Annotations

4 errors
Unit & Component Tests
Process completed with exit code 1.
src/__tests__/components/lesson-flow.test.tsx > LessonFlow > calls complete API and redirects on completion: apps/web/src/__tests__/components/lesson-flow.test.tsx#L187
TestingLibraryElementError: Unable to find an element with the text: Practice complete. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style <body> <div> <div class="space-y-6" > <div> <h2 class="text-2xl font-bold text-foreground" > Fire Behavior </h2> <p class="text-sm text-muted-foreground mt-1" > Knowledge Point 1 of 2 </p> </div> <div aria-valuemax="100" aria-valuemin="0" aria-valuenow="50" aria-valuetext="50%" class="flex flex-wrap gap-3 h-2" data-progressing="" data-slot="progress" role="progressbar" > <div class="relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted" data-progressing="" data-slot="progress-track" > <div class="h-full bg-primary transition-all" data-progressing="" data-slot="progress-indicator" style="inset-inline-start: 0px; height: inherit; width: 50%;" /> </div> <span role="presentation" style="clip-path: inset(50%); overflow: hidden; white-space: nowrap; border: 0px; padding: 0px; width: 1px; height: 1px; margin: -1px; position: fixed; top: 0px; left: 0px;" > x </span> </div> <div class="rounded-lg border border-border p-6 space-y-4" > <div class="flex items-center gap-2 text-sm font-medium text-primary" > <svg aria-hidden="true" class="lucide lucide-clipboard-list h-4 w-4" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" > <rect height="4" rx="1" ry="1" width="8" x="8" y="2" /> <path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" /> <path d="M12 11h4" /> <path d="M12 16h4" /> <path d="M8 11h.01" /> <path d="M8 16h.01" /> </svg> Practice </div> <details class="rounded-lg border border-border bg-muted/20 p-4" > <summary class="cursor-pointer text-sm font-medium text-muted-foreground" > Review the worked example </summary> <div class="mt-3 space-y-2" > <div class="text-foreground leading-relaxed space-y-3 [&_strong]:font-semibold [&_em]:italic [&_code]:rounded [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-sm [&_ul]:list-disc [&_ul]:pl-6 [&_ol]:list-decimal [&_ol]:pl-6 [&_li]:my-1 [&_a]:text-primary [&_a]:underline" > <p> Example: A candle flame needs all three elements. </p> </div> </div> </details> <div class="space-y-6" > <p class="text-lg font-medium text-foreground" > Which element is part of the fire triangle? </p> <div class="space-y-3" role="radiogroup" > <button aria-checked="true" class="w-full rounded-lg border-2 p-4 text-left text-sm transition-colors border-primary bg-primary/5 cursor-pointer hover:border-primary/50" role="radio"
src/__tests__/components/lesson-flow.test.tsx > LessonFlow > shows Complete Lesson button on last KP after practice is done: apps/web/src/__tests__/components/lesson-flow.test.tsx#L159
TestingLibraryElementError: Unable to find an element with the text: Practice complete. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style <body> <div> <div class="space-y-6" > <div> <h2 class="text-2xl font-bold text-foreground" > Fire Behavior </h2> <p class="text-sm text-muted-foreground mt-1" > Knowledge Point 1 of 2 </p> </div> <div aria-valuemax="100" aria-valuemin="0" aria-valuenow="50" aria-valuetext="50%" class="flex flex-wrap gap-3 h-2" data-progressing="" data-slot="progress" role="progressbar" > <div class="relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted" data-progressing="" data-slot="progress-track" > <div class="h-full bg-primary transition-all" data-progressing="" data-slot="progress-indicator" style="inset-inline-start: 0px; height: inherit; width: 50%;" /> </div> <span role="presentation" style="clip-path: inset(50%); overflow: hidden; white-space: nowrap; border: 0px; padding: 0px; width: 1px; height: 1px; margin: -1px; position: fixed; top: 0px; left: 0px;" > x </span> </div> <div class="rounded-lg border border-border p-6 space-y-4" > <div class="flex items-center gap-2 text-sm font-medium text-primary" > <svg aria-hidden="true" class="lucide lucide-clipboard-list h-4 w-4" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" > <rect height="4" rx="1" ry="1" width="8" x="8" y="2" /> <path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" /> <path d="M12 11h4" /> <path d="M12 16h4" /> <path d="M8 11h.01" /> <path d="M8 16h.01" /> </svg> Practice </div> <details class="rounded-lg border border-border bg-muted/20 p-4" > <summary class="cursor-pointer text-sm font-medium text-muted-foreground" > Review the worked example </summary> <div class="mt-3 space-y-2" > <div class="text-foreground leading-relaxed space-y-3 [&_strong]:font-semibold [&_em]:italic [&_code]:rounded [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-sm [&_ul]:list-disc [&_ul]:pl-6 [&_ol]:list-decimal [&_ol]:pl-6 [&_li]:my-1 [&_a]:text-primary [&_a]:underline" > <p> Example: A candle flame needs all three elements. </p> </div> </div> </details> <div class="space-y-6" > <p class="text-lg font-medium text-foreground" > Which element is part of the fire triangle? </p> <div class="space-y-3" role="radiogroup" > <button aria-checked="true" class="w-full rounded-lg border-2 p-4 text-left text-sm transition-colors border-primary bg-primary/5 cursor-pointer hover:border-primary/50" role="radio"
src/__tests__/components/lesson-flow.test.tsx > LessonFlow > advances to next KP after completing practice: apps/web/src/__tests__/components/lesson-flow.test.tsx#L140
TestingLibraryElementError: Unable to find an element with the text: Practice complete. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible. Ignored nodes: comments, script, style <body> <div> <div class="space-y-6" > <div> <h2 class="text-2xl font-bold text-foreground" > Fire Behavior </h2> <p class="text-sm text-muted-foreground mt-1" > Knowledge Point 1 of 2 </p> </div> <div aria-valuemax="100" aria-valuemin="0" aria-valuenow="50" aria-valuetext="50%" class="flex flex-wrap gap-3 h-2" data-progressing="" data-slot="progress" role="progressbar" > <div class="relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted" data-progressing="" data-slot="progress-track" > <div class="h-full bg-primary transition-all" data-progressing="" data-slot="progress-indicator" style="inset-inline-start: 0px; height: inherit; width: 50%;" /> </div> <span role="presentation" style="clip-path: inset(50%); overflow: hidden; white-space: nowrap; border: 0px; padding: 0px; width: 1px; height: 1px; margin: -1px; position: fixed; top: 0px; left: 0px;" > x </span> </div> <div class="rounded-lg border border-border p-6 space-y-4" > <div class="flex items-center gap-2 text-sm font-medium text-primary" > <svg aria-hidden="true" class="lucide lucide-clipboard-list h-4 w-4" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" > <rect height="4" rx="1" ry="1" width="8" x="8" y="2" /> <path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2" /> <path d="M12 11h4" /> <path d="M12 16h4" /> <path d="M8 11h.01" /> <path d="M8 16h.01" /> </svg> Practice </div> <details class="rounded-lg border border-border bg-muted/20 p-4" > <summary class="cursor-pointer text-sm font-medium text-muted-foreground" > Review the worked example </summary> <div class="mt-3 space-y-2" > <div class="text-foreground leading-relaxed space-y-3 [&_strong]:font-semibold [&_em]:italic [&_code]:rounded [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-sm [&_ul]:list-disc [&_ul]:pl-6 [&_ol]:list-decimal [&_ol]:pl-6 [&_li]:my-1 [&_a]:text-primary [&_a]:underline" > <p> Example: A candle flame needs all three elements. </p> </div> </div> </details> <div class="space-y-6" > <p class="text-lg font-medium text-foreground" > Which element is part of the fire triangle? </p> <div class="space-y-3" role="radiogroup" > <button aria-checked="true" class="w-full rounded-lg border-2 p-4 text-left text-sm transition-colors border-primary bg-primary/5 cursor-pointer hover:border-primary/50" role="radio"