-
Notifications
You must be signed in to change notification settings - Fork 287
Description
AutoTriage: AI-Powered Issue Generation from Code Context
Problem Statement
Students write code but fail to document their work in GitHub issues. When issues are created, they're vague and disconnected from actual implementation. Issues say "build login feature" but don't mention LoginForm.jsx, auth.js, and validators.js were modified. Instructors can't verify if stated work matches real code changes.
AutoTriage monitors actual code activity in VSCode and generates professional GitHub issues that accurately reflect implementation work.
System Architecture
VSCode Extension
↓ monitors file edits
↓ detects: LoginForm.jsx, auth.js, validators.js edited
↓ suggests: "Track this work?"
↓
Student clicks "Yes"
↓
Claude API generates issue from code context
↓
Sidebar Preview Panel
↓ student reviews generated issue
↓ optional: natural language edits
↓
Student clicks "Post to GitHub"
↓
Extension posts via GitHub API
↓
Spring Boot Backend
↓ stores activity summary
↓
Slack Bot + OCS Widget
↓ instructor sees: "Nikhil worked on auth, posted issue #42"
Core Features
Real-Time File Monitoring
Extension watches workspace. When student edits three or more files within five minutes, notification slides up from bottom right:
┌─────────────────────────────────────┐
│ AutoTriage │
├─────────────────────────────────────┤
│ You're editing: │
│ • LoginForm.jsx │
│ • auth.js │
│ • validators.js │
│ │
│ Branch: feature/user-auth │
│ │
│ Track this work as an issue? │
│ │
│ [Yes, Track It] [Not Right Now] │
└─────────────────────────────────────┘
Student maintains control. No automatic tracking. Only suggests at natural breakpoints.
AI-Powered Issue Generation
Student clicks "Yes, Track It". Extension sends to Claude API:
- Edited files: LoginForm.jsx, auth.js, validators.js
- Branch name: feature/user-auth
- Time spent per file
- Lines changed (rough estimate)
Claude returns structured issue in five seconds:
Title: Implement User Authentication
## Implementation
Files modified:
- LoginForm.jsx - React component for login UI
- auth.js - JWT token validation
- validators.js - Input validation
Branch: feature/user-auth
## Acceptance Criteria
- [ ] User can log in with email/password
- [ ] JWT tokens generated on success
- [ ] Invalid credentials show error
- [ ] Session persists on refreshSidebar Preview Panel
Issue appears in VSCode sidebar for review:
┌─────────────────────────────────────┐
│ AUTOTRIAGE PREVIEW │
├─────────────────────────────────────┤
│ │
│ Title: Implement User Authentication│
│ │
│ ## Implementation │
│ Files modified: │
│ - LoginForm.jsx │
│ - auth.js │
│ - validators.js │
│ │
│ ## Acceptance Criteria │
│ - [ ] User can log in │
│ - [ ] JWT tokens generated │
│ - [ ] Invalid credentials error │
│ - [ ] Session persists │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Edit with natural language: │ │
│ │ [text input field] │ │
│ └─────────────────────────────────┘ │
│ │
│ [Post to GitHub] [Regenerate] [Cancel]│
└─────────────────────────────────────┘
Student can edit, regenerate, or post.
Natural Language Editing
Student types in edit box: "Add criteria for password reset"
Extension sends to Claude with current issue. Claude returns updated version. Preview smoothly transitions to show new content. Takes two seconds.
Examples:
- "Make title shorter"
- "Remove technical notes"
- "Add section about testing"
- "Change user story to admin authentication"
Context Sessions History
Sidebar shows history of all tracked work:
┌─────────────────────────────────────┐
│ CONTEXT SESSIONS │
├─────────────────────────────────────┤
│ 📅 Today │
│ ┌───────────────────────────────┐ │
│ │ User Authentication │ │
│ │ 3 files • 2h ago │ │
│ │ feature/user-auth │ │
│ │ Status: Posted (#42) │ │
│ └───────────────────────────────┘ │
│ │
│ ┌───────────────────────────────┐ │
│ │ Dashboard Layout │ │
│ │ 2 files • 4h ago │ │
│ │ feature/dashboard │ │
│ │ Status: Draft │ │
│ └───────────────────────────────┘ │
│ │
│ 📅 Yesterday │
│ ┌───────────────────────────────┐ │
│ │ API Endpoints │ │
│ │ 5 files • 1d ago │ │
│ │ feature/api │ │
│ │ Status: Posted (#41) │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
Click any session to view generated issue. Can regenerate or post if draft. Toggle visibility on/off for privacy.
GitHub Auto-Post
Student reviews issue, clicks "Post to GitHub". Extension uses GitHub API with personal access token. Creates issue in configured repository. Returns issue number.
Configuration once in VSCode settings:
GitHub Token: ghp_xxxxx
Repository: Open-Coding-Society/spring
Auto-link branch: Yes
Posted issue includes all sections. Automatically labeled based on file patterns (feature/bug/enhancement). Current branch linked in technical notes.
Success notification: "Issue #42 created. Opening in browser..."
Instructor Visibility via Slack
Extension sends activity summary to Spring Boot backend after posting issue. Backend stores:
- Username (from settings)
- Files edited
- Issue number posted
- Branch worked on
- Timestamp
Mortensen types in Slack: /pulse nikhil
Bot responds in three seconds:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Nikhil's Recent Activity
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Last Active: 23 minutes ago
Generated Issues (Last 7 Days): 3
- #42 User Authentication - 2h ago
Files: LoginForm.jsx, auth.js, validators.js
Branch: feature/user-auth
- #43 Dashboard Layout - 1d ago
Files: Dashboard.jsx, styles.css
Branch: feature/dashboard
- #44 API Endpoints - 2d ago
Files: UserController.java, AuthService.java
Branch: feature/api
Current Work:
Editing: LoginForm.jsx, auth.js
Branch: feature/user-auth
Time spent: 45 minutes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
All data from actual VSCode activity. No manual reporting. Only shows work student tracked and posted.
OCS Transparency Widget
Widget appears bottom right on OCS site when extension installed:
┌──────────────────────────────┐
│ 👁 What Mortensen Sees │
├──────────────────────────────┤
│ Last Active: 23 min ago │
│ │
│ Issues Generated: 3 │
│ • #42 User Authentication │
│ • #43 Dashboard Layout │
│ • #44 API Endpoints │
│ │
│ Currently Editing: │
│ auth.js, LoginForm.jsx │
│ Branch: feature/user-auth │
│ │
│ [View Full Paper Trail] │
└──────────────────────────────┘
Updates every thirty seconds. Shows exact data Slack bot returns. Complete transparency. No hidden metrics. Student knows what instructor sees.
Click "View Full Paper Trail" opens modal with full Slack response format.
Technical Stack
VSCode Extension:
- TypeScript with VSCode Extension API
- File system watcher for monitoring
- Webview API for sidebar
- GitHub Octokit for API integration
- Claude API for issue generation
Spring Boot Backend:
- Java with Spring Boot (existing OCS backend)
- New endpoints: POST /api/activity, GET /api/activity/{username}
- PostgreSQL for storage
- Slack webhook handler at POST /slack/commands
OCS Widget:
- JavaScript injection on Jekyll site
- Fetches from Spring Boot API
- Polls every thirty seconds for updates
Team Division (240 Hours)
Person 1: VSCode Extension (80h)
- File watcher: 20h
- Sidebar UI: 25h
- Claude integration: 20h
- GitHub posting: 15h
Person 2: Spring Boot Backend (80h)
- Activity endpoints: 25h
- Slack webhook: 25h
- Database schema: 20h
- Testing: 10h
Person 3: OCS Widget (80h)
- Widget UI: 25h
- API integration: 20h
- Real-time polling: 20h
- End-to-end testing: 15h
Why This Matters
Novel: First tool that generates issues from actual code context, not manual descriptions or screenshots.
High Impact: Eliminates documentation gap. Issues always match real implementation. Instructors see actual work, not claims.
Feasible: No OAuth complexity. No database sync nightmares. Just VSCode tracking files, Claude generating text, GitHub API posting.
Demoable: Edit three files, get tracking prompt, generate issue, post to GitHub, show in Slack. Complete workflow in ninety seconds.