Engineering debrief · 29 July 2026

The failures now explain themselves.

InterviewHub’s practice workspace has moved from ambiguous red signals and an empty “Raw output” panel to a visible diagnostic path: named failures, concrete details, Python tracebacks, and coach-ready context.

Repository: InterviewHub Branch: main Snapshot: 6e7eb06 Visibility: private preview
TL;DR

One shipped foundation. One verified local patch.

11 / 11 targeted regression tests passing
6 files in the newest raw-output patch
+72 / −15 latest patch line delta
2 Python result surfaces kept in sync

Why “Raw output” used to be empty

Reference test signal path before → after
Before and after signal path for a failed Python reference test Previously, the runner caught the failure and returned only structured test data, leaving stdout and stderr empty. Now, it also stores a traceback and exposes it in the tests panel, raw output panel, and coach context. BEFORE AssertionError raised inside reference check caught + summarized structured test result only stdout = "" · stderr = "" Raw output looked empty AFTER AssertionError or setup/runtime exception format_exc() name + detail + traceback Tests · readable detail Raw output · full transcript Coach · same diagnostics
BeforeThe process itself completed normally because the harness handled the exception. Nothing was printed, so a process-only console had nothing to show.
AfterThe harness still handles the failure safely, but it preserves the Python traceback as test data and formats that data into a visible transcript. E-01

What is shipped—and what is still local

On main

Workspace clarity and control

The earlier interview-workspace work is represented in the current main history.

  • Specific explanations for missing readiness signals
  • Neutral styling for heuristics instead of false executable failures
  • Persistent hide / restore controls for the question library
  • Read-aloud option removed from the coach
E-10
Verified local patch

Raw reference-failure transcripts

The newest change is present in the working tree and passes its focused tests, lint, whitespace checks, and production build—but it is not part of the frozen HEAD commit.

  • Traceback capture in the Python worker
  • Shared transcript formatter
  • Automatic Raw output selection on failure
  • Main workspace and timed mock parity
E-09

Four changes, one feedback loop

01

Checks say what they actually detected

Design, narrative, and general code checks now attach a concrete sentence to every missing signal. A missing empty-input example, for instance, explains what pattern was not detected and explicitly notes when the signal may not apply.

WhyA red “failure” implied that code had executed and failed. Most of these checks are preparation heuristics, not graders.
ResultExecutable tests remain pass/fail; preparation gaps use a separate neutral missing state.
E-06
02

Raw Python output includes caught test failures

The result type now carries an optional traceback. The worker records it for failed assertions, unexpected runtime exceptions, and setup failures. A shared formatter turns failed tests into a numbered console transcript.

WhyCaught exceptions do not naturally appear in stderr; without copying the traceback into the result, the raw console was technically accurate but practically unhelpful.
ResultA failure opens Raw output automatically and shows the test name, detail, and traceback before other process streams.
E-02 E-03
03

The coach receives the same useful evidence

When code is attached, the coach’s diagnostic summary prioritizes runtime errors and stderr, then the formatted reference-test transcript, then ordinary output. This gives the coach a concrete failure to reason about without presenting reference tests as comprehensive grading.

WhyA coach cannot diagnose a hidden traceback. Passing execution also must not be confused with full correctness.
ResultThe candidate and coach share one evidence path, while the UI keeps the “passing does not guarantee every edge case” limit visible.
E-03
04

Less interface friction around the attempt

The question library can be collapsed from its own header, restored from a thin visible rail, and remembered across reloads. The coach’s Read aloud control and browser speech-synthesis path have been removed.

WhyThe coding surface needs room, and an irreversible-looking collapsed sidebar defeats the purpose. The speech action added control complexity without helping the core interview loop.
ResultCandidates can reclaim space without losing the way back, and the coach surface is quieter.
E-05 E-07

The patch is clean locally.

The first production build attempt surfaced an existing configuration rule: the auth cookie secret must be at least 32 characters. Re-running with a local placeholder satisfied that build-time guard without changing repository credentials.

What this does not claim

Reference tests are not exhaustive

Passing every attached test still does not guarantee every edge case. The product copy retains that distinction.

Heuristics are not graders

A missing readiness signal means a pattern was not visible in the draft. It is preparation guidance, not definitive correctness.

Output remains bounded

Console output is capped at 100,000 characters so a runaway program cannot make the workspace unresponsive.

Commit and push the six-file diagnostic patch.

The functional work is implemented and verified. The remaining delivery step is to commit only the intended source and test files, preserve the unrelated source-manifest change, and push main.

app/InterviewHub.tsx
app/physical-intelligence/mock/PhysicalIntelligenceMock.tsx
lib/python-runner.ts
public/python-runner.worker.mjs
tests/python-runner.test.mjs
tests/coding-exercise-contracts.test.mjs

Grounded in the current repository

E-01Result contract and transcript formatterlib/python-runner.ts:15
Adds traceback?: string to each Python test result and formats only failed tests into a numbered transcript containing name, detail, and traceback.
E-02Reference runner traceback capturepublic/python-runner.worker.mjs:5
Imports Python’s traceback module and stores format_exc() for failed assertions, unexpected exceptions, and setup failures.
E-03Main workspace result behaviorapp/InterviewHub.tsx:838
Selects Raw output after a runtime or reference-test failure, displays reference failures as an error console block, and includes the transcript in coach diagnostics.
E-04Timed mock parityPhysicalIntelligenceMock.tsx:63
Uses the same formatter, output indicator, failure auto-selection, and empty-state condition in the timed mock.
E-05Question library controlsapp/InterviewHub.tsx:493
Restores visibility from local storage, persists toggles, hides from the library header, and exposes a restore rail while hidden.
E-06Explainable readiness signalsapp/InterviewHub.tsx:838
Every heuristic check carries a specific missing-detail sentence; non-executable misses use neutral missing styling rather than executable failure styling.
E-07Read-aloud removal contracttests/catalog.test.mjs:134
The repository test rejects Read aloud, speechSynthesis, and SpeechSynthesisUtterance in the InterviewHub source.
E-08Raw-failure regression coveragetests/python-runner.test.mjs:56
Verifies failed names, details, and tracebacks appear in the transcript while successful checks do not; UI contract tests cover Raw output behavior.
E-09Local verification run2026-07-29T18:27Z
11 focused tests, repository lint, whitespace validation, and the production build all completed successfully. The build used a temporary local cookie-secret placeholder solely to satisfy the existing minimum-length rule.
E-10Shipped workspace commitsf05b9a5 · ebf1241 · b45b974
The relevant main-history subjects are “Polish editor panels and coding workspaces,” “Keep sidebar restore control visible,” and “Fix result tabs and sync workspace artifacts.”