# Release Calculator

## Analyze impact of including/excluding work items

> Calculate the impact of toggling work items on packages and linked releases

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"CalculatorAnalysisRequestDto":{"type":"object","properties":{"releaseCandidateId":{"type":"string","description":"Release candidate ID"},"excludedWorkItems":{"description":"Work items to exclude","type":"array","items":{"type":"string"}},"includedWorkItems":{"description":"Work items to include","type":"array","items":{"type":"string"}},"mode":{"type":"string","description":"Calculator mode","enum":["include","exclude"],"default":"exclude"}},"required":["releaseCandidateId"]},"CalculatorAnalysisResultDto":{"type":"object","properties":{"candidateId":{"type":"string","description":"Release candidate ID"},"releaseName":{"type":"string","description":"Release name"},"original":{"description":"Original state before changes","allOf":[{"$ref":"#/components/schemas/OriginalStateDto"}]},"calculated":{"description":"Calculated state after changes","allOf":[{"$ref":"#/components/schemas/CalculatedStateDto"}]},"impact":{"description":"Impact summary","allOf":[{"$ref":"#/components/schemas/ImpactSummaryDto"}]},"warnings":{"description":"Warnings","type":"array","items":{"$ref":"#/components/schemas/CalculatorWarningDto"}},"suggestions":{"description":"Suggestions","type":"array","items":{"type":"string"}}},"required":["candidateId","releaseName","original","calculated","impact","warnings","suggestions"]},"OriginalStateDto":{"type":"object","properties":{"packages":{"description":"Original packages","type":"array","items":{"$ref":"#/components/schemas/PackageInfoDto"}},"workItems":{"description":"Original work items","type":"array","items":{"$ref":"#/components/schemas/WorkItemInfoDto"}},"totalCommits":{"type":"number","description":"Total commits"}},"required":["packages","workItems","totalCommits"]},"PackageInfoDto":{"type":"object","properties":{"package":{"type":"string","description":"Package name"},"path":{"type":"string","description":"Package directory path"},"versionNumber":{"type":"string","description":"Package version number"},"type":{"type":"string","description":"Package type"},"default":{"type":"boolean","description":"Whether this is the default package"},"dependencies":{"description":"Package dependencies","type":"array","items":{"type":"string"}},"domains":{"description":"Domains/release configs that include this package","type":"array","items":{"type":"string"}}},"required":["package","path","versionNumber"]},"WorkItemInfoDto":{"type":"object","properties":{"id":{"type":"string","description":"Work item ID"},"type":{"type":"string","description":"Work item type","enum":["jira","github","pr","other"]},"packageCount":{"type":"number","description":"Number of packages containing this work item"},"commitCount":{"type":"number","description":"Number of commits for this work item"}},"required":["id","type","packageCount","commitCount"]},"CalculatedStateDto":{"type":"object","properties":{"packages":{"description":"Remaining packages","type":"array","items":{"$ref":"#/components/schemas/PackageInfoDto"}},"workItems":{"description":"Remaining work items","type":"array","items":{"$ref":"#/components/schemas/WorkItemInfoDto"}},"excludedPackages":{"description":"Excluded packages","type":"array","items":{"$ref":"#/components/schemas/ExcludedPackageInfoDto"}},"totalCommits":{"type":"number","description":"Total commits after exclusion"}},"required":["packages","workItems","excludedPackages","totalCommits"]},"ExcludedPackageInfoDto":{"type":"object","properties":{"packageName":{"type":"string","description":"Package name"},"version":{"type":"string","description":"Package version"},"reason":{"type":"string","description":"Reason for exclusion","enum":["no-remaining-commits","user-excluded","dependency-excluded"]},"excludedWorkItems":{"description":"Work items excluded with this package","type":"array","items":{"type":"string"}},"excludedCommits":{"type":"number","description":"Number of commits excluded"}},"required":["packageName","version","reason","excludedWorkItems","excludedCommits"]},"ImpactSummaryDto":{"type":"object","properties":{"packagesRemoved":{"type":"number","description":"Number of packages removed"},"workItemsRemoved":{"type":"number","description":"Number of work items removed"},"commitsRemoved":{"type":"number","description":"Number of commits removed"},"linkedReleasesAffected":{"description":"Linked releases affected","type":"array","items":{"$ref":"#/components/schemas/LinkedReleaseImpactDto"}}},"required":["packagesRemoved","workItemsRemoved","commitsRemoved","linkedReleasesAffected"]},"LinkedReleaseImpactDto":{"type":"object","properties":{"release":{"type":"object","description":"Release information"},"impactType":{"type":"string","description":"Impact type","enum":["full","partial","cascade"]},"affectedPackages":{"description":"Affected packages","type":"array","items":{"type":"string"}},"severity":{"type":"string","description":"Severity level","enum":["low","medium","high","critical"]},"warning":{"type":"string","description":"Warning message"}},"required":["release","impactType","affectedPackages","severity","warning"]},"CalculatorWarningDto":{"type":"object","properties":{"type":{"type":"string","description":"Warning type","enum":["shared-commit","linked-release","partial-deployment","cascade-effect","incomplete-workitem"]},"severity":{"type":"string","description":"Warning severity","enum":["info","warning","critical"]},"message":{"type":"string","description":"Warning message"},"affectedPackages":{"description":"Affected packages","type":"array","items":{"type":"string"}},"affectedReleases":{"description":"Affected releases","type":"array","items":{"type":"string"}},"suggestion":{"type":"string","description":"Suggestion to resolve warning"}},"required":["type","severity","message"]}}},"paths":{"/sfp/api/release-candidates/calculator/analyze":{"post":{"operationId":"ReleaseCalculatorController_analyzeRelease","summary":"Analyze impact of including/excluding work items","description":"Calculate the impact of toggling work items on packages and linked releases","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorAnalysisRequestDto"}}}},"responses":{"200":{"description":"Analysis results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorAnalysisResultDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Calculator"]}}}}
```

## Optimize release for specific work items

> Find optimal package configuration for given work items and constraints

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"OptimizationRequestDto":{"type":"object","properties":{"releaseCandidateId":{"type":"string","description":"Release candidate ID"},"targetWorkItems":{"description":"Target work items to include","type":"array","items":{"type":"string"}},"constraints":{"description":"Optimization constraints","allOf":[{"$ref":"#/components/schemas/OptimizationConstraintsDto"}]}},"required":["releaseCandidateId","targetWorkItems"]},"OptimizationConstraintsDto":{"type":"object","properties":{"mustIncludePackages":{"description":"Packages that must be included","type":"array","items":{"type":"string"}},"mustExcludePackages":{"description":"Packages that must be excluded","type":"array","items":{"type":"string"}},"mustIncludeWorkItems":{"description":"Work items that must be included","type":"array","items":{"type":"string"}},"mustExcludeWorkItems":{"description":"Work items that must be excluded","type":"array","items":{"type":"string"}},"maxPackages":{"type":"number","description":"Maximum number of packages","minimum":1},"preferExcludePackages":{"description":"Packages to prefer excluding","type":"array","items":{"type":"string"}},"optimizationGoal":{"type":"string","description":"Optimization goal","enum":["minimal","safe","balanced"],"default":"balanced"}}},"OptimizationResultDto":{"type":"object","properties":{"includedPackages":{"description":"Included packages","type":"array","items":{"type":"string"}},"excludedPackages":{"description":"Excluded packages","type":"array","items":{"type":"string"}},"includedWorkItems":{"description":"Included work items","type":"array","items":{"type":"string"}},"excludedWorkItems":{"description":"Excluded work items","type":"array","items":{"type":"string"}},"totalCommits":{"type":"number","description":"Total commits"},"metrics":{"description":"Optimization metrics","allOf":[{"$ref":"#/components/schemas/OptimizationMetricsDto"}]},"suggestions":{"description":"Optimization suggestions","type":"array","items":{"$ref":"#/components/schemas/OptimizationSuggestionDto"}}},"required":["includedPackages","excludedPackages","includedWorkItems","excludedWorkItems","totalCommits","metrics","suggestions"]},"OptimizationMetricsDto":{"type":"object","properties":{"packageCount":{"type":"number","description":"Number of packages"},"workItemCount":{"type":"number","description":"Number of work items"},"commitCount":{"type":"number","description":"Number of commits"},"sharedCommitRatio":{"type":"number","description":"Ratio of shared commits","minimum":0,"maximum":1},"exclusionSafety":{"type":"number","description":"Exclusion safety score","minimum":0,"maximum":1}},"required":["packageCount","workItemCount","commitCount","sharedCommitRatio","exclusionSafety"]},"OptimizationSuggestionDto":{"type":"object","properties":{"type":{"type":"string","description":"Suggestion type","enum":["exclude-package","include-package","exclude-workitem","include-workitem"]},"target":{"type":"string","description":"Target package or work item"},"reason":{"type":"string","description":"Reason for suggestion"},"impact":{"type":"object","description":"Impact of applying suggestion"},"confidence":{"type":"string","description":"Confidence level","enum":["high","medium","low"]}},"required":["type","target","reason","impact","confidence"]}}},"paths":{"/sfp/api/release-candidates/calculator/optimize":{"post":{"operationId":"ReleaseCalculatorController_optimizeRelease","summary":"Optimize release for specific work items","description":"Find optimal package configuration for given work items and constraints","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationRequestDto"}}}},"responses":{"200":{"description":"Optimization results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationResultDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Calculator"]}}}}
```

## Get exclusion strategies

> Find safe exclusion strategies for reducing release size

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"ExclusionStrategyDto":{"type":"object","properties":{"name":{"type":"string","description":"Strategy name"},"description":{"type":"string","description":"Strategy description"},"excludablePackages":{"description":"Packages that can be excluded","type":"array","items":{"type":"string"}},"requiredExclusions":{"description":"Work items that must be excluded","type":"array","items":{"type":"string"}},"safetyScore":{"type":"number","description":"Safety score","minimum":0,"maximum":1},"savings":{"description":"Savings from applying strategy","allOf":[{"$ref":"#/components/schemas/ExclusionStrategySavingsDto"}]}},"required":["name","description","excludablePackages","requiredExclusions","safetyScore","savings"]},"ExclusionStrategySavingsDto":{"type":"object","properties":{"packages":{"type":"number","description":"Number of packages to exclude"},"commits":{"type":"number","description":"Number of commits to exclude"},"percentage":{"type":"number","description":"Percentage reduction"}},"required":["packages","commits","percentage"]}}},"paths":{"/sfp/api/release-candidates/calculator/strategies/{candidateId}":{"get":{"operationId":"ReleaseCalculatorController_getExclusionStrategies","summary":"Get exclusion strategies","description":"Find safe exclusion strategies for reducing release size","parameters":[{"name":"candidateId","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}},{"name":"targetReduction","required":false,"in":"query","description":"Target reduction percentage (0-1, default: 0.2)","schema":{"type":"number"}}],"responses":{"200":{"description":"List of exclusion strategies","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExclusionStrategyDto"}}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Calculator"]}}}}
```

## Get dependency visualization data

> Get dependency graph data for visualization

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"DependencyVisualizationDto":{"type":"object","properties":{"nodes":{"type":"object","description":"Graph nodes"},"edges":{"description":"Graph edges","type":"array","items":{"$ref":"#/components/schemas/VisualizationEdgeDto"}},"statistics":{"description":"Statistics","allOf":[{"$ref":"#/components/schemas/VisualizationStatisticsDto"}]}},"required":["nodes","edges","statistics"]},"VisualizationEdgeDto":{"type":"object","properties":{"from":{"type":"string","description":"Source node ID"},"to":{"type":"string","description":"Target node ID"},"type":{"type":"string","description":"Edge type","enum":["contains","requires","shares"]}},"required":["from","to","type"]},"VisualizationStatisticsDto":{"type":"object","properties":{"totalWorkItems":{"type":"number","description":"Total work items"},"totalCommits":{"type":"number","description":"Total commits"},"totalPackages":{"type":"number","description":"Total packages"},"sharedCommitRatio":{"type":"number","description":"Shared commit ratio"}},"required":["totalWorkItems","totalCommits","totalPackages","sharedCommitRatio"]}}},"paths":{"/sfp/api/release-candidates/calculator/dependencies/{candidateId}":{"get":{"operationId":"ReleaseCalculatorController_getDependencyVisualization","summary":"Get dependency visualization data","description":"Get dependency graph data for visualization","parameters":[{"name":"candidateId","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Dependency visualization data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyVisualizationDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Calculator"]}}}}
```

