|
| 1 | +# VSP v2.19.0 Release Notes |
| 2 | + |
| 3 | +**Date:** 2026-01-05 |
| 4 | +**Report ID:** 001 |
| 5 | +**Subject:** v2.19.0 "Async & Developer Productivity" Release |
| 6 | +**Codename:** Quick Wins Sprint |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## Executive Summary |
| 11 | + |
| 12 | +VSP v2.19.0 delivers **8 new tools** focused on developer productivity and async execution patterns. This release completes the "Quick Wins" sprint from the roadmap, adding essential utilities for comparing code, cloning objects, and running reports without timeout concerns. |
| 13 | + |
| 14 | +**Highlight:** The new `RunReportAsync` + `GetAsyncResult` pattern enables execution of long-running reports without WebSocket timeouts - a breakthrough for enterprise ABAP automation. |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## New Tools (8) |
| 19 | + |
| 20 | +### Async Execution Pattern (2 tools) |
| 21 | + |
| 22 | +| Tool | Description | |
| 23 | +|------|-------------| |
| 24 | +| **RunReportAsync** | Start report execution in background goroutine. Returns task_id immediately. Each task gets its own WebSocket connection to avoid blocking. | |
| 25 | +| **GetAsyncResult** | Poll for task status or block up to 60s waiting for completion. Returns full result when done. | |
| 26 | + |
| 27 | +**Usage Pattern:** |
| 28 | +``` |
| 29 | +1. RunReportAsync(report="RFITEMGL", params=...) |
| 30 | + → {"task_id": "report_1736034567_1", "status": "started"} |
| 31 | +
|
| 32 | +2. GetAsyncResult(task_id="...", wait=true) |
| 33 | + → Blocks until complete, returns full report result |
| 34 | +``` |
| 35 | + |
| 36 | +### Developer Productivity (4 tools) |
| 37 | + |
| 38 | +| Tool | Description | |
| 39 | +|------|-------------| |
| 40 | +| **CompareSource** | Unified diff between any two ABAP objects. Uses LCS algorithm with context lines. Supports all GetSource object types. | |
| 41 | +| **CloneObject** | Copy PROG/CLAS/INTF to new name. Auto-replaces object name in source code. | |
| 42 | +| **GetClassInfo** | Quick class metadata without full source: methods, attributes, interfaces, superclass, abstract/final status. Uses CAI API. | |
| 43 | +| **CreateTable** | Create DDIC transparent tables from simple JSON definition. Auto-generates DDL source and activates. | |
| 44 | + |
| 45 | +### Fixes (2 tools) |
| 46 | + |
| 47 | +| Tool | Fix | |
| 48 | +|------|-----| |
| 49 | +| **GetSystemInfo** | Rewrote to use SQL queries (CVERS, T000) instead of discovery endpoint. Works reliably across all SAP versions. | |
| 50 | +| **GetMessages** | Fixed XML parsing. Now correctly returns all messages from a message class. | |
| 51 | + |
| 52 | +--- |
| 53 | + |
| 54 | +## Technical Highlights |
| 55 | + |
| 56 | +### Async Architecture |
| 57 | + |
| 58 | +The async pattern solves the WebSocket timeout problem for long-running operations: |
| 59 | + |
| 60 | +``` |
| 61 | +┌─────────────────────────────────────────────────┐ |
| 62 | +│ RunReportAsync │ |
| 63 | +│ 1. Generate unique task_id │ |
| 64 | +│ 2. Store task in asyncTasks map │ |
| 65 | +│ 3. Spawn goroutine with new WebSocket conn │ |
| 66 | +│ 4. Return task_id immediately │ |
| 67 | +└─────────────────────────────────────────────────┘ |
| 68 | + │ |
| 69 | + ▼ (background) |
| 70 | +┌─────────────────────────────────────────────────┐ |
| 71 | +│ Goroutine │ |
| 72 | +│ 1. Connect WebSocket to ZADT_VSP │ |
| 73 | +│ 2. Execute report (no timeout pressure) │ |
| 74 | +│ 3. Store result in asyncTasks map │ |
| 75 | +│ 4. Close WebSocket │ |
| 76 | +└─────────────────────────────────────────────────┘ |
| 77 | + │ |
| 78 | + ▼ |
| 79 | +┌─────────────────────────────────────────────────┐ |
| 80 | +│ GetAsyncResult(wait=true) │ |
| 81 | +│ 1. Poll asyncTasks every 500ms │ |
| 82 | +│ 2. Return when status != "running" │ |
| 83 | +│ 3. Max wait: 60 seconds │ |
| 84 | +└─────────────────────────────────────────────────┘ |
| 85 | +``` |
| 86 | + |
| 87 | +### CreateTable JSON API |
| 88 | + |
| 89 | +```json |
| 90 | +{ |
| 91 | + "name": "ZLLM_SESSIONS", |
| 92 | + "description": "LLM Session Storage", |
| 93 | + "package": "$TMP", |
| 94 | + "fields": [ |
| 95 | + {"name": "SESSION_ID", "type": "CHAR32", "key": true}, |
| 96 | + {"name": "QUESTION", "type": "STRING"}, |
| 97 | + {"name": "STATUS", "type": "CHAR", "length": 20}, |
| 98 | + {"name": "CREATED_AT", "type": "TIMESTAMPL"} |
| 99 | + ] |
| 100 | +} |
| 101 | +``` |
| 102 | + |
| 103 | +Supported types: CHAR, NUMC, INT4, DEC, STRING, TIMESTAMPL, UUID, DATS, TIMS, or any data element name. |
| 104 | + |
| 105 | +--- |
| 106 | + |
| 107 | +## Metrics |
| 108 | + |
| 109 | +| Metric | Before | After | Change | |
| 110 | +|--------|--------|-------|--------| |
| 111 | +| **Focused Tools** | 48 | 54 | +6 | |
| 112 | +| **Expert Tools** | 93 | 99 | +6 | |
| 113 | +| **Unit Tests** | 244 | 244 | - | |
| 114 | +| **Quick Wins Done** | 2/8 | 7/9 | +5 | |
| 115 | + |
| 116 | +--- |
| 117 | + |
| 118 | +## Roadmap Progress |
| 119 | + |
| 120 | +### Quick Wins Completed |
| 121 | +- [x] `vsp debug` CLI (v2.18) |
| 122 | +- [x] GetMessages tool |
| 123 | +- [x] CompareSource tool |
| 124 | +- [x] CloneObject tool |
| 125 | +- [x] CreateTable tool |
| 126 | +- [x] GetClassInfo tool |
| 127 | +- [x] RunReportAsync pattern |
| 128 | + |
| 129 | +### Remaining Quick Wins |
| 130 | +- [ ] Heading texts in SetTextElements |
| 131 | +- [ ] Tool aliases (`gs` → GetSource) |
| 132 | + |
| 133 | +### Future Vision Reference |
| 134 | + |
| 135 | +This async pattern is foundational for the **AI-Native ABAP Development** vision: |
| 136 | + |
| 137 | +1. **Autonomous Agents**: AI can now start long-running operations and check results later |
| 138 | +2. **Parallel Execution**: Multiple reports can run concurrently via separate goroutines |
| 139 | +3. **Timeout-Free Operations**: Complex analysis (ATC, profiling, mass activation) can use same pattern |
| 140 | + |
| 141 | +See `reports/2025-12-05-022-future-vision.md` for the full strategic roadmap. |
| 142 | + |
| 143 | +--- |
| 144 | + |
| 145 | +## Installation |
| 146 | + |
| 147 | +```bash |
| 148 | +# Download for your platform |
| 149 | +curl -LO https://github.com/oisee/vibing-steampunk/releases/download/v2.19.0/vsp-linux-amd64 |
| 150 | +chmod +x vsp-linux-amd64 |
| 151 | +mv vsp-linux-amd64 /usr/local/bin/vsp |
| 152 | +``` |
| 153 | + |
| 154 | +## Upgrade Notes |
| 155 | + |
| 156 | +- No breaking changes |
| 157 | +- New tools available immediately in focused mode |
| 158 | +- Async tasks stored in-memory (cleared on restart) |
| 159 | + |
| 160 | +--- |
| 161 | + |
| 162 | +## Contributors |
| 163 | + |
| 164 | +- Claude Opus 4.5 (AI pair programmer) |
| 165 | +- @oisee (project lead) |
| 166 | + |
| 167 | +--- |
| 168 | + |
| 169 | +*"The best time to plant a tree was 20 years ago. The second best time is now."* |
| 170 | +*— Chinese Proverb* |
| 171 | + |
| 172 | +**The best time to make ABAP async was never possible. Until now.** |
0 commit comments