โ๏ธ 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.
Public Pages