Skip to content

Latest commit

 

History

History
220 lines (180 loc) · 13.9 KB

File metadata and controls

220 lines (180 loc) · 13.9 KB

Vision: The Future of AI-Native ABAP Development

"Debugging should feel like playing a TAS - scriptable, replayable, reversible, intelligent."

The Dream

Imagine an AI assistant that doesn't just write ABAP code - it understands, debugs, tests, and fixes it autonomously. Not through copy-paste chatbot interactions, but through deep integration with the SAP runtime itself.


Where We Are Today (v2.13)

┌─────────────────────────────────────────────────────────────────┐
│                    CURRENT CAPABILITIES                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ✅ Read/Write Code     ✅ Syntax Check      ✅ Activate         │
│  ✅ Unit Tests          ✅ ATC Checks        ✅ Breakpoints      │
│  ✅ Debug Listener      ✅ Step/Inspect      ✅ Call Graphs      │
│  ✅ Short Dumps         ✅ SQL Traces        ✅ ABAP Profiler    │
│  ✅ CDS Dependencies    ✅ Transport Mgmt    ✅ RAP OData E2E    │
│                                                                  │
│  The Agent can: Investigate → Analyze → Fix → Test → Deploy     │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Where We're Going

Phase 1: TAS-Style Debugging (Q1 2026)

Tool-Assisted Superplay for ABAP - Inspired by speedrunning tools.

┌─────────────────────────────────────────────────────────────────┐
│  TAS DEBUGGING                                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  • Lua/JS Scripting    - Automate debug workflows               │
│  • Variable History    - Track all state changes over time      │
│  • Checkpoint/Restore  - Save and restore execution state       │
│  • Watchpoint Scripts  - "When X changes, do Y"                 │
│                                                                  │
│  Example:                                                        │
│  ┌────────────────────────────────────────────────────────────┐ │
│  │  while true do                                              │ │
│  │    local event = waitForBreakpoint(30)                     │ │
│  │    if not event then break end                             │ │
│  │    saveState("checkpoint_" .. event.hit_count)             │ │
│  │    if detectAnomaly(getVariables()) then                   │ │
│  │      alert("Suspicious state!")                            │ │
│  │    end                                                      │ │
│  │    stepOver()                                               │ │
│  │  end                                                        │ │
│  └────────────────────────────────────────────────────────────┘ │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Phase 2: Test Case Extraction (Q2 2026)

Record real execution → Extract reproducible tests → Replay in isolation

┌─────────────────────────────────────────────────────────────────┐
│  TEST EXTRACTION                                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  PRODUCTION EXECUTION              EXTRACTED TEST CASE           │
│  ─────────────────────────────────────────────────────────────  │
│                                                                  │
│  Method: ZCL_PRICING->CALCULATE    CLASS lcl_test DEFINITION    │
│                                      FOR TESTING.                │
│  Inputs:                                                         │
│    IV_PRODUCT = 'WIDGET-01'        METHOD test_calculate.       │
│    IV_QUANTITY = 100                 " Given (from recording)   │
│                                      lv_product = 'WIDGET-01'.  │
│  DB Read: MARA                       " Mock (from recording)    │
│    → { MATNR, MTART, ... }          mo_db->expect_select(...)  │
│                                                                  │
│  Output:                             " Then (assertion)          │
│    RV_TOTAL = 4250.00               assert_equals( 4250 ).      │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Phase 3: Isolated Playground (Q3 2026)

Fast, mocked environment for rapid patch iteration

┌─────────────────────────────────────────────────────────────────┐
│  PLAYGROUND                                                      │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Traditional:          Playground:                               │
│  ────────────          ───────────                               │
│  Setup data: 10 min    Setup: 0 (from recording)                │
│  Run test:   30 sec    Run test: 0.3 sec                        │
│  10 patches: 5 min     10 patches: 3 sec                        │
│  ─────────────────     ───────────────────                       │
│  Total: 20+ min        Total: < 1 min                           │
│                                                                  │
│  $ vsp playground test_calculate_42                              │
│  > run                                                           │
│  ✗ FAILED: Expected 4250, got 4200                              │
│  > patch line:47 "LV_TOTAL = LV_AMOUNT * LV_QUANTITY"           │
│  > run                           # <-- 0.3 seconds!             │
│  ✓ PASSED!                                                       │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Phase 4: Time-Travel Debugging (Q4 2026)

Go backwards in time to find bugs

┌─────────────────────────────────────────────────────────────────┐
│  TIME TRAVEL                                                     │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  (vsp-debug) print LV_AMOUNT                                     │
│  LV_AMOUNT = -500              # Wait, how did it go negative?  │
│                                                                  │
│  (vsp-debug) rewind 5          # Go back 5 steps                │
│  (vsp-debug) print LV_AMOUNT                                     │
│  LV_AMOUNT = 500               # Still positive here            │
│                                                                  │
│  (vsp-debug) step                                                │
│  (vsp-debug) print LV_AMOUNT                                     │
│  LV_AMOUNT = -500              # THIS is the bug!               │
│                                                                  │
│  (vsp-debug) where                                               │
│  → Line 47: LV_AMOUNT = LV_AMOUNT - LV_DISCOUNT.                │
│             # Overflow! LV_DISCOUNT was 1000!                   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Phase 5: AI Swarm Debugging (2027+)

Multiple specialized agents working together

┌─────────────────────────────────────────────────────────────────┐
│  MULTI-AGENT DEBUGGING                                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐           │
│  │ INVESTIGATOR │  │  HISTORIAN   │  │   THEORIST   │           │
│  │              │  │              │  │              │           │
│  │ Gathers      │  │ Tracks var   │  │ Proposes     │           │
│  │ evidence     │  │ changes      │  │ hypotheses   │           │
│  │ from dumps   │  │ over time    │  │ for bugs     │           │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘           │
│         │                 │                 │                    │
│         └─────────────────┼─────────────────┘                    │
│                           │                                      │
│                    ┌──────▼───────┐                             │
│                    │    FIXER     │                             │
│                    │              │                             │
│                    │ Tests each   │                             │
│                    │ hypothesis   │                             │
│                    │ with patches │                             │
│                    └──────────────┘                             │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Wild Ideas (The "Why Not?" Section)

Parallel Universe Debugging

Fork execution, try 3 different fixes simultaneously, see which one survives.

Genetic Algorithm Bug Fixing

Evolve patches through natural selection - mutate, crossover, select.

Self-Healing Production

AI monitors for dumps, auto-generates fixes, requests approval, deploys.

Debugging as a Game

Gamified bug hunting with points, leaderboards, achievements.

Temporal SQL

Query execution history: SELECT * FROM trace WHERE LV_AMOUNT < 0


The North Star

From: AI as a chatbot that suggests code To: AI as a senior developer that investigates, fixes, tests, and ships

The difference?

Chatbot Agent
Suggests code Writes, tests, and commits code
You verify It verifies itself
Copy-paste workflow End-to-end automation
Guesses at bugs Investigates with data
No memory Learns from traces

Get Involved

  • GitHub: oisee/vibing-steampunk
  • Reports: See reports/ for detailed technical designs
  • Discussions: Open an issue to propose ideas

"The best debugger is one that lets you ask 'what if?' and get an answer."