Skip to content

Feature/priority icon#163

Merged
nk-coding merged 2 commits intomainfrom
feature/priority_icon
Dec 18, 2025
Merged

Feature/priority icon#163
nk-coding merged 2 commits intomainfrom
feature/priority_icon

Conversation

@nk-coding
Copy link
Contributor

@nk-coding nk-coding commented Dec 18, 2025

  • adds an iconPath to IssuePriority
  • changes doc from 100x100 viewbox to 24x24 viewbox as we will change this soon

Summary by CodeRabbit

  • New Features

    • Issue priorities now support custom icon paths for visual representation.
    • Icon path configuration available when creating and updating issue priorities.
  • Updates

    • Icon path specifications standardized to 24x24 viewBox format across issue management features.

✏️ Tip: You can customize this high-level summary in your review settings.

@nk-coding nk-coding requested a review from chriku December 18, 2025 04:39
@nk-coding nk-coding self-assigned this Dec 18, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 18, 2025

Walkthrough

The changes extend issue priority and type models to support icon path configuration. A new iconPath: String property is added to IssuePriority model and corresponding input types. Documentation specifies a 24x24 SVG viewBox format with fill-only styling. Service layer handlers update IssuePriority creation and updates to process the new icon path parameter.

Changes

Cohort / File(s) Summary
IssuePriority model and input extensions
core/src/main/kotlin/gropius/model/template/IssuePriority.kt, core/src/main/kotlin/gropius/dto/input/template/IssuePriorityInput.kt
Added iconPath: String property to IssuePriority model class and IssuePriorityInput DTO, including GraphQL documentation describing a 24x24 viewBox SVG icon path.
UpdateIssuePriorityInput
core/src/main/kotlin/gropius/dto/input/template/UpdateIssuePriorityInput.kt
Added iconPath: OptionalInput<String> parameter to support optional icon path updates.
IssueType documentation
core/src/main/kotlin/gropius/model/template/IssueType.kt, core/src/main/kotlin/gropius/dto/input/template/IssueTypeInput.kt
Updated GraphQLDescription for iconPath field from 100x100 to 24x24 viewBox specification.
Service layer handlers
core/src/main/kotlin/gropius/service/template/IssuePriorityService.kt, core/src/main/kotlin/gropius/service/template/IssueTemplateService.kt
Added iconPath parameter handling in updateIssuePriority and IssuePriority instantiation in createIssueTemplate workflow.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

  • Consistent repetitive pattern of adding iconPath parameter across multiple files
  • Primary changes are additive property additions to data structures and input types
  • Service layer changes are straightforward parameter passing
  • Requires verification that IssuePriority instantiation in IssueTemplateService correctly passes the new iconPath parameter in all creation paths

Possibly related PRs

Suggested reviewers

  • chriku

Poem

🐰 New icons paint priorities bright,
With paths of 24 by 24 delight,
From input to service, the icon flows free,
A rabbit's small touch to make vision agree! 🎨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Feature/priority icon' accurately describes the main change: adding an iconPath field to IssuePriority, which directly aligns with the PR's core objective and file modifications.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/priority_icon

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
core/src/main/kotlin/gropius/dto/input/template/UpdateIssuePriorityInput.kt (1)

12-13: Consider aligning the GraphQL description with other iconPath fields.

The description here is shorter than the corresponding descriptions in IssueType.kt and IssueTypeInput.kt, which include the viewBox specification and styling constraints. For API consistency, consider using the full description.

🔎 Suggested fix
-    @GraphQLDescription("A path that is used as the icon for issues")
+    @GraphQLDescription("A path that is used as the icon for issues. Used with a 0 0 24 24 viewBox. No stroke, only fill.")
     val iconPath: OptionalInput<String>
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1121bc7 and eb5af18.

📒 Files selected for processing (7)
  • core/src/main/kotlin/gropius/dto/input/template/IssuePriorityInput.kt (1 hunks)
  • core/src/main/kotlin/gropius/dto/input/template/IssueTypeInput.kt (1 hunks)
  • core/src/main/kotlin/gropius/dto/input/template/UpdateIssuePriorityInput.kt (1 hunks)
  • core/src/main/kotlin/gropius/model/template/IssuePriority.kt (1 hunks)
  • core/src/main/kotlin/gropius/model/template/IssueType.kt (1 hunks)
  • core/src/main/kotlin/gropius/service/template/IssuePriorityService.kt (1 hunks)
  • core/src/main/kotlin/gropius/service/template/IssueTemplateService.kt (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build
🔇 Additional comments (4)
core/src/main/kotlin/gropius/model/template/IssueType.kt (1)

19-20: LGTM!

Documentation update for the viewBox is clear and aligns with the PR objectives to standardize on a 24x24 viewBox format.

core/src/main/kotlin/gropius/dto/input/template/IssueTypeInput.kt (1)

8-9: LGTM!

Documentation update is consistent with the corresponding model class IssueType.kt.

core/src/main/kotlin/gropius/service/template/IssuePriorityService.kt (1)

42-44: LGTM!

The iconPath update follows the same idiomatic pattern used for value, correctly leveraging ifPresent to conditionally apply the update only when provided in the input.

core/src/main/kotlin/gropius/service/template/IssueTemplateService.kt (1)

43-43: LGTM!

The IssuePriority construction correctly includes the new iconPath parameter, consistent with the pattern used for IssueType on line 37.

Comment on lines +9 to +11
val value: Double,
@GraphQLDescription("A path that is used as the icon for issues. Used with a 0 0 24 24 viewBox. No stroke, only fill.")
val iconPath: String
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find and read IssuePriorityInput.kt file
find . -name "IssuePriorityInput.kt" -type f 2>/dev/null | head -5

Repository: ccims/gropius-backend

Length of output: 136


🏁 Script executed:

#!/bin/bash
# Read the full IssuePriorityInput.kt file
wc -l ./core/src/main/kotlin/gropius/dto/input/template/IssuePriorityInput.kt

Repository: ccims/gropius-backend

Length of output: 139


🏁 Script executed:

#!/bin/bash
# Read the full file
cat -n ./core/src/main/kotlin/gropius/dto/input/template/IssuePriorityInput.kt

Repository: ccims/gropius-backend

Length of output: 707


🏁 Script executed:

#!/bin/bash
# Find IssuePriority entity and related files
find . -name "*IssuePriority*" -type f 2>/dev/null | grep -E "\.(kt|java|sql)$" | head -20

Repository: ccims/gropius-backend

Length of output: 502


🏁 Script executed:

#!/bin/bash
# Check the IssuePriority entity model
cat -n ./core/src/main/kotlin/gropius/model/template/IssuePriority.kt

Repository: ccims/gropius-backend

Length of output: 1586


🏁 Script executed:

#!/bin/bash
# Check the service that creates IssuePriority
cat -n ./core/src/main/kotlin/gropius/service/template/IssuePriorityService.kt

Repository: ccims/gropius-backend

Length of output: 2151


🏁 Script executed:

#!/bin/bash
# Check the UpdateIssuePriorityInput
cat -n ./core/src/main/kotlin/gropius/dto/input/template/UpdateIssuePriorityInput.kt

Repository: ccims/gropius-backend

Length of output: 806


🏁 Script executed:

#!/bin/bash
# Search for mutations that create IssuePriority
rg -A 10 "createIssuePriority" --type kt 2>/dev/null | head -50

Repository: ccims/gropius-backend

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Search for where IssuePriorityInput is used
rg "IssuePriorityInput" --type kt 2>/dev/null | head -30

Repository: ccims/gropius-backend

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Search for GraphQL mutations or resolvers related to IssuePriority
rg "fun.*[Cc]reate.*[Ii]ssue.*[Pp]riority|class.*Mutation" --type kt -A 5 2>/dev/null | head -60

Repository: ccims/gropius-backend

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Find mutation or resolver files
find . -name "*Mutation*" -o -name "*Resolver*" | grep -i priority 2>/dev/null

Repository: ccims/gropius-backend

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Find all mutation/resolver files
find . -path "*/service/*" -name "*Mutation*.kt" -o -name "*Resolver*.kt" 2>/dev/null | head -10

Repository: ccims/gropius-backend

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Find IssueTemplateService to see how IssuePriority is created
find . -name "IssueTemplateService.kt" -type f 2>/dev/null

Repository: ccims/gropius-backend

Length of output: 136


🏁 Script executed:

#!/bin/bash
# Read the IssueTemplateService
wc -l ./core/src/main/kotlin/gropius/service/template/IssueTemplateService.kt

Repository: ccims/gropius-backend

Length of output: 139


🏁 Script executed:

#!/bin/bash
# Read the IssueTemplateService
cat -n ./core/src/main/kotlin/gropius/service/template/IssueTemplateService.kt

Repository: ccims/gropius-backend

Length of output: 3738


🏁 Script executed:

#!/bin/bash
# Look for tests related to IssuePriority
find . -path "*/test/*" -name "*IssuePriority*" -type f 2>/dev/null | head -10

Repository: ccims/gropius-backend

Length of output: 47


New iconPath field requires non-nullable handling and validation.

The iconPath: String field is non-nullable in IssuePriorityInput, meaning all clients creating IssuePriority instances must supply it. Verify this aligns with your API versioning strategy. Additionally:

  • Add validation (e.g., @NotBlank) to ensure valid SVG paths are provided, not empty strings.
  • Update IssuePriority creation callers to handle the new required parameter.
  • Consider sanitizing iconPath before storage to prevent malformed SVG paths.
🤖 Prompt for AI Agents
In core/src/main/kotlin/gropius/dto/input/template/IssuePriorityInput.kt around
lines 9 to 11, the new non-nullable iconPath property requires handling and
validation: mark iconPath with a validation annotation such as @field:NotBlank
(or equivalent) to reject empty strings, and add a brief comment about expected
SVG path format; update all IssuePriority creation sites to accept and pass this
new parameter (or provide a default if you intend it to be optional) and add
runtime checks to fail fast when missing; before persisting, sanitize/validate
the path (e.g., trim, validate against a simple SVG path pattern or whitelist
allowed characters) to avoid malformed SVG input; and verify this non-nullable
change is compatible with your API versioning policy, making it nullable or
optional if breaking changes are not allowed.

Comment on lines +22 to +24
var value: Double,
@GraphQLDescription("A path that is used as the icon for issues. Used with a 0 0 24 24 viewBox. No stroke, only fill.")
var iconPath: String
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find database configuration and migration-related files
echo "=== Looking for database configuration ==="
find . -type f \( -name "*.properties" -o -name "*.yml" -o -name "*.yaml" \) | xargs grep -l "spring.jpa\|hibernate\|flyway\|liquibase" 2>/dev/null | head -20

echo -e "\n=== Looking for migration files ==="
find . -type d -name "*migration*" -o -name "*flyway*" -o -name "*liquibase*" 2>/dev/null | head -20

echo -e "\n=== Looking for SQL migration files ==="
find . -type f \( -name "*.sql" -o -name "*.xml" \) | grep -i "migrat\|schema\|flyway\|liquibase" | head -20

Repository: ccims/gropius-backend

Length of output: 185


🏁 Script executed:

#!/bin/bash
# Find and examine IssuePriority.kt file
echo "=== Finding IssuePriority.kt ==="
find . -name "IssuePriority.kt" -type f

echo -e "\n=== Reading IssuePriority.kt ==="
find . -name "IssuePriority.kt" -type f -exec wc -l {} \;

Repository: ccims/gropius-backend

Length of output: 260


🏁 Script executed:

#!/bin/bash
# Search for IssuePriority related input class
echo "=== Looking for IssuePriority input/DTO classes ==="
rg -l "IssuePriorityInput|CreateIssuePriority|IssuePriority" --type=kt | head -10

echo -e "\n=== Checking project structure ==="
ls -la core/src/main/kotlin/gropius/model/template/ 2>/dev/null | head -20

Repository: ccims/gropius-backend

Length of output: 1563


🏁 Script executed:

#!/bin/bash
# Read the full IssuePriority.kt file
echo "=== Full IssuePriority.kt content ==="
cat -n ./core/src/main/kotlin/gropius/model/template/IssuePriority.kt

echo -e "\n=== Looking for application configuration ==="
find . -type f \( -name "application.properties" -o -name "application.yml" -o -name "application-*.properties" -o -name "application-*.yml" \) | head -10

echo -e "\n=== Looking for schema initialization ==="
find . -type f -name "schema.sql" -o -name "data.sql" -o -name "schema-*.sql" 2>/dev/null | head -10

Repository: ccims/gropius-backend

Length of output: 1857


🏁 Script executed:

#!/bin/bash
# Search for Hibernate DDL configuration in kotlin files
echo "=== Looking for Hibernate/JPA configuration in Kotlin ==="
rg "spring\.jpa\|hibernate\.hbm2ddl\|ddl-auto\|@Table\|@Entity" . --type-list | head -5
find . -type f -name "*.kt" | xargs grep -l "hibernate\.hbm2ddl\|ddl.auto" 2>/dev/null | head -10

echo -e "\n=== Looking for @EnableAutoConfiguration or @SpringBootApplication ==="
find . -type f -name "*.kt" | xargs grep -l "EnableAutoConfiguration\|SpringBootApplication" 2>/dev/null | head -5

Repository: ccims/gropius-backend

Length of output: 811


🏁 Script executed:

#!/bin/bash
# Search for GraphGlue or persistence configuration
echo "=== Looking for persistence.xml or persistence config ==="
find . -type f -name "persistence.xml" 2>/dev/null

echo -e "\n=== Looking for DomainNode class definition ==="
find . -type f -name "DomainNode.kt" -o -name "NamedNode.kt" | head -5

Repository: ccims/gropius-backend

Length of output: 228


🏁 Script executed:

#!/bin/bash
# Read application configuration
echo "=== Reading application.yml ==="
cat -n ./api-common/src/main/resources/application.yml

echo -e "\n=== Reading NamedNode.kt ==="
cat -n ./core/src/main/kotlin/gropius/model/common/NamedNode.kt

Repository: ccims/gropius-backend

Length of output: 1355


🏁 Script executed:

#!/bin/bash
# Look for any initialization or seeding of IssuePriority data
echo "=== Searching for IssuePriority initialization/seeding ==="
rg "IssuePriority\(" . --type=kt | head -20

echo -e "\n=== Looking for GraphGlue configuration ==="
find . -type f -name "*.kt" | xargs grep -l "graphglue\|@DomainNode" 2>/dev/null | head -10

echo -e "\n=== Reading application main class to understand configuration ==="
cat -n ./api-common/src/main/kotlin/gropius/Application.kt 2>/dev/null || echo "Not found in api-common"

Repository: ccims/gropius-backend

Length of output: 1136


🏁 Script executed:

#!/bin/bash
# Check pom.xml or build.gradle for GraphGlue and persistence dependencies
echo "=== Looking for build configuration (pom.xml or gradle) ==="
find . -maxdepth 3 -name "pom.xml" -o -name "build.gradle.kts" | head -5

echo -e "\n=== Looking for GraphGlue dependency ==="
find . -type f \( -name "pom.xml" -o -name "build.gradle.kts" \) | xargs grep -l "graphglue\|GraphGlue" 2>/dev/null | head -5

Repository: ccims/gropius-backend

Length of output: 434


🏁 Script executed:

#!/bin/bash
# Confirm Neo4j usage and GraphGlue configuration
echo "=== Checking for Neo4j configuration ==="
find . -type f \( -name "application.yml" -o -name "application.properties" \) -exec grep -l "spring.neo4j\|neo4j" {} \; | head -5

echo -e "\n=== Reading main build.gradle.kts ==="
cat -n ./build.gradle.kts | head -60

echo -e "\n=== Reading core/build.gradle.kts for dependencies ==="
cat -n ./core/build.gradle.kts | grep -A5 -B5 "graphglue\|neo4j" | head -30

Repository: ccims/gropius-backend

Length of output: 2182


🏁 Script executed:

#!/bin/bash
# Look for any data initialization or default value handling
echo "=== Searching for constructor or factory patterns for IssuePriority ==="
rg "IssuePriority\s*\(" . --type=kt -A3 -B3 | head -50

echo -e "\n=== Look for GraphGlue documentation or config about nullable fields ==="
find . -type f -name "*.kt" -exec grep -l "nullable\|@Required\|@NotNull" {} \; 2>/dev/null | head -10

Repository: ccims/gropius-backend

Length of output: 954


🏁 Script executed:

#!/bin/bash
# Check how GraphGlue @DomainNode works with new properties
echo "=== Searching for other @DomainNode examples with similar patterns ==="
rg "@DomainNode" . --type=kt -A20 | grep -E "@DomainNode|var .* String" | head -30

echo -e "\n=== Look at how iconPath is used in queries/mutations ==="
rg "iconPath" . --type=kt

Repository: ccims/gropius-backend

Length of output: 265


🏁 Script executed:

#!/bin/bash
# Search without the problematic --type flag
echo "=== Checking Neo4j in application.yml files ==="
grep -r "neo4j\|spring.neo4j" . --include="*.yml" | head -20

echo -e "\n=== Check GraphGlue version in gradle ==="
grep "graphglueVersion\|graphglue" ./build.gradle.kts

echo -e "\n=== Check core gradle for full dependency list ==="
cat -n ./core/build.gradle.kts

Repository: ccims/gropius-backend

Length of output: 1144


🏁 Script executed:

#!/bin/bash
# Search for iconPath usage across the codebase
echo "=== Searching for iconPath ==="
grep -r "iconPath" . --include="*.kt" 2>/dev/null

echo -e "\n=== Searching for IssuePriority instantiation ==="
grep -r "IssuePriority(" . --include="*.kt" -B2 -A2 2>/dev/null | head -40

Repository: ccims/gropius-backend

Length of output: 5312


🏁 Script executed:

#!/bin/bash
# Check the input classes to understand the pattern
echo "=== Reading IssuePriorityInput.kt ==="
cat ./core/src/main/kotlin/gropius/dto/input/template/IssuePriorityInput.kt

echo -e "\n=== Reading UpdateIssuePriorityInput.kt ==="
cat ./core/src/main/kotlin/gropius/dto/input/template/UpdateIssuePriorityInput.kt

echo -e "\n=== Reading IssuePriorityService.kt to see how updates are handled ==="
cat ./core/src/main/kotlin/gropius/service/template/IssuePriorityService.kt

Repository: ccims/gropius-backend

Length of output: 3172


🏁 Script executed:

#!/bin/bash
# Look for other similar non-nullable String properties in domain models
echo "=== Checking IssueType which also has iconPath ==="
cat ./core/src/main/kotlin/gropius/model/template/IssueType.kt

echo -e "\n=== Check if there are any tests or initialization data ==="
find . -type f -name "*IssuePriority*Test*" -o -name "*test*IssuePriority*" 2>/dev/null | head -10
find . -type f -name "*.sql" -o -name "*seed*" -o -name "*fixture*" 2>/dev/null | head -10

Repository: ccims/gropius-backend

Length of output: 1355


🏁 Script executed:

#!/bin/bash
# Look for any Neo4j schema or constraint definitions
echo "=== Looking for Neo4j schema or constraints ==="
grep -r "@Index\|@Unique\|@Constraint" . --include="*.kt" 2>/dev/null | head -20

echo -e "\n=== Check if GraphGlue has any special handling for new properties ==="
grep -r "nullable\|@Nullable\|defaultValue" . --include="*.kt" | grep -i "domainnode\|basenode" | head -10

Repository: ccims/gropius-backend

Length of output: 1707


🏁 Script executed:

#!/bin/bash
# Confirm Neo4j is the database by checking for spring-boot-starter-data-neo4j
echo "=== Check dependencies for Neo4j ==="
grep -r "spring-boot-starter-data-neo4j\|neo4j" . --include="*.kts" | head -20

echo -e "\n=== Verify IssueType and IssuePriority have same pattern ==="
echo "IssuePriority iconPath declaration:"
grep "iconPath" ./core/src/main/kotlin/gropius/model/template/IssuePriority.kt

echo -e "\nIssueType iconPath declaration:"
grep "iconPath" ./core/src/main/kotlin/gropius/model/template/IssueType.kt

echo -e "\n=== Check if there's any special handling for non-nullable properties ==="
grep -r "nullable\|@Nullable\|@NotNull\|defaultValue" ./core/src/main/kotlin/gropius/model/template/ --include="*.kt" | head -20

Repository: ccims/gropius-backend

Length of output: 357


🏁 Script executed:

#!/bin/bash
# Check the actual pattern for how new non-nullable properties are handled in practice
echo "=== Looking at BaseNode to understand property definition ==="
cat ./core/src/main/kotlin/gropius/model/common/BaseNode.kt 2>/dev/null || echo "File not found"

echo -e "\n=== Check if there are version migrations or data migration scripts ==="
find . -type f -name "*Migration*" -o -name "*migration*" 2>/dev/null | grep -v node_modules | grep -v ".gradle"

echo -e "\n=== Final confirmation: Check graphglue-core dependency usage ==="
grep -r "graphglue" ./api-common/src/main/kotlin/ --include="*.kt" 2>/dev/null | head -5

Repository: ccims/gropius-backend

Length of output: 1611


🏁 Script executed:

#!/bin/bash
# Final verification: Search for any Neo4j-specific property handling
echo "=== Verify this is truly Neo4j with Spring Data Neo4j ==="
find . -type f \( -name "*.kts" -o -name "*.properties" -o -name "*.yml" \) | xargs grep -l "neo4j\|spring.data.neo4j" 2>/dev/null | head -5

echo -e "\n=== Check api-common build.gradle for Spring Data Neo4j ==="
cat ./api-common/build.gradle.kts | grep -A2 -B2 "neo4j\|spring-data\|graphglue"

echo -e "\n=== Verify Node base class from GraphGlue ==="
grep -r "class Node\|interface Node" . --include="*.kt" | grep -i "graphglue\|spring" | head -5

echo -e "\n=== Check properties.gradle or gradle.properties for versions ==="
cat ./gradle.properties | grep -i "spring\|neo4j\|graphglue" 2>/dev/null || echo "Not found in root"
ls -la . | grep gradle.properties

Repository: ccims/gropius-backend

Length of output: 723


Handle missing iconPath property on existing IssuePriority entities.

The non-nullable iconPath property will cause runtime deserialization failures when loading existing IssuePriority entities from Neo4j that lack this field. This affects both new loads and any updates to existing records. Recommendations:

  1. Make the field optional: Change to var iconPath: String? to handle missing properties gracefully.
  2. Provide a default value: Use a sensible default icon path (e.g., empty string or a placeholder SVG) to ensure backward compatibility.
  3. Update both IssuePriority and IssueType consistently since IssueType has the same pattern.
🤖 Prompt for AI Agents
In core/src/main/kotlin/gropius/model/template/IssuePriority.kt around lines 22
to 24, the non-nullable iconPath will cause runtime deserialization failures for
existing IssuePriority records missing that property; change the property to be
nullable (var iconPath: String?) and provide a sensible default when
reading/constructing (e.g., empty string or placeholder SVG) so legacy records
load without error; apply the same change and default strategy to the
corresponding IssueType file to keep behavior consistent.

@nk-coding nk-coding merged commit 2fd853a into main Dec 18, 2025
2 checks passed
@nk-coding nk-coding deleted the feature/priority_icon branch December 18, 2025 07:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants