with one click
prairielearn-debug
prairielearn-debug contains 7 collected skills from adam-s, with repository-level occupation coverage and site-owned skill detail pages.
Skills in this repository
Find a real upstream PrairieLearn bug with no open PR, reproduce + fix it in the harness, and publish it as an issue + pull request ON THE USER'S OWN FORK (never upstream) — packaged as a human-readable proposal a maintainer could copy over. Wraps debug-issue with a discovery front-end, a dual-test proof (PL's own tests + harness evidence), and a fork-only SHARE phase. Runs inline. Use when the user says "contribute a fix", "open a PR on my fork", "propose a fix to PrairieLearn", "find an issue to fix and PR it", or "/contribute".
Drive one PrairieLearn GitHub issue or PR end-to-end through the harness — PRE-FLIGHT → GATHER → SCAN → CLASSIFY → BUILD. Spawns an isolated worktree + Docker journey, reproduces the bug with Playwright, injects the trace spine closest to the suspect code, classifies root cause from the merged timeline, then verifies a fix with before/after evidence. Runs inline. Use when the user says "debug issue N", "repro this PR", "investigate
Drive a PrairieLearn Playwright journey — persona switching (student/instructor/admin), render-gating (never screenshot a blank/500 and call it fine), numbered before/after screenshots, socket-safe waits, and cold-vs-warm diffing. Spins the journey's containers, runs scenario.ts, captures evidence. Runs inline. Use when the user says "run the journey", "run the scenario", "screenshot this flow", "drive it as instructor/student", "check for regressions across personas", or after editing a fix to re-verify.
Isolate one file/function/module and exercise it in isolation with full observability — instrument its inputs, intermediate values, and return with timestamped trace logs (Python or TS/JS), drive it with crafted cases, and assert expected results. The fastest empirical layer: between forbidden static reasoning and a full Docker/Playwright boot. Drives a tight Observe→Orient→Decide→Act loop. Runs inline. Use when the bug lives in a specific function/module, the user says "isolate", "exercise the slice", "test it in isolation", "instrument inputs/outputs", or when the full stack is overkill or won't boot.
Add precise timestamped debug logging across PrairieLearn using the concentric/adaptive model — start at the code CLOSEST to the issue (ring 0), read the merged cross-process timeline, widen the field only if the narrow ring didn't reveal it. Covers the TS⇄Python boundary, SQL, sockets, and the zygote via @pldebug/trace. Runs inline. Use when the user says "add logging", "trace this", "instrument", "where is time going", "why is this swallowed", or when debug-issue reaches CLASSIFY and the cause isn't obvious.
Run one eval-driven instruction-tuning iteration on the harness itself. A blind sub-agent solves a CLOSED PrairieLearn issue (no access to the merged fix or this conversation), a blind judge compares its answer to the accepted PR, and you diagnose where the harness/.claude failed it and apply GENERALIZED improvements. The product is the instructions, not the PL fix — the code is thrown away. Runs inline (parent-orchestrated). Use when the user says "tune", "improve the harness", "run an eval iteration", "look back how can we improve .claude", or after picking a closed-issue case.
Adversarial bug-hunting review of a PrairieLearn diff, PR, or worktree change — hunts REAL bugs (not style) in the seams where PL breaks: the TS⇄Python code-caller boundary, zygote serialization, SQL/Drizzle edge cases, assessment/grading state, socket event isolation, auth/CSRF, and migrations. Severity-grouped findings with file:line, each with a concrete trigger. Read-only, runs inline. Use when the user says "red team", "bug hunt", "adversarial review", "what could break", or before posting a fix to a PR.