Skip to content

auto triage: reality check #680

@nikhilsna

Description

@nikhilsna

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 refresh

Sidebar 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions