Skip to content

Localized Metadata#24

Open
phnagy wants to merge 11 commits intomainfrom
localized-metadata
Open

Localized Metadata#24
phnagy wants to merge 11 commits intomainfrom
localized-metadata

Conversation

@phnagy
Copy link
Member

@phnagy phnagy commented Jan 30, 2026

Linux Support & Localized Metadata

♻️ Current situation & Problem

⚙️ Release Notes

  • add linux support
  • localized metadata

📚 Documentation

-/-

✅ Testing

-/-

🏗️ ToDo's

📝 Code of Conduct & Contributing Guidelines

Summary by CodeRabbit

  • New Features

    • Custom active task component enabled on Apple platforms
  • Improvements

    • Study metadata fields now support localized text
    • Human-readable titles for timed walking tests (Apple platforms)
    • Study bundle file handling standardized to a definition.json filename
    • Platform-aware component availability and display behavior
  • Tests

    • Updated unit and UI tests for localization, platform differences, and enrollment flows (UI gestures adjusted)
  • Chores

    • CI: added Linux package test job and coverage report upload support

@phnagy phnagy force-pushed the localized-metadata branch from e8fd3c5 to b81e3d3 Compare February 12, 2026 21:15
@codecov
Copy link

codecov bot commented Feb 12, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 75.00%. Comparing base (3d8b226) to head (894e783).

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main      #24   +/-   ##
=======================================
  Coverage   75.00%   75.00%           
=======================================
  Files          25       25           
  Lines         356      356           
=======================================
  Hits          267      267           
  Misses         89       89           
Files with missing lines Coverage Δ
...ources/SpeziStudy/Study Manager/StudyManager.swift 81.16% <100.00%> (ø)
...inition Components/CustomActiveTaskComponent.swift 0.00% <ø> (ø)
...inition Components/TimedWalkingTestComponent.swift 71.43% <ø> (ø)
...tudyDefinition/StudyBundle/StudyBundle+Write.swift 100.00% <ø> (ø)
...SpeziStudyDefinition/StudyBundle/StudyBundle.swift 84.62% <ø> (ø)
...Bundle/Validation/StudyDefinition+Validation.swift 0.00% <ø> (ø)
...ziStudyDefinition/StudyDefinition+Components.swift 50.00% <ø> (ø)
...peziStudyDefinition/StudyDefinition+Metadata.swift 100.00% <ø> (ø)
Sources/SpeziStudyDefinition/StudyDefinition.swift 80.00% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 3d8b226...894e783. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@coderabbitai
Copy link

coderabbitai bot commented Mar 3, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f9aba6e and 894e783.

📒 Files selected for processing (3)
  • Sources/SpeziStudyDefinition/StudyBundle/StudyBundle+Write.swift
  • Sources/SpeziStudyDefinition/StudyBundle/StudyBundle.swift
  • Tests/SpeziStudyTests/StudyBundleTests.swift
🚧 Files skipped from review as they are similar to previous changes (2)
  • Sources/SpeziStudyDefinition/StudyBundle/StudyBundle+Write.swift
  • Sources/SpeziStudyDefinition/StudyBundle/StudyBundle.swift

📝 Walkthrough

Walkthrough

Refactors Package.swift into function-driven manifest builders, converts several StudyDefinition text fields to localized dictionaries, gates Darwin-only components with conditional compilation, updates StudyBundle path handling and validations, adjusts tests/UI to use localized lookups and locale codes, and adds a Linux package test job to GitHub Actions.

Changes

