π§βοΏ½οΏ½ Technical Specifications β Issue Delivery Report
βοΈ Core Technologies
Issue Delivery Report is built with:
Atlassian Forge (Cloud Runtime)
React using
@forge/react(UI Kit 2)Jira REST API v3 for issue data and changelogs
Forge
view.getContext()to access issue context and license stateBlob-based export via browser APIs (for CSV, JSON, Markdown, TXT)
PieChart + DynamicTable from Forge UI Kit
𧬠Architecture Overview
A lightweight client-side app rendered directly inside the Jira issue view, which:
Reads issue changelog and fields in real-time
Categorizes status durations by keywords
Calculates Flow Efficiency and Sprint Addition flags
Shows visual feedback and enables 1-click exports
π How It Works (Step by Step)
App loads in the Jira issue view panel
β³ Via@forge/reactusingForgeReconciler.render()Reads the current issue key
β³ Obtained throughview.getContext()Fetches issue details and full changelog
β³ Calls/rest/api/3/issue/{key}?expand=changelogParses status transitions
β³ Iterates over the changelog to detect status changes and sprint additionsBuilds a timeline
β³ Calculates start/end times for each status and classifies them using keyword matchingComputes key metrics
β³ Total Time, Active / Waiting / Blocked Time, Flow Efficiency, Sprint AdditionRenders metrics, insights, and chart
β³ Displays in DynamicTable, PieChart, and Lozenge componentsOffers export options
β³ Allows download of report in 4 formats (CSV, JSON, Markdown, TXT)
π‘ APIs Used
API Endpoint | Purpose |
|---|---|
| Fetch issue details and full status transition history |
| Access issue key, sprint metadata, and license state |
| Perform REST API calls from Forge frontend |
π« No data is written to Jira β the app is read-only, except during export.
πΎ Data Storage
Issue Delivery Report does not use issue.properties to persist state.
All computations are ephemeral and run in-memory for the current session.
Nothing is stored in Jira unless the user manually exports data to file.
π Performance
Loads changelog once per session
Timeline calculations use native
DatearithmeticDynamicTable + PieChart are rendered conditionally to avoid overhead
Export logic is lazy-loaded upon button click
Lightweight and fast, even with 50+ status transitions
π‘ Security
Fully sandboxed inside the Atlassian Forge runtime
App runs in the issue view only β never across issues or projects
Uses OAuth2-scoped
requestJira()with user contextNo persistent storage or external API usage
Complies with Atlassian Marketplace data handling standards
π§ͺ Test Coverage
The core logic has been verified via:
β Status parsing and keyword matching
β Time duration and efficiency calculations (including edge cases)
β Sprint addition logic and date comparisons
β Export content (header correctness, file structure, encoding)
UI rendering is stable in both light and dark themes via Forge dev preview.