Wavesonics
bc035abea6
Move component funcs to default
...
iOS was hanging b/c they were running on main there
2026-05-20 22:01:54 -07:00
Wavesonics
900b49b3b7
Make mast head spacing uniform
2026-05-20 21:59:56 -07:00
Wavesonics
a3b077824a
Add iOS support via Compose Multiplatform
...
iOS now runs the same shared Compose UI as Android and Desktop. The
existing Decompose component graph (IosRoot, ProjectSelection,
ProjectRoot) is reused; the Swift app shrinks to an AppDelegate, a
Koin bootstrap, and a UIViewControllerRepresentable that hands off to
a Kotlin ComposeUIViewController. The SwiftUI starter under
/ios/ios/ui and /ios/ios/DecomposeHelpers is deleted.
Hammer.framework moves from :common to :composeUi so the framework
ships the Compose entry point; Xcode's Run Script invokes
:composeUi:embedAndSignAppleFrameworkForXcode. iosArm64 and
iosSimulatorArm64 targets are declared with libbacktrace source-info
so K/N crashes report file:line. 17 expects across composeUi get iOS
actuals (file pickers via filekit, image loading via Coil3,
LanguageUtil via NSLocale.preferredLanguages, etc).
The adaptive nav scaffolds — bottom bar at compact width, side nav
rail otherwise — are extracted from the Android activities into
shared ProjectSelectScaffold and ProjectRootScaffold in
composeUi/commonMain, along with their Modifier helpers and the
close-confirm dialogs. Android activities are now thin shells that
delegate to these; iOS calls the same scaffolds, so phone/tablet
layout is unified across all three platforms.
App icon and CFBundleDisplayName set so the home screen reads
"Hammer" with the brand logo instead of the blueprint placeholder.
2026-05-20 00:36:29 -07:00
Adam Brown
42f230694f
Add launch-time update notification with release-notes dialog
...
Lifts version check into VersionCheckRepository + GithubVersionCheckDataSource.
On launch, shows an update dialog when a newer release is available and the
tag hasn't been dismissed (tracked in GlobalSettings). Falls back to the
annotated tag message when the release body is empty. AboutApp's VersionCard
gains a button to open the same dialog on demand.
2026-05-19 23:29:39 -07:00
Adam Brown
3ec40b5885
Fix Microsoft Store submissions silently keeping the old package
...
POST /submissions clones the last published submission body, so the
applicationPackages array still pointed at Hammer-2.1.1.msix. We never
updated it, so every commit since 2.1.1 succeeded against an unchanged
package list and the Store stayed frozen. Also: fileUploadUrl wants a
ZIP, not a raw MSIX.
- Mark cloned packages PendingDelete, append a PendingUpload entry for
the new MSIX, PUT the body back before uploading.
- Upload a ZIP whose entry name matches the new fileName.
- Clear any stale pending submission first so retries can run.
- Poll /status after commit and throw on CommitFailed so failures stop
hiding in the run log.
2026-05-19 23:29:38 -07:00
Wavesonics
41387761a8
Add Mac App Store publishing via Fastlane (local + CI)
...
Wire up two Mac lanes (desktop_testflight, desktop_release) alongside the
existing Android setup, and a publish-mac-app-store job in the release
workflow so each new release uploads a sandboxed .pkg to TestFlight on a
macos-latest runner. The lane respects BUILD_NUMBER from env (CI sets it
to github.run_number) and falls back to TestFlight + 1 locally.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 22:06:15 -07:00
Wavesonics
cd70b28d26
Merge branch 'macos-release' into develop
2026-05-19 20:50:21 -07:00
Wavesonics
5c4da8909c
Add Mac App Store packaging for the desktop module
...
Pass -PmacOsAppStoreRelease=true -PbuildNumber=N to produce a sandboxed,
signed .pkg ready for TestFlight upload via Transporter / iTMSTransporter.
Apple Silicon only for v1; JBR runtime stays.
- Sandbox-friendly entitlements (network.client + user-selected files
for the app; JIT/unsigned-mem/disable-library-validation for the JVM).
- JNA libjnidispatch.jnilib is pre-extracted into desktop/resources/macos/
and located via -Djna.boot.library.path so JNA never tries to extract
to a temp dir at runtime (which would hang silently in the sandbox).
- com.apple.application-identifier / team-identifier baked into the app
signature so it matches the embedded provisioning profile.
- UrlLauncher drops the Runtime.exec("open") fallback in favor of the
Desktop API only.
- Projects-directory picker is hidden in App Store builds; the sandbox
container's ~/Documents is the only writable location for v1.
- unquarantineMacApp Gradle task strips com.apple.quarantine xattrs
before pkg packaging to avoid App Store validation errors.
- New helper: desktop/scripts/build-appstore.sh — pre-flight checks,
one-shot build, codesign + pkgutil signature verification.
Signing assets and API key live in desktop/{embedded,runtime}.provisionprofile
and desktop/secrets/ (both gitignored).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:46:07 -07:00
Adam Brown
f3b6703d4b
More survivable handling of IO failures in scene cleanup
2026-05-19 00:10:46 -07:00
Adam Brown
7ccba47b60
Fix NodeNotFound crash in scene metadata panel after scene removal
2026-05-19 00:10:46 -07:00
Wavesonics
d18bbaaaa0
Remove all around border from nav rail
2026-05-18 21:29:56 -07:00
Wavesonics
327b5322cb
Remove macos AppImage target format
2026-05-18 21:24:06 -07:00
Wavesonics
c8336b54af
Update gradle 9.5.0
2026-05-18 21:09:52 -07:00
Wavesonics
7664c1fe8d
Upgrade to Gradle and AGP 9
2026-05-18 18:48:39 -07:00
Adam Brown
25c9e71efd
Fix project stats word counts and chapter count ( #499 )
...
countWordsInScene counted whitespace separators instead of words, undercounting every non-empty scene by 1. wordsByChapter was keyed by chapter name, so chapters with duplicate names collapsed into a single entry, under-reporting the total chapter count.
Schema bumped to v6 to invalidate stale caches.
2026-05-17 23:15:37 -07:00
Adam Brown
1f4b83ca6f
Added timestamps to metadata panel
2026-05-17 23:04:08 -07:00
Adam Brown
bbfc27efa2
Track last-edited scene per project and surface in stats
...
Adds `created` and `lastEdited` timestamps to SceneMetadata, stamped
on every autosave tick in SceneEditorRepository.recordSceneActivity.
StatisticsService rolls them up into a new "Last Edited" tile on the
project home dashboard, and the Android widget reads the same field
from the stats cache.
The timestamps ride the sync wire on ApiProjectEntity.SceneEntity and
participate in EntityHasher.hashScene. On download, local values are
preserved when the server didn't ship them. No conflict resolution —
last write wins.
EntityHasher hash functions had their defaults removed so call sites
can't silently miss a newly added field; this caught a latent bug in
the second markForSynchronization hash call that was relying on
defaults for archived/confirmedReferences/dismissedReferences.
2026-05-17 22:57:10 -07:00
renovate[bot]
f02fc4d434
Update codecov/codecov-action action to v6 ( #495 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-17 20:11:09 -07:00
renovate[bot]
4349c3193c
Update nucleus to v1.15.5 ( #493 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-17 20:10:18 -07:00
Adam Brown
60b654c002
Upgrade gradle to version 9.5.1
2026-05-17 19:35:37 -07:00
Adam Brown
cdf19400c9
Fix scene id padding on unarchiveScene
2026-05-17 19:27:44 -07:00
Adam Brown
c014d9aaac
Fix initial stack configuration
2026-05-17 16:59:26 -07:00
Adam Brown
79d2b33cca
Encode scene/group names in v2 filename format
...
getSceneFileName still built `order-{rawName}-{id}` with the raw name,
so newly-allowed chars like `\` `/` `?` `*` `:` either split the path
(Windows treated `\` as a separator) or were rejected by the OS,
crashing scene creation. Switch it to the v2 `~`-delimited format with
encodeForFilename, matching SceneDatasource.buildSceneFileName.
2026-05-17 16:48:12 -07:00
Adam Brown
90ed8e0fd5
Switch desktop window chrome to Material3-themed DecoratedWindow and MaterialTitleBar
2026-05-17 14:54:46 -07:00
Adam Brown
3f9c497657
Add recent-projects launcher menus for Linux (D-Bus quicklist) and macOS (Dock menu), reaching parity with the Windows jump list. All three platforms are now unified behind a QuickShortcuts interface so callers don't care which OS they're on. Pulled the shared "top N projects by lastAccessed" pipeline up onto ProjectsRepository.getRecentProjects() (used by the desktop and Android shortcut managers), and replaced scattered os.name string-matching with a typed HostOs enum.
2026-05-17 14:40:56 -07:00
Adam Brown
eccda2d340
Better settings abbreviation in navigation strings
2026-05-17 13:47:30 -07:00
Adam Brown
95361e7761
Fix android build
2026-05-17 13:45:19 -07:00
Adam Brown
6762eb61e6
Add deep linking to Desktop!
...
You can now deep link to any project and even entity inside that project.
Added jumplist support for windows to deep link directly to a project
2026-05-17 13:35:40 -07:00
Adam Brown
146d7ec102
Extract more hardcoded strings
2026-05-17 12:09:44 -07:00
Adam Brown
26c6a484a3
Add a setting to control the initial project screen
2026-05-17 11:44:04 -07:00
Adam Brown
9493e8d6e5
dont use jewel
2026-05-17 11:34:13 -07:00
Adam Brown
f01f6f97e0
Redundant experimental
2026-05-17 11:00:46 -07:00
Adam Brown
35b0d7e937
Prepared for release: v3.0.3
2026-05-17 01:26:30 -07:00
Adam Brown
9ebcf795b2
Library updates
2026-05-17 01:23:05 -07:00
Adam Brown
241bfec73f
Library updates
2026-05-17 01:12:52 -07:00
Adam Brown
3ad728c19a
Reject duplicate scene IDs at tree-load time ( #492 )
...
Two scene files sharing one id crashed cleanupSceneOrder during
project open. validateScenePaths runs as part of loadSceneTree —
first file seen wins, later duplicates are refused and logged.
2026-05-17 01:10:09 -07:00
Adam Brown
4b3f657084
Add monochrome icon
2026-05-16 21:31:03 -07:00
renovate[bot]
f115c868ab
Update plugin ee.schimke.composeai.preview to v0.10.16 ( #488 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-16 20:50:15 -07:00
Adam Brown
6acd022c78
Unblock F-Droid builds while keeping JBR for desktop ( #490 )
...
When -Pfdroid=true (or FDROID_BUILD env var) is set:
- skip the foojay-resolver-convention plugin
- exclude :desktop from the build (its eager jbrLauncher.get()
needs JBR, which F-Droid can't provide)
2026-05-16 20:49:53 -07:00
Adam Brown
542b28dcfc
Only show discard when changes have been made on encyclopedia entry
2026-05-16 01:30:40 -07:00
Adam Brown
f022e31f93
Render markdown on encyclopedia cards
2026-05-16 01:26:43 -07:00
Adam Brown
1a6316aad9
Prepared for release: v3.0.2
2026-05-15 00:31:21 -07:00
Adam Brown
8a026f4da4
Authenticate our setup
...
This gives us more generous rate limites and should help with our flakey builds getting rate limited.
2026-05-15 00:29:18 -07:00
Adam Brown
e2c4b8ad73
More Microsoft store fixes
2026-05-14 23:04:34 -07:00
Adam Brown
18febe2e60
Prepared for release: v3.0.1
2026-05-14 21:54:12 -07:00
Adam Brown
aaaaa6f79f
Update libraries metadata
2026-05-14 21:47:43 -07:00
Adam Brown
2701c77523
New Crowdin updates ( #475 )
...
* New translations messages_en.properties (German)
* New translations strings_about_app.xml (German)
* New translations strings_account_settings.xml (German)
* New translations strings_drafts.xml (German)
* New translations strings_encyclopedia.xml (German)
* New translations strings_notes.xml (German)
* New translations strings_project_home.xml (German)
* New translations strings_projects_list.xml (German)
* New translations strings_timeline.xml (German)
* New translations strings.xml (German)
* New translations messages_en.properties (German)
* New translations strings_about_app.xml (French)
* New translations strings_about_app.xml (Spanish)
* New translations strings_about_app.xml (German)
* New translations strings_about_app.xml (Italian)
* New translations strings_about_app.xml (Ukrainian)
* New translations strings_about_app.xml (Chinese Simplified)
* New translations strings_about_app.xml (Portuguese, Brazilian)
* New translations strings_drafts.xml (German)
* New translations messages_en.properties (German)
* New translations strings_about_app.xml (French)
* New translations strings_about_app.xml (Spanish)
* New translations strings_about_app.xml (German)
* New translations strings_about_app.xml (Italian)
* New translations strings_about_app.xml (Ukrainian)
* New translations strings_about_app.xml (Chinese Simplified)
* New translations strings_about_app.xml (Portuguese, Brazilian)
* New translations strings_globalsearch.xml (French)
* New translations strings_globalsearch.xml (Spanish)
* New translations strings_globalsearch.xml (German)
* New translations strings_globalsearch.xml (Italian)
* New translations strings_globalsearch.xml (Ukrainian)
* New translations strings_globalsearch.xml (Chinese Simplified)
* New translations strings_globalsearch.xml (Portuguese, Brazilian)
* New translations strings_globalsearch.xml (French)
* New translations strings_globalsearch.xml (Spanish)
* New translations strings_globalsearch.xml (German)
* New translations strings_globalsearch.xml (Italian)
* New translations strings_globalsearch.xml (Ukrainian)
* New translations strings_globalsearch.xml (Chinese Simplified)
* New translations strings_globalsearch.xml (Portuguese, Brazilian)
* New translations strings_project_home.xml (French)
* New translations strings_project_home.xml (Spanish)
* New translations strings_project_home.xml (German)
* New translations strings_project_home.xml (Italian)
* New translations strings_project_home.xml (Ukrainian)
* New translations strings_project_home.xml (Chinese Simplified)
* New translations strings_project_home.xml (Portuguese, Brazilian)
* New translations strings_project_home.xml (French)
* New translations strings_project_home.xml (Spanish)
* New translations strings_project_home.xml (German)
* New translations strings_project_home.xml (Italian)
* New translations strings_project_home.xml (Ukrainian)
* New translations strings_project_home.xml (Chinese Simplified)
* New translations strings_project_home.xml (Portuguese, Brazilian)
* New translations strings_encyclopedia.xml (French)
* New translations strings_scene_editor.xml (French)
* New translations strings_sync.xml (French)
* New translations strings_encyclopedia.xml (Spanish)
* New translations strings_scene_editor.xml (Spanish)
* New translations strings_sync.xml (Spanish)
* New translations strings_encyclopedia.xml (German)
* New translations strings_scene_editor.xml (German)
* New translations strings_sync.xml (German)
* New translations strings_encyclopedia.xml (Italian)
* New translations strings_scene_editor.xml (Italian)
* New translations strings_sync.xml (Italian)
* New translations strings_encyclopedia.xml (Ukrainian)
* New translations strings_scene_editor.xml (Ukrainian)
* New translations strings_sync.xml (Ukrainian)
* New translations strings_encyclopedia.xml (Chinese Simplified)
* New translations strings_scene_editor.xml (Chinese Simplified)
* New translations strings_sync.xml (Chinese Simplified)
* New translations strings_encyclopedia.xml (Portuguese, Brazilian)
* New translations strings_scene_editor.xml (Portuguese, Brazilian)
* New translations strings_sync.xml (Portuguese, Brazilian)
* New translations strings_project_home.xml (French)
[ci skip]
* New translations strings_project_home.xml (Spanish)
[ci skip]
* New translations strings_project_home.xml (German)
[ci skip]
* New translations strings_project_home.xml (Italian)
[ci skip]
* New translations strings_project_home.xml (Ukrainian)
[ci skip]
* New translations strings_project_home.xml (Chinese Simplified)
[ci skip]
* New translations strings_project_home.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_sync.xml (French)
[ci skip]
* New translations strings_sync.xml (Spanish)
[ci skip]
* New translations strings_sync.xml (German)
[ci skip]
* New translations strings_sync.xml (Italian)
[ci skip]
* New translations strings_sync.xml (Ukrainian)
[ci skip]
* New translations strings_sync.xml (Chinese Simplified)
[ci skip]
* New translations strings_sync.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_encyclopedia.xml (French)
[ci skip]
* New translations strings_scene_editor.xml (French)
[ci skip]
* New translations strings_encyclopedia.xml (Spanish)
[ci skip]
* New translations strings_scene_editor.xml (Spanish)
[ci skip]
* New translations strings_encyclopedia.xml (German)
[ci skip]
* New translations strings_scene_editor.xml (German)
[ci skip]
* New translations strings_encyclopedia.xml (Italian)
[ci skip]
* New translations strings_scene_editor.xml (Italian)
[ci skip]
* New translations strings_encyclopedia.xml (Ukrainian)
[ci skip]
* New translations strings_scene_editor.xml (Ukrainian)
[ci skip]
* New translations strings_encyclopedia.xml (Chinese Simplified)
[ci skip]
* New translations strings_scene_editor.xml (Chinese Simplified)
[ci skip]
* New translations strings_encyclopedia.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_scene_editor.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_notes.xml (French)
[ci skip]
* New translations strings_project_navigation.xml (French)
[ci skip]
* New translations strings_scene_list.xml (French)
[ci skip]
* New translations strings_notes.xml (Spanish)
[ci skip]
* New translations strings_project_navigation.xml (Spanish)
[ci skip]
* New translations strings_scene_list.xml (Spanish)
[ci skip]
* New translations strings_notes.xml (German)
[ci skip]
* New translations strings_project_navigation.xml (German)
[ci skip]
* New translations strings_scene_list.xml (German)
[ci skip]
* New translations strings_notes.xml (Italian)
[ci skip]
* New translations strings_project_navigation.xml (Italian)
[ci skip]
* New translations strings_scene_list.xml (Italian)
[ci skip]
* New translations strings_notes.xml (Ukrainian)
[ci skip]
* New translations strings_project_navigation.xml (Ukrainian)
[ci skip]
* New translations strings_scene_list.xml (Ukrainian)
[ci skip]
* New translations strings_notes.xml (Chinese Simplified)
[ci skip]
* New translations strings_project_navigation.xml (Chinese Simplified)
[ci skip]
* New translations strings_scene_list.xml (Chinese Simplified)
[ci skip]
* New translations strings_notes.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_project_navigation.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_scene_list.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_globalsearch.xml (French)
[ci skip]
* New translations strings_globalsearch.xml (Spanish)
[ci skip]
* New translations strings_globalsearch.xml (German)
[ci skip]
* New translations strings_globalsearch.xml (Italian)
[ci skip]
* New translations strings_globalsearch.xml (Ukrainian)
[ci skip]
* New translations strings_globalsearch.xml (Chinese Simplified)
[ci skip]
* New translations strings_globalsearch.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_sync.xml (French)
[ci skip]
* New translations strings_sync.xml (Spanish)
[ci skip]
* New translations strings_sync.xml (German)
[ci skip]
* New translations strings_sync.xml (Italian)
[ci skip]
* New translations strings_sync.xml (Ukrainian)
[ci skip]
* New translations strings_sync.xml (Chinese Simplified)
[ci skip]
* New translations strings_sync.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_notes.xml (French)
[ci skip]
* New translations strings_scene_list.xml (French)
[ci skip]
* New translations strings_notes.xml (Spanish)
[ci skip]
* New translations strings_scene_list.xml (Spanish)
[ci skip]
* New translations strings_notes.xml (German)
[ci skip]
* New translations strings_scene_list.xml (German)
[ci skip]
* New translations strings_notes.xml (Italian)
[ci skip]
* New translations strings_scene_list.xml (Italian)
[ci skip]
* New translations strings_notes.xml (Ukrainian)
[ci skip]
* New translations strings_scene_list.xml (Ukrainian)
[ci skip]
* New translations strings_notes.xml (Chinese Simplified)
[ci skip]
* New translations strings_scene_list.xml (Chinese Simplified)
[ci skip]
* New translations strings_notes.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_scene_list.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_account_settings.xml (French)
[ci skip]
* New translations strings_timeline.xml (French)
[ci skip]
* New translations strings_account_settings.xml (Spanish)
[ci skip]
* New translations strings_timeline.xml (Spanish)
[ci skip]
* New translations strings_account_settings.xml (German)
[ci skip]
* New translations strings_timeline.xml (German)
[ci skip]
* New translations strings_account_settings.xml (Italian)
[ci skip]
* New translations strings_timeline.xml (Italian)
[ci skip]
* New translations strings_account_settings.xml (Ukrainian)
[ci skip]
* New translations strings_timeline.xml (Ukrainian)
[ci skip]
* New translations strings_account_settings.xml (Chinese Simplified)
[ci skip]
* New translations strings_timeline.xml (Chinese Simplified)
[ci skip]
* New translations strings_account_settings.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_timeline.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_account_settings.xml (German)
[ci skip]
* New translations strings_account_settings.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_sync.xml (French)
[ci skip]
* New translations strings_sync.xml (Spanish)
[ci skip]
* New translations strings_sync.xml (German)
[ci skip]
* New translations strings_sync.xml (Italian)
[ci skip]
* New translations strings_sync.xml (Ukrainian)
[ci skip]
* New translations strings_sync.xml (Chinese Simplified)
[ci skip]
* New translations strings_sync.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_projects_list.xml (French)
[ci skip]
* New translations strings_projects_list.xml (Spanish)
[ci skip]
* New translations strings_projects_list.xml (German)
[ci skip]
* New translations strings_projects_list.xml (Italian)
[ci skip]
* New translations strings_projects_list.xml (Ukrainian)
[ci skip]
* New translations strings_projects_list.xml (Chinese Simplified)
[ci skip]
* New translations strings_projects_list.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_globalsearch.xml (French)
[ci skip]
* New translations strings_globalsearch.xml (Spanish)
[ci skip]
* New translations strings_globalsearch.xml (German)
[ci skip]
* New translations strings_project_home.xml (French)
[ci skip]
* New translations strings_project_home.xml (Spanish)
[ci skip]
* New translations strings_project_home.xml (German)
[ci skip]
* New translations strings_project_home.xml (Italian)
[ci skip]
* New translations strings_scene_editor.xml (French)
[ci skip]
* New translations strings_scene_editor.xml (Spanish)
[ci skip]
* New translations strings_scene_editor.xml (German)
[ci skip]
* New translations strings_scene_editor.xml (Italian)
[ci skip]
* New translations strings_project_navigation.xml (French)
[ci skip]
* New translations strings_project_navigation.xml (Spanish)
[ci skip]
* New translations strings_project_navigation.xml (German)
[ci skip]
* New translations strings_project_navigation.xml (Italian)
[ci skip]
* New translations strings.xml (French)
[ci skip]
* New translations strings_project_select_navigation.xml (French)
[ci skip]
* New translations strings.xml (French)
[ci skip]
* New translations strings.xml (Spanish)
[ci skip]
* New translations strings_project_select_navigation.xml (Spanish)
[ci skip]
* New translations strings.xml (Spanish)
[ci skip]
* New translations strings.xml (German)
[ci skip]
* New translations strings_project_select_navigation.xml (German)
[ci skip]
* New translations strings.xml (German)
[ci skip]
* New translations strings.xml (Italian)
[ci skip]
* New translations strings_project_select_navigation.xml (Italian)
[ci skip]
* New translations strings.xml (Italian)
[ci skip]
* New translations strings_globalsearch.xml (Italian)
[ci skip]
* New translations strings_globalsearch.xml (Ukrainian)
[ci skip]
* New translations strings_globalsearch.xml (Chinese Simplified)
[ci skip]
* New translations strings_globalsearch.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_project_home.xml (Ukrainian)
[ci skip]
* New translations strings_project_home.xml (Chinese Simplified)
[ci skip]
* New translations strings_project_home.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_scene_editor.xml (Ukrainian)
[ci skip]
* New translations strings_scene_editor.xml (Chinese Simplified)
[ci skip]
* New translations strings_scene_editor.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_project_navigation.xml (Ukrainian)
[ci skip]
* New translations strings_project_navigation.xml (Chinese Simplified)
[ci skip]
* New translations strings_project_navigation.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings.xml (Ukrainian)
[ci skip]
* New translations strings_project_select_navigation.xml (Ukrainian)
[ci skip]
* New translations strings.xml (Ukrainian)
[ci skip]
* New translations strings.xml (Chinese Simplified)
[ci skip]
* New translations strings_project_select_navigation.xml (Chinese Simplified)
[ci skip]
* New translations strings.xml (Chinese Simplified)
[ci skip]
* New translations strings.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings_project_select_navigation.xml (Portuguese, Brazilian)
[ci skip]
* New translations strings.xml (Portuguese, Brazilian)
[ci skip]
2026-05-14 21:28:32 -07:00
Adam Brown
1e8d65c014
Do use use cases
2026-05-14 21:26:19 -07:00
Adam Brown
fdd4350bd1
Update gradle wrapper URL to 9.5.1
2026-05-14 21:22:05 -07:00
Adam Brown
82f4deaba7
Document some patterns in the codebase
2026-05-14 21:21:26 -07:00