Cohort / File(s) Summary
CI / GitHub Actions
.github/workflows/build-and-test.yml
Adds package_tests_linux job using StanfordBDHG/.../swift-test.yml@v2 with Debug/Release matrix and artifact SpeziStudy-Package-Linux-{0}.lcov; uploadcoveragereport now needs package_tests_linux and accepts coveragereports_lcov.
Package manifest
Package.swift
Converts inline manifest arrays into products()/dependencies()/targets() generator functions; reorganizes and adds dependencies (e.g., swift-log, swift-collections) while preserving Darwin-conditional inclusion logic.
Localization model
Sources/SpeziStudyDefinition/StudyDefinition+Metadata.swift
Changes metadata text properties (title, shortTitle, explanationText, shortExplanationText) from String to LocalizationsDictionary<String> and updates initializer; adds SpeziLocalization import.
Darwin guards — components & extensions
Sources/SpeziStudyDefinition/Study Definition Components/CustomActiveTaskComponent.swift, Sources/SpeziStudyDefinition/Study Definition Components/TimedWalkingTestComponent.swift, Sources/SpeziStudyDefinition/StudyDefinition+Components.swift, Sources/SpeziStudyDefinition/StudyDefinition.swift
Wraps CustomActiveTask public APIs in #if canImport(Darwin); adds Darwin-only displayTitle for TimedWalkingTestConfiguration; conditions Component enum cases, id/kind branches, and displayTitle/subtitle logic on Darwin availability.
StudyBundle path handling & validation
Sources/SpeziStudyDefinition/StudyBundle/StudyBundle.swift, .../StudyBundle+Write.swift, .../Validation/StudyDefinition+Validation.swift
Standardizes on definition.json path and appending(component:..., directoryHint:) URL construction; adds conditional imports for OSLog/UTType; makes customActiveTask file reference checks platform-conditional.
Study manager & UI string access
Sources/SpeziStudy/Study Manager/StudyManager.swift, Tests/UITests/TestApp/HomeTab.swift
Use localization-safe lookups like metadata.title[.enUS] ?? "" for display/log strings to avoid nils.
Tests — metadata, URLs & platform gates
Tests/SpeziStudyTests/StudyBundleTests.swift, Tests/SpeziStudyTests/StudyBundleValidationTests.swift, Tests/SpeziStudyTests/StudyManagerTests.swift, Tests/UITests/TestApp/MockStudy.swift
Update tests to construct Metadata with localized dictionaries (.init([.enUS: "..."])), switch temp bundle URL creation to appending(component: "...\(StudyBundle.fileExtension)", directoryHint:), and gate Darwin-only tests with #if canImport(Darwin).
Test resources locale fixes
Tests/SpeziStudyTests/Resources/questionnaires/Invalid5+en-UK.json, .../Invalid6+en-UK.json, .../TestSurvey+en-UK.json
Replace en-UK locale codes with en-GB.
UI tests gestures
Tests/UITests/TestAppUITests/TestAppUITests.swift
Adds swipeUp() and swipeDown() gestures to reveal/preserve UI elements during assertions.
Small localization adjustments
Tests/..., Sources/... (various)
Replace plain "" literals with .init() for localized fields and minor updates to localized string accesses across tests and UI mocks.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐇 I hopped through manifests, locales, and tests today,
Darwin doors are gated, Linux runs the play,
Titles wrapped in dictionaries, bundles find their way,
A rabbit thumps once more — code updated, hip hooray! 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 18.75% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Localized Metadata' accurately reflects the primary change in the PR: converting metadata fields from plain strings to localized representations using LocalizationsDictionary.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch localized-metadata

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

@phnagy phnagy force-pushed the localized-metadata branch from 2c8f4ae to 6af51ea Compare March 3, 2026 18:44
@phnagy phnagy marked this pull request as ready for review March 3, 2026 20:11
Copy link

@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 (7)
Tests/SpeziStudyTests/Resources/questionnaires/Invalid6+en-UK.json (1)

4-4: Consider aligning fixture filename with payload locale.

The file content is now en-GB, but the fixture name still ends with +en-UK.json. For localization tests, this can be misleading. Consider renaming to +en-GB.json (or add a short test comment if the mismatch is intentional).

Also applies to: 14-14

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Tests/SpeziStudyTests/Resources/questionnaires/Invalid6`+en-UK.json at line
4, The fixture file Invalid6+en-UK.json has a language field set to "en-GB"
causing a mismatch; either rename the fixture to end with +en-GB.json to match
the payload or change the "language" value to "en-UK" and add a brief inline
comment explaining the intentional mismatch; update any test references that
import or load Invalid6+en-UK.json to use the new filename if you rename the
file.
Package.swift (1)

77-77: Redundant empty array concatenation.

The [] + swiftLintPlugin() pattern is redundant since swiftLintPlugin() already returns [Target.PluginUsage]. This pattern appears on lines 77, 94, and 113.

♻️ Suggested simplification
-        plugins: [] + swiftLintPlugin()
+        plugins: swiftLintPlugin()

Apply similarly to lines 94 and 113.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Package.swift` at line 77, The plugin lists currently use a redundant
concatenation pattern "[] + swiftLintPlugin()"; remove the empty array
concatenation and replace each occurrence with just swiftLintPlugin() (update
the plugin arguments where this appears—the call sites involving
swiftLintPlugin() in the Package.swift plugin arrays) so the plugin arrays
directly use the returned [Target.PluginUsage] instead of prepending an empty
array.
Sources/SpeziStudyDefinition/StudyDefinition.swift (1)

