Repository navigation
Conversation
|
@kavemang The category alignment is right, and I verified it against the Swift source rather than the description: One blocking thing, and it is not visible from your branch. Rebased onto current The nested Your 17/17 is not wrong, it is just older than the gate. Your base predates #2582, which an hour ago moved that suite onto the unfiltered leg precisely because a change can move the declaration graph without The fix I would suggest is not the obvious one. Refreshing the derived snapshots and disposing the new function as one-sided debt would work, but it records debt that does not exist. Swift already has its own nested Reciprocal claims on the two nested functions should pair them instead, leaving Two notes that are not blocking. The doc still says "Byte-identical to Swift Your paragraph on existing data is the right call and I want to say so explicitly: naming that stored rows keep their old keys, that the original name is not stored so no automatic migration is possible, and that a reimport can therefore leave older readings under the former key, is exactly what a reviewer needs in order to weigh this. It does mean an affected marker's history can split across two keys, which is a real user-visible consequence of a correct fix rather than a reason not to make it. Sort the authority and I will take it. |
4662757 to
de30287
Compare
|
Rebased onto current main as #2628, with both of your commits unchanged and still authored by you. The conflict was The change itself needed no edits. Android keeping
|
|
Thanks @kavemang. The parity analysis here is right and the oracle is the kind I trust: Swift's One premise in the description is wrong, though, and it changes the conclusion. A lazy migration is availableThe description rules out an automatic migration because "the original marker name is not stored with a On import of a marker named Why it is worth doing rather than accepting the strandingThe affected spelling is not exotic. Worth noting the divergence already bites across platforms in the same way: an Android row under the underscored key and an Apple row under the Also neededThe branch now conflicts with main in The honest limitation note in the Kotlin doc comment, that NFC-composable names agree while uncomposed marks may still differ between Swift grapheme clusters and Kotlin code points, is the right thing to have written down. I would keep it. |
What this PR does
Android custom lab-marker keys retain Unicode letter/other numbers and supplementary characters, matching Swift for NFC-composable names. A marker such as
eGFR mL/min/1.73m²now uses the same canonical key on both platforms.Reimport also repairs affected history while the original marker name is available. Both generic CSV and WHOOP biomarker exports derive the exact historical Android UTF-16 key alongside the current key. For each device, the importer moves legacy readings only when the current target has no readings on any day/source. Empty keys, conflicting targets, ambiguous aliases in the file, and an old key explicitly imported as another current marker are left alone.
The move changes only
markerKey; the subsequent normal upsert applies the imported readings. Reading IDs, dates, source, values, units, notes and reference text in moved history survive. Repair reimports preserve natural-key IDs on Android as Swift already does. History moves, incoming readings and the old/new daily projections share one transaction, so failure rolls everything back and stale old-key projections disappear. No schema migration or guessed reverse mapping is involved.NFC-composable names agree across platforms. Swift grapheme clusters and Kotlin code points can still differ for uncomposed combining marks; that existing limitation remains documented.
Verification
All 18 expected CI checks passed at
842d4fcad1179f25c04414323f427f00d9b5080f: native macOS/iOS app builds, macOS StrandTests, Android APK/full unit suite, Swift packages/tools, parity governance, Tools Python, i18n and source hygiene. The final exact-head check API reports the same 18-check roster with zero non-success results, and the PR head was re-read to confirm it matches. Current main was integrated with a normal merge; the sole generated-map conflict was resolved through successful guarded regeneration.XlsxSheet.swiftbuild gap; the file was restored and the workaround is not committed.LabBookView.importMarkersCsv.Related issues
Refs #2351