## Calculate minimal package set

> Find the minimal set of packages needed for specific work items

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"MinimalPackageSetDto":{"type":"object","properties":{"packages":{"description":"Required packages","type":"array","items":{"type":"string"}},"additionalWorkItems":{"description":"Additional work items included","type":"array","items":{"type":"string"}},"rationale":{"type":"object","description":"Rationale for each package","additionalProperties":{"type":"string"}}},"required":["packages","additionalWorkItems","rationale"]}}},"paths":{"/sfp/api/release-candidates/calculator/minimal-package-set":{"post":{"operationId":"ReleaseCalculatorController_calculateMinimalPackageSet","summary":"Calculate minimal package set","description":"Find the minimal set of packages needed for specific work items","parameters":[],"responses":{"200":{"description":"Minimal package set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MinimalPackageSetDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Calculator"]}}}}
```

## Batch analyze multiple scenarios

> Analyze multiple work item combinations in a single request

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"CalculatorAnalysisResultDto":{"type":"object","properties":{"candidateId":{"type":"string","description":"Release candidate ID"},"releaseName":{"type":"string","description":"Release name"},"original":{"description":"Original state before changes","allOf":[{"$ref":"#/components/schemas/OriginalStateDto"}]},"calculated":{"description":"Calculated state after changes","allOf":[{"$ref":"#/components/schemas/CalculatedStateDto"}]},"impact":{"description":"Impact summary","allOf":[{"$ref":"#/components/schemas/ImpactSummaryDto"}]},"warnings":{"description":"Warnings","type":"array","items":{"$ref":"#/components/schemas/CalculatorWarningDto"}},"suggestions":{"description":"Suggestions","type":"array","items":{"type":"string"}}},"required":["candidateId","releaseName","original","calculated","impact","warnings","suggestions"]},"OriginalStateDto":{"type":"object","properties":{"packages":{"description":"Original packages","type":"array","items":{"$ref":"#/components/schemas/PackageInfoDto"}},"workItems":{"description":"Original work items","type":"array","items":{"$ref":"#/components/schemas/WorkItemInfoDto"}},"totalCommits":{"type":"number","description":"Total commits"}},"required":["packages","workItems","totalCommits"]},"PackageInfoDto":{"type":"object","properties":{"package":{"type":"string","description":"Package name"},"path":{"type":"string","description":"Package directory path"},"versionNumber":{"type":"string","description":"Package version number"},"type":{"type":"string","description":"Package type"},"default":{"type":"boolean","description":"Whether this is the default package"},"dependencies":{"description":"Package dependencies","type":"array","items":{"type":"string"}},"domains":{"description":"Domains/release configs that include this package","type":"array","items":{"type":"string"}}},"required":["package","path","versionNumber"]},"WorkItemInfoDto":{"type":"object","properties":{"id":{"type":"string","description":"Work item ID"},"type":{"type":"string","description":"Work item type","enum":["jira","github","pr","other"]},"packageCount":{"type":"number","description":"Number of packages containing this work item"},"commitCount":{"type":"number","description":"Number of commits for this work item"}},"required":["id","type","packageCount","commitCount"]},"CalculatedStateDto":{"type":"object","properties":{"packages":{"description":"Remaining packages","type":"array","items":{"$ref":"#/components/schemas/PackageInfoDto"}},"workItems":{"description":"Remaining work items","type":"array","items":{"$ref":"#/components/schemas/WorkItemInfoDto"}},"excludedPackages":{"description":"Excluded packages","type":"array","items":{"$ref":"#/components/schemas/ExcludedPackageInfoDto"}},"totalCommits":{"type":"number","description":"Total commits after exclusion"}},"required":["packages","workItems","excludedPackages","totalCommits"]},"ExcludedPackageInfoDto":{"type":"object","properties":{"packageName":{"type":"string","description":"Package name"},"version":{"type":"string","description":"Package version"},"reason":{"type":"string","description":"Reason for exclusion","enum":["no-remaining-commits","user-excluded","dependency-excluded"]},"excludedWorkItems":{"description":"Work items excluded with this package","type":"array","items":{"type":"string"}},"excludedCommits":{"type":"number","description":"Number of commits excluded"}},"required":["packageName","version","reason","excludedWorkItems","excludedCommits"]},"ImpactSummaryDto":{"type":"object","properties":{"packagesRemoved":{"type":"number","description":"Number of packages removed"},"workItemsRemoved":{"type":"number","description":"Number of work items removed"},"commitsRemoved":{"type":"number","description":"Number of commits removed"},"linkedReleasesAffected":{"description":"Linked releases affected","type":"array","items":{"$ref":"#/components/schemas/LinkedReleaseImpactDto"}}},"required":["packagesRemoved","workItemsRemoved","commitsRemoved","linkedReleasesAffected"]},"LinkedReleaseImpactDto":{"type":"object","properties":{"release":{"type":"object","description":"Release information"},"impactType":{"type":"string","description":"Impact type","enum":["full","partial","cascade"]},"affectedPackages":{"description":"Affected packages","type":"array","items":{"type":"string"}},"severity":{"type":"string","description":"Severity level","enum":["low","medium","high","critical"]},"warning":{"type":"string","description":"Warning message"}},"required":["release","impactType","affectedPackages","severity","warning"]},"CalculatorWarningDto":{"type":"object","properties":{"type":{"type":"string","description":"Warning type","enum":["shared-commit","linked-release","partial-deployment","cascade-effect","incomplete-workitem"]},"severity":{"type":"string","description":"Warning severity","enum":["info","warning","critical"]},"message":{"type":"string","description":"Warning message"},"affectedPackages":{"description":"Affected packages","type":"array","items":{"type":"string"}},"affectedReleases":{"description":"Affected releases","type":"array","items":{"type":"string"}},"suggestion":{"type":"string","description":"Suggestion to resolve warning"}},"required":["type","severity","message"]}}},"paths":{"/sfp/api/release-candidates/calculator/batch-analyze":{"post":{"operationId":"ReleaseCalculatorController_batchAnalyze","summary":"Batch analyze multiple scenarios","description":"Analyze multiple work item combinations in a single request","parameters":[],"responses":{"200":{"description":"Batch analysis results","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CalculatorAnalysisResultDto"}}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"}},"tags":["Release Calculator"]}}}}
```

## Get preset exclusion scenarios

> Get common preset scenarios for quick analysis

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}}},"paths":{"/sfp/api/release-candidates/calculator/presets":{"get":{"operationId":"ReleaseCalculatorController_getPresetScenarios","summary":"Get preset exclusion scenarios","description":"Get common preset scenarios for quick analysis","parameters":[],"responses":{"200":{"description":"List of preset scenarios"},"403":{"description":"Forbidden - Requires role: member, owner, application"}},"tags":["Release Calculator"]}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.flxbl.io/flxbl/sfp-server/api-reference/release-calculator.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