171-179: Consider fallback for timedWalkingTest display title on non-Darwin platforms.

The timedWalkingTest case returns nil on non-Darwin platforms because displayTitle uses LocalizedStringResource. While this is technically correct, it means timed walking tests will have no display title on Linux. If Linux support is intended for more than CI/testing, consider providing a plain string fallback.

♻️ Optional: Add non-Darwin fallback
         case .timedWalkingTest(let component):
             `#if` canImport(Darwin)
             String(localized: component.test.displayTitle)
             `#else`
-            nil
+            // Provide a basic fallback for non-Darwin platforms
+            switch component.test.kind {
+            case .walking: "Walk Test"
+            case .running: "Run Test"
+            }
             `#endif`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Sources/SpeziStudyDefinition/StudyDefinition.swift` around lines 171 - 179,
The timedWalkingTest branch currently yields nil on non-Darwin platforms because
it depends on LocalizedStringResource; update the non-Darwin fallback to return
a plain String instead of nil (for example derive a simple title from the model
such as component.test.title or String(describing: component.test)) so that
timedWalkingTest has a usable display title on Linux; modify the conditional
around timedWalkingTest (referencing timedWalkingTest and
component.test.displayTitle) to return that fallback string when
canImport(Darwin) is false.
Tests/SpeziStudyTests/StudyBundleTests.swift (1)

51-53: Add cleanup for temporary copied bundle path.

Line 51 creates a temp bundle URL for copy/equality checks, but it is not cleaned up. Adding a defer removal avoids temp-directory buildup across repeated test runs.

♻️ Suggested small cleanup
 let bundle3Url = URL.temporaryDirectory.appending(component: "\(UUID().uuidString).\(StudyBundle.fileExtension)", directoryHint: .isDirectory)
+defer {
+    try? FileManager.default.removeItem(at: bundle3Url)
+}
 try bundle1.copy(to: bundle3Url)
 let bundle3 = try StudyBundle(bundleUrl: bundle3Url)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Tests/SpeziStudyTests/StudyBundleTests.swift` around lines 51 - 53, Add
cleanup for the temporary copied bundle by removing the file at bundle3Url after
the test completes: after creating bundle3Url (the temporary URL used with
bundle1.copy and the StudyBundle initializer), add a defer that attempts to
remove the item at bundle3Url (using FileManager.default.removeItem or try? to
swallow errors) so the temp file does not accumulate across test runs.
Tests/SpeziStudyTests/StudyBundleValidationTests.swift (1)

49-49: Consider extracting temp study-bundle URL creation into a helper.

Line 49, Line 319, and Line 629 repeat the same temp URL construction pattern; a helper would reduce duplication and drift across tests.

Also applies to: 319-319, 629-629

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Tests/SpeziStudyTests/StudyBundleValidationTests.swift` at line 49, Extract
the repeated temp URL construction into a single helper function (e.g.,
makeTempStudyBundleURL() or temporaryStudyBundleURL()) that returns
URL(temporaryDirectory).appending(component:
"\(UUID().uuidString).\(StudyBundle.fileExtension)", directoryHint:
.isDirectory); replace the three inline constructions (currently assigned to
tmpUrl at the three test sites) with calls to this helper and update any test
teardown or uses accordingly to keep behavior identical.
Tests/UITests/TestAppUITests/TestAppUITests.swift (1)

42-42: Scope swipe gestures to the scroll container for stability.

Line 42 and Line 56 use app-wide swipes; targeting the specific Form/scrollable container is usually more deterministic in UI tests.

Also applies to: 56-56

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Tests/UITests/TestAppUITests/TestAppUITests.swift` at line 42, Replace the
app-wide swipe gestures with swipes scoped to the specific scrollable container:
locate the Form/scrollView used in TestAppUITests (e.g., reference the Form
element or use app.scrollViews.firstMatch) and change the two app.swipeUp()
calls to formElement.swipeUp() or app.scrollViews.firstMatch.swipeUp(); if the
Form has an accessibility identifier, use app.forms["<identifier>"] or
app.otherElements["<identifier>"] to target it for deterministic swiping in
TestAppUITests.
Tests/SpeziStudyTests/StudyManagerTests.swift (1)

11-11: Consider narrowing the Darwin gate scope.

Line 11 and Line 364 gate the full suite; this also excludes tests that look platform-agnostic (for example locale matching/update logic). Splitting Darwin-only tests into a separate gated suite would preserve Linux coverage.

