RepoMedic
Diagnose GitHub issues and inspect AI-generated repairs with evidence.
Root Cause: Null token bypass in session verification hook.
✓ 1 regression test generated- return null;
+ throw new SessionExpiredError();
Context & The Problem
A GitHub issue can describe a failure without proving its cause or showing that a proposed patch actually fixes it.
Submit a GitHub issue URL, run AI-assisted analysis and repair, and review the resulting diagnosis, patch, and verification evidence in the browser.
My Contribution & Ownership
Built the web frontend and Node.js backend integration for repair runs, and worked on the AI repair workflow and its verification results.
Architecture & System Flow
A web application backed by a Node.js API that coordinates with a separate AI repair service.
Provides issue submission, repair-run status, and detailed reports with diffs and test information.
Handles application-facing repair requests and communication with the AI service.
Investigates issues, attempts regression verification, and reports proposed changes and test outcomes.
Verification before declaring a repair successful
In RepoMedic, an AI-generated patch is never marked as verified based on heuristic code analysis alone. The repair orchestrator executes a two-stage verification gate inside a sandboxed Docker runner: first confirming that the reproduced regression test passes, then executing the entire existing repository test suite. Only if both succeed without timeouts is the repair status elevated to VERIFIED.
123456789101112131415161718192021222324252627282930313233343536# Existing test suite
timeline.append(f"Running existing suite after patch {attempt}")
suite_after = await self.runner.run(
patched_workspace,
"tests",
image=image,
environment=environment,
)
last_regression = regression_after
last_suite = suite_after
last_patch = patch
last_explanation = proposal.explanation
regression_passed = (
regression_after.exit_code == 0 and not regression_after.timed_out
)
suite_passed = suite_after.exit_code == 0 and not suite_after.timed_out
if regression_passed and suite_passed:
timeline.append("Regression and test suite passed")
return RepairResult(
status=RepairStatus.VERIFIED,
issue_url=issue_url,
repository=repository,
commit_sha=issue.commit_sha,
root_cause=hypothesis.root_cause,
explanation=proposal.explanation,
changed_file=target,
patch=patch,
baseline=baseline,
regression_after=regression_after,
suite_after=suite_after,
)Engineering Decisions & Trade-offs
Show verification, not only generated code
A plausible patch is not proof that the reported issue was reproduced or resolved.
Surface baseline verification, test results, and repair reports so users can judge the evidence.
Separate application and AI services
Repair orchestration and AI execution have different responsibilities.
Use a Node.js application backend and a separate FastAPI-based AI service.
Limitations & What I'd Improve
- Repair verification may be unverified if the baseline does not reproduce the reported bug.
- AI-generated patches require developer review before use.
DevTrail
A developer-focused platform for turning work into visible progress.