Engineered for flexibility. Powered by Jira APIs.
โ๏ธ Core Technologies
Dynamic Score is built using:
Atlassian Forge (Cloud Runtime)
React with Forge UI / Forge Custom UI
Jira REST API v3 for loading issue and project-level data
Issue Property API for saving scoring results
Project Property API for storing scoring configurations
Forge secure storage (optional for future features)
All calculations run on the client side for instant feedback.
๐งฌ Architecture Overview
A lightweight Forge app embedded directly in Jira:
Admin configuration lives in Space Settings → Apps → Dynamic Score
Issue-level scoring UI loads in the issue panel
Configurations and values are stored in Jira properties (no external DB)
Architecture is split into two main modules:
Settings Page – where admins create and edit scoring configurations
Issue Panel – where users interact with dropdowns and formulas
๐ How It Works (Step by Step)
1. App loads inside the Jira issue panel
The Forge custom UI iframe initializes using the issue context.
2. Reads the current issue key
The app retrieves the issue ID via Forge bridge (view.getContext()).
3. Loads active scoring configuration
Fetches the project property:/rest/api/3/project/{id}/properties/dynamic-scoring-config
Identifies which configuration is marked as active.
4. Renders scoring interface
Based on configuration, shows:
Dropdowns
Formula info
Thresholds
Score preview
5. User selects dropdown options
The app recalculates the score immediately based on:
Base scores
Formula preset
Weights
Rules
Thresholds
6. User clicks “Save”
App stores data in:/rest/api/3/issue/{key}/properties/dynamic-scoring-values
Saved metadata includes:
Selected dropdown values
Final score
Risk label (Low/Medium/High)
Configuration ID
7. (Optional) User adds a comment
If enabled, the app posts:/rest/api/3/issue/{key}/comment
Comment includes readable scoring summary.
๐ก APIs Used
API Endpoint | Purpose |
|---|---|
| Load and save scoring configurations |
| Read/write saved scores on issues |
| Read issue details if needed |
| Optional comment on save |
Forge bridge (context) | Get current issue and project metadata |
๐พ Data Storage
Dynamic Score does not use external servers or databases.
All data is stored inside Jira:
Project-level (Space Settings)
dynamic-scoring-config
Contains:
List of all configurations
Active config ID
Dropdown definitions
Base scores
Weights
Formula type
Rules
Thresholds
Issue-level
dynamic-scoring-values
Contains:
No data is sent outside your Jira instance.
๐ Performance
Loads configuration once per issue
All calculations run instantly in-memory
Values are stored efficiently in small JSON blobs
Saves only diffs, not full configuration
Minimal API calls (1 load, 1 save)
๐ก Security
Dynamic Score fully follows Forge security architecture:
Runs in an isolated sandbox
Cannot access data outside the current issue/project
Uses OAuth-scoped permissions
No external network calls
No persistent storage outside Jira
Permissions required:
read:jira-workwrite:jira-workread:jira-projectwrite:jira-projectread:jira-user(optional, for comments)
๐งช Test Coverage
Based on the real logic implemented:
Formula evaluation (unit-tested across all scoring types)
Fallback logic for invalid math (division by zero, nulls)
Rule evaluation for Basic Scoring
Threshold assignment (Low/Medium/High)
Configuration load/save operations
Issue property read/write scenarios
Comment creation flow
UI-state syncing between configurations and selected values
๐งฐ Dev Environment
Forge CLI v11+
Node.js 18+ runtime
Bundled React environment (Forge Custom UI)
ESLint for linting
Local development via forge tunnel
@forge/apifor Jira REST calls@forge/bridgefor issue context and event interactions