Also applies to: 364-364

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Tests/SpeziStudyTests/StudyManagerTests.swift` at line 11, The top-level
Darwin gate currently wrapping the entire StudyManagerTests file is excluding
platform-agnostic tests; remove the file-wide `#if` canImport(Darwin) and instead
restrict Darwin-only checks to the specific tests that require Apple platforms
(e.g., move the Darwin-only assertions into a separate file or wrap only the
Apple-specific test methods with `#if` canImport(Darwin)). Update
StudyManagerTests by unwrapping platform-agnostic tests (like the locale
matching/update tests) so they run on Linux, and place the Darwin-only cases
inside a guarded extension or new test file that still uses `#if`
canImport(Darwin).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/build-and-test.yml:
- Around line 74-80: The uploadcoveragereport job's needs array is missing the
Linux test job, so add package_tests_linux to the needs list for the
uploadcoveragereport job to ensure Linux LCOV artifacts (coveragereports_lcov:
SpeziStudy-Package-Linux-*.lcov) are produced before upload; update the
uploadcoveragereport job declaration (the needs field under the
uploadcoveragereport job) to include package_tests_linux alongside package_tests
and ui_tests.

In `@Tests/UITests/TestApp/HomeTab.swift`:
- Line 68: The UI string lookup currently forces .enUS in the AsyncButton title
(see AsyncButton(...) and mockStudyV1.studyDefinition.metadata.title[.enUS])
which can ignore the active locale or be empty; update the lookup to resolve
using the current/preferred locale(s) first and fall back to a safe default
(e.g., Locale.current or a list of preferred locales then any available language
or a hardcoded fallback) before formatting the button label; apply the same
change where .enUS is used at the other occurrence so the title resolves
robustly across locales.

---

Nitpick comments:
In `@Package.swift`:
- Line 77: The plugin lists currently use a redundant concatenation pattern "[]
+ swiftLintPlugin()"; remove the empty array concatenation and replace each
occurrence with just swiftLintPlugin() (update the plugin arguments where this
appears—the call sites involving swiftLintPlugin() in the Package.swift plugin
arrays) so the plugin arrays directly use the returned [Target.PluginUsage]
instead of prepending an empty array.

In `@Sources/SpeziStudyDefinition/StudyDefinition.swift`:
- Around line 171-179: The timedWalkingTest branch currently yields nil on
non-Darwin platforms because it depends on LocalizedStringResource; update the
non-Darwin fallback to return a plain String instead of nil (for example derive
a simple title from the model such as component.test.title or String(describing:
component.test)) so that timedWalkingTest has a usable display title on Linux;
modify the conditional around timedWalkingTest (referencing timedWalkingTest and
component.test.displayTitle) to return that fallback string when
canImport(Darwin) is false.

In `@Tests/SpeziStudyTests/Resources/questionnaires/Invalid6`+en-UK.json:
- Line 4: The fixture file Invalid6+en-UK.json has a language field set to
"en-GB" causing a mismatch; either rename the fixture to end with +en-GB.json to
match the payload or change the "language" value to "en-UK" and add a brief
inline comment explaining the intentional mismatch; update any test references
that import or load Invalid6+en-UK.json to use the new filename if you rename
the file.

In `@Tests/SpeziStudyTests/StudyBundleTests.swift`:
- Around line 51-53: Add cleanup for the temporary copied bundle by removing the
file at bundle3Url after the test completes: after creating bundle3Url (the
temporary URL used with bundle1.copy and the StudyBundle initializer), add a
defer that attempts to remove the item at bundle3Url (using
FileManager.default.removeItem or try? to swallow errors) so the temp file does
not accumulate across test runs.

In `@Tests/SpeziStudyTests/StudyBundleValidationTests.swift`:
- Line 49: Extract the repeated temp URL construction into a single helper
function (e.g., makeTempStudyBundleURL() or temporaryStudyBundleURL()) that
returns URL(temporaryDirectory).appending(component:
"\(UUID().uuidString).\(StudyBundle.fileExtension)", directoryHint:
.isDirectory); replace the three inline constructions (currently assigned to
tmpUrl at the three test sites) with calls to this helper and update any test
teardown or uses accordingly to keep behavior identical.

In `@Tests/SpeziStudyTests/StudyManagerTests.swift`:
- Line 11: The top-level Darwin gate currently wrapping the entire
StudyManagerTests file is excluding platform-agnostic tests; remove the
file-wide `#if` canImport(Darwin) and instead restrict Darwin-only checks to the
specific tests that require Apple platforms (e.g., move the Darwin-only
assertions into a separate file or wrap only the Apple-specific test methods
with `#if` canImport(Darwin)). Update StudyManagerTests by unwrapping
platform-agnostic tests (like the locale matching/update tests) so they run on
Linux, and place the Darwin-only cases inside a guarded extension or new test
file that still uses `#if` canImport(Darwin).

