From 8711bb102d4f7db5eba51309e7f54b310c50b255 Mon Sep 17 00:00:00 2001 From: Emil Rossing Date: Mon, 3 Aug 2026 14:42:13 +0200 Subject: [PATCH] chore: release prep for v1.2.1 --- desktop/package.json | 2 +- desktop/src-tauri/Cargo.lock | 2 +- desktop/src-tauri/Cargo.toml | 2 +- desktop/src-tauri/tauri.conf.json | 2 +- desktop/src/lib/synkConstants.ts | 2 +- formulus-formplayer/AGENTS.md | 4 ++++ formulus-formplayer/README.md | 1 + formulus/android/app/build.gradle | 4 ++-- formulus/ios/Formulus.xcodeproj/project.pbxproj | 8 ++++---- formulus/package-lock.json | 4 ++-- formulus/package.json | 2 +- synkronus-cli/internal/cmd/version.go | 2 +- synkronus-cli/versioninfo.json | 8 ++++---- synkronus-portal/package.json | 2 +- 14 files changed, 25 insertions(+), 20 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index cd523288f..4b05504b8 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,7 +1,7 @@ { "name": "ode-desktop", "private": true, - "version": "1.2.0", + "version": "1.2.1", "packageManager": "pnpm@10.33.2", "type": "module", "scripts": { diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index ba6862051..d089e5997 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -2600,7 +2600,7 @@ dependencies = [ [[package]] name = "odedesktop" -version = "1.2.0" +version = "1.2.1" dependencies = [ "chrono", "futures-util", diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index b78a4c426..e622ea386 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "odedesktop" -version = "1.2.0" +version = "1.2.1" description = "ODE Desktop" authors = ["OpenDataEnsemble.org"] edition = "2024" diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index a82c8b562..6675ea986 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "ODE Desktop", - "version": "1.2.0", + "version": "1.2.1", "identifier": "org.opendataensemble.custodian", "build": { "beforeDevCommand": "pnpm dev", diff --git a/desktop/src/lib/synkConstants.ts b/desktop/src/lib/synkConstants.ts index 28d2063b5..e29860d88 100644 --- a/desktop/src/lib/synkConstants.ts +++ b/desktop/src/lib/synkConstants.ts @@ -1,2 +1,2 @@ /** Must match Synkronus OpenAPI `x-ode-version` (semver). */ -export const SYNKRONUS_CLIENT_VERSION = '1.2.0'; +export const SYNKRONUS_CLIENT_VERSION = '1.2.1'; diff --git a/formulus-formplayer/AGENTS.md b/formulus-formplayer/AGENTS.md index f0b3896e8..aa163c3aa 100644 --- a/formulus-formplayer/AGENTS.md +++ b/formulus-formplayer/AGENTS.md @@ -51,6 +51,10 @@ This file gives AI assistants and developers enough context to work effectively | `src/mocks/` | `webview-mock.ts` and `DevTestbed` for local dev without RN. | | `scripts/` | `sync-interface.js`, `copy-to-rn.js`, `clean-rn-assets.js`. | +## Clear-on-hide (`SHOW` / `HIDE`) + +When a Control becomes not visible (`visible: false` from JSON Forms rules), Formplayer clears that path via `src/jsonforms/useClearOnHide.ts` (ODK-style `relevant`). Authoring implication: **do not** put visibility rules on fields that must survive (especially custom-app `defaultData` stamps). Keep those properties in the schema only; display with `headerFields` or a separate computed/`lbl_*` Control. Docs: [form-design — Conditional Logic](https://opendataensemble.org/docs/guides/form-design#conditional-logic-in-ode-forms). + ## Key technical constraints 1. **WebView environment**: No real `window.ReactNativeWebView` in browser dev; use the mock. Assume **file://** and **single JS bundle** when changing Vite/build. diff --git a/formulus-formplayer/README.md b/formulus-formplayer/README.md index 11b3b38e2..01089b790 100644 --- a/formulus-formplayer/README.md +++ b/formulus-formplayer/README.md @@ -84,6 +84,7 @@ The React Native host passes `FormInitData` into the WebView (including `params` - **Reserved top-level `params` keys** (not treated as observation fields): `defaultData`, `theme`, `darkMode`, `themeColors`. If the host adds more non-data parameters later, the formplayer’s `FORMPARAMS_NON_DATA_KEYS` in `src/utils/formObservationData.ts` should be extended in lockstep. - **Legacy prefills**: If `defaultData` is missing, the formplayer copies other top-level `params` keys except the reserved keys above. - **Sanitization**: When the schema defines non-empty root `properties`, loaded and submitted data are filtered to those keys plus `locale` (so older polluted rows are cleaned on edit/save). Schemas with missing or empty root `properties` pass data through unchanged. +- **Clear-on-hide**: A Control with a `SHOW`/`HIDE` rule that starts (or becomes) hidden has its value **deleted**. Injected stamps must stay schema + `defaultData` only—never a hidden Control on the real field. Prefer `headerFields` or a computed/`lbl_*` display proxy. See [form-design](https://opendataensemble.org/docs/guides/form-design#conditional-logic-in-ode-forms). ## Custom validators that mutate data diff --git a/formulus/android/app/build.gradle b/formulus/android/app/build.gradle index f90bf51b0..989202ff8 100644 --- a/formulus/android/app/build.gradle +++ b/formulus/android/app/build.gradle @@ -103,8 +103,8 @@ android { applicationId = "org.opendataensemble.formulus" minSdk = rootProject.ext.minSdkVersion targetSdk = rootProject.ext.targetSdkVersion - versionCode = 24 - versionName = "1.2.0" + versionCode = 25 + versionName = "1.2.1" buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", (findProperty("newArchEnabled") ?: "false").toString() diff --git a/formulus/ios/Formulus.xcodeproj/project.pbxproj b/formulus/ios/Formulus.xcodeproj/project.pbxproj index 4cf88c521..8d0561775 100644 --- a/formulus/ios/Formulus.xcodeproj/project.pbxproj +++ b/formulus/ios/Formulus.xcodeproj/project.pbxproj @@ -295,7 +295,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 24; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = ZZ9482ZVMJ; ENABLE_BITCODE = NO; INFOPLIST_FILE = Formulus/Info.plist; @@ -304,7 +304,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.2.1; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -329,7 +329,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 24; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = ZZ9482ZVMJ; INFOPLIST_FILE = Formulus/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; @@ -337,7 +337,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.2.1; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", diff --git a/formulus/package-lock.json b/formulus/package-lock.json index b55ef506a..1c006ec9b 100644 --- a/formulus/package-lock.json +++ b/formulus/package-lock.json @@ -1,12 +1,12 @@ { "name": "formulus-app", - "version": "1.2.0", + "version": "1.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "formulus-app", - "version": "1.2.0", + "version": "1.2.1", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/formulus/package.json b/formulus/package.json index c9e7aeb4c..cf2bc6011 100644 --- a/formulus/package.json +++ b/formulus/package.json @@ -1,6 +1,6 @@ { "name": "formulus-app", - "version": "1.2.0", + "version": "1.2.1", "packageManager": "pnpm@10.33.2", "type": "module", "private": true, diff --git a/synkronus-cli/internal/cmd/version.go b/synkronus-cli/internal/cmd/version.go index a0f4f5b7e..c8987a3f0 100644 --- a/synkronus-cli/internal/cmd/version.go +++ b/synkronus-cli/internal/cmd/version.go @@ -11,7 +11,7 @@ import ( var ( // Version is the CLI version, set during build - Version = "1.2.0" + Version = "1.2.1" // BuildDate is the date when the CLI was built BuildDate = "unknown" // CommitHash is the git commit hash diff --git a/synkronus-cli/versioninfo.json b/synkronus-cli/versioninfo.json index c76b15b03..997ae840d 100644 --- a/synkronus-cli/versioninfo.json +++ b/synkronus-cli/versioninfo.json @@ -3,13 +3,13 @@ "FileVersion": { "Major": 1, "Minor": 2, - "Patch": 0, + "Patch": 1, "Build": 0 }, "ProductVersion": { "Major": 1, "Minor": 2, - "Patch": 0, + "Patch": 1, "Build": 0 }, "FileFlagsMask": "3f", @@ -22,14 +22,14 @@ "Comments": "Synkronus CLI Tool", "CompanyName": "OpenDataEnsemble", "FileDescription": "Synkronus CLI - A command-line interface for the Synkronus API", - "FileVersion": "1.2.0.0", + "FileVersion": "1.2.1.0", "InternalName": "synk", "LegalCopyright": "© 2025 OpenDataEnsemble", "LegalTrademarks": "", "OriginalFilename": "synk.exe", "PrivateBuild": "", "ProductName": "Synkronus CLI", - "ProductVersion": "1.2.0.0", + "ProductVersion": "1.2.1.0", "SpecialBuild": "" }, "VarFileInfo": { diff --git a/synkronus-portal/package.json b/synkronus-portal/package.json index 289336de9..9a7a58110 100644 --- a/synkronus-portal/package.json +++ b/synkronus-portal/package.json @@ -1,7 +1,7 @@ { "name": "synkronus-portal", "private": true, - "version": "1.2.0", + "version": "1.2.1", "packageManager": "pnpm@10.33.2", "license": "MIT", "type": "module",