Files
nextcraft/apps/web/components/learner/lab-feedback-panel.tsx
T
CIAgent ed243594d2 feat(P06): real build + defense surfaces, E2E credential flow (Waves 3-5)
Wave 3 (Task 6-3-01): /build/[competencyId] rewritten as a real build surface —
variant statement + starter files in a live namespace sandbox, workspace file tree +
editor with save, Run/Test buttons executing bounded commands in-sandbox with
read-only TerminalFrame output (CUT-2), live TelemetryStatus pulse, Lab feedback over
the live trace, honest 503-busy/403-429-denied states with retry.
Wave 4 (Task 6-4-01): /defend/[competencyId] rewritten — DefenseSession: start ->
examiner question -> typed answers (mic capture w/ MediaRecorder consent + denied
fallback; browser-SR first-class per CUT-1) -> finish -> verdict + integrity signals
-> Grade My Work renders real rubric bars from the trace digest. Dead mock components
disposed (oral-defense-interface, assessor-results-panel, proctor-banner — G-5 class).
Wave 5 (Task 6-5-01): test_e2e_credential_flow — REAL uvicorn + REAL namespaces:
variant -> sandbox -> in-sandbox exec -> trace -> grade (seed stamped) -> coaching ->
defense -> verdict -> proctor; corpus-fixture scan of all payloads. E2E caught a real
bug: the sandboxes API dropped task_id (every HTTP-created sandbox was capture-less)
— fixed. README E2E + manual browser pass documented.

pnpm build 4/4; typecheck FULL TURBO; backend suite 397 green; ruff clean.

---ci---
phase: 6
milestone: v0.3
status: execute
requirements: {covered: [REQ-3-007, REQ-3-008], partial: []}
---/ci---
2026-09-12 17:54:30 +00:00

20 lines
644 B
TypeScript

'use client';
import { AgentStreamPanel } from './agent-stream-panel';
/**
* Lab feedback panel over the LIVE trace (REQ-3-007).
*
* v0.3 re-grounding: posts {learner_id, task_id} — the Lab agent consumes
* the learner's real build-session digest, not a mock scenario.
*/
export function LabFeedbackPanel({ learnerId, taskId }: { learnerId: string; taskId: string }) {
return (
<AgentStreamPanel
title="Lab — in-flow feedback"
endpoint="/v1/lab/feedback"
body={{ learner_id: learnerId, task_id: taskId }}
emptyHint="Run a command or a test, then ask Lab for feedback on your live session."
/>
);
}