In `@Tests/UITests/TestAppUITests/TestAppUITests.swift`:
- Line 42: Replace the app-wide swipe gestures with swipes scoped to the
specific scrollable container: locate the Form/scrollView used in TestAppUITests
(e.g., reference the Form element or use app.scrollViews.firstMatch) and change
the two app.swipeUp() calls to formElement.swipeUp() or
app.scrollViews.firstMatch.swipeUp(); if the Form has an accessibility
identifier, use app.forms["<identifier>"] or app.otherElements["<identifier>"]
to target it for deterministic swiping in TestAppUITests.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3d8b226 and 6af51ea.

📒 Files selected for processing (20)
  • .github/workflows/build-and-test.yml
  • Package.swift
  • Sources/SpeziStudy/Study Manager/StudyManager.swift
  • Sources/SpeziStudyDefinition/Study Definition Components/CustomActiveTaskComponent.swift
  • Sources/SpeziStudyDefinition/Study Definition Components/TimedWalkingTestComponent.swift
  • Sources/SpeziStudyDefinition/StudyBundle/StudyBundle+Write.swift
  • Sources/SpeziStudyDefinition/StudyBundle/StudyBundle.swift
  • Sources/SpeziStudyDefinition/StudyBundle/Validation/StudyDefinition+Validation.swift
  • Sources/SpeziStudyDefinition/StudyDefinition+Components.swift
  • Sources/SpeziStudyDefinition/StudyDefinition+Metadata.swift
  • Sources/SpeziStudyDefinition/StudyDefinition.swift
  • Tests/SpeziStudyTests/Resources/questionnaires/Invalid5+en-UK.json
  • Tests/SpeziStudyTests/Resources/questionnaires/Invalid6+en-UK.json
  • Tests/SpeziStudyTests/Resources/questionnaires/TestSurvey+en-UK.json
  • Tests/SpeziStudyTests/StudyBundleTests.swift
  • Tests/SpeziStudyTests/StudyBundleValidationTests.swift
  • Tests/SpeziStudyTests/StudyManagerTests.swift
  • Tests/UITests/TestApp/HomeTab.swift
  • Tests/UITests/TestApp/MockStudy.swift
  • Tests/UITests/TestAppUITests/TestAppUITests.swift

@phnagy phnagy requested a review from lukaskollmer March 3, 2026 20:32
Copy link
Member

@lukaskollmer lukaskollmer left a comment

Choose a reason for hiding this comment

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

very nice thank you @phnagy!

might wanna mention the addition of linux support in the PR title, so that it shows up in the changelog

Comment on lines +48 to +51
#if canImport(Darwin)
/// A component that prompts the participant to perform a custom Active Task.
case customActiveTask(CustomActiveTaskComponent)
#endif
Copy link
Member

Choose a reason for hiding this comment

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

why is this Darwin-only? wouldn't that break all studies that use active tasks, when running on linux?

Copy link
Member Author

Choose a reason for hiding this comment

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

The issue is that CustomActiveTaskComponent essentially is a composition of two LocalizedStringResources

Comment on lines +171 to +175
#if canImport(Darwin)
String(localized: component.test.displayTitle)
#else
nil
#endif
Copy link
Member

Choose a reason for hiding this comment

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

technically localized strings should actually be available on Linux as well, but i agree that it's ok to not support this for the time being. maybe add a note somewhere so that we can look into adding it at some point in the future

Copy link
Member Author

Choose a reason for hiding this comment

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

The issue is that LocalizedStringResource doesn't exist on Linux

"title": "test survey with non-matching question input bounds",
"resourceType": "Questionnaire",
"language": "en-UK",
"language": "en-GB",
Copy link
Member

Choose a reason for hiding this comment

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

what's your motivation for changing these?

Copy link
Member Author

Choose a reason for hiding this comment

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

On Apple platforms, Foundation translates the "UK" to "GB". On Linux, this doesn't happen, as UK is not a valid ISO 3166-1 region code. I am not sure if that needs to be considered somewhere else

@phnagy phnagy requested a review from lukaskollmer March 4, 2026 00:03
@phnagy
Copy link
Member Author

phnagy commented Mar 4, 2026

@lukaskollmer we should probably also update the schemaVersion right?

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