Modules: chart-realtime (commonMain, iosMain), root, .paul
- chart-realtime/build.gradle.kts: applyDefaultHierarchyTemplate() + XCFramework("ChartRealtime") over iosX64/iosArm64/iosSimulatorArm64, baseName CamelCase
- commonMain RealtimeChartState/CircularBuffer: switch to kotlin.concurrent.Volatile, add kotlin.jvm.JvmName import (OptionalExpectation)
- commonMain AxisRenderer: replace JVM-only String.format with multiplatform formatFixed/formatScientific/pow10 helpers
- iosMain Platform.ios.kt: NSDate() + timeIntervalSinceReferenceDate + 978_307_200s 1970-epoch offset (K/Native binding has no direct timeIntervalSince1970)
- gradle.properties: remove Linux JDK pin (rely on JAVA_HOME)
- .paul: phases plan, STATE+ROADMAP updates
Acceptance: A1 compile 3 iOS targets, A2 linkDebugFrameworkIosSimulatorArm64, A3 iosSimulatorArm64Test (33 tests, 0 failures), A4 assembleChartRealtimeXCFramework (ios-arm64 + ios-arm64_x86_64-simulator slices), A5 Android assembleRelease/publishToMavenLocal --dry-run.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
Project State
Project Reference
See: .paul/PROJECT.md (updated 2026-05-21)
Core value: Android devs plot 200Hz+ multi-signal sensor data without frame drops Current focus: v0.3.0 iOS build pipeline SHIPPED — 33 tests pass on iOS sim, XCFramework produced
Current Position
Milestone: v0.3.0-ios-build Phase: 6 of 6 — Complete Plan: .paul/phases/v0.3.0-ios-build-plan.md Status: Complete Last activity: 2026-05-21 — iOS pipeline: compile 3 targets, link debug framework, iosSimulatorArm64Test green (33 tests, 0 failures), XCFramework "ChartRealtime" output (ios-arm64 + ios-arm64_x86_64-simulator slices). Android non-regression confirmed.
Progress:
- v0.1.0 milestone: [██████████] 100% SHIPPED
- v0.2.0 milestone: [██████████] 100% SHIPPED
- v0.3.0 milestone: [██████████] 100% SHIPPED
Loop Position
PLAN ──▶ APPLY ──▶ UNIFY
✓ ✓ ✓ [v0.3.0 iOS build SHIPPED — v0.5.0-SNAPSHOT]
Accumulated Context
Decisions
| Decision | Phase | Impact |
|---|---|---|
| Canvas custom rendering (no lib) | Init | Core architecture |
| Render/data decoupled withFrameNanos | Init | RenderLoop design |
| TieredBuffer over flat ring | v0.2.0 | O(N×constant) memory, 20+ signals |
| MIN_MAX tier binning (not MEAN) | v0.2.0 | Composable, no artifacts at tier boundaries |
| MEAN removed from LodMode | v0.2.0 | Cleaner API, no synthetic values |
| LodDecimator as class (pre-alloc scratch) | v0.2.0 | Zero GC at render time |
| Sensor cap 200Hz (5_000μs) | v0.2.0 | Thermal/battery optimization |
| Package dev.dtrentin | v0.2.0 | Personal project, not company |
| iOS targets shipped | v0.3.0 | iosX64/iosArm64/iosSimulatorArm64 + Platform.ios.kt |
| iOS build pipeline green | v0.3.0 iOS | 33 tests pass on iOS sim, XCFramework "ChartRealtime" produced |
| timeIntervalSinceReferenceDate + epoch offset | v0.3.0 iOS | K/Native binding doesn't expose timeIntervalSince1970; use 978_307_200s constant |
| applyDefaultHierarchyTemplate() explicit | v0.3.0 iOS | iosMain/iosTest auto-wired across 3 iOS targets |
| Manual format helpers in AxisRenderer | v0.3.0 iOS | String.format JVM-only; private formatFixed/formatScientific/pow10 |
| kotlin.concurrent.Volatile + kotlin.jvm.JvmName imports | v0.3.0 iOS | Multiplatform replacements for JVM-default annotations |
Deferred Issues
| Issue | Origin | Effort | Revisit |
|---|---|---|---|
| v0.2.0 | S | ✓ v0.3.0 | |
| v0.2.0 | S | ✓ v0.3.0 | |
| Init | L | ✓ v0.3.0 | |
| v0.2.0 | M | ✓ v0.3.0 | |
| v0.2.0 | S | ✓ v0.3.0 | |
| v0.3.0 plan | M | ✓ v0.3.0 iOS | |
| Publish to Maven Central / GitHub Packages | v0.2.0 | M | v0.4.0 |
| iOS demo app (SwiftUI) | v0.3.0 iOS | L | v0.4.0 |
| CI workflow for iOS build (GitHub Actions) | v0.3.0 iOS | M | v0.4.0 |
| Compose compiler unstable warning on SignalConfig | v0.3.0 iOS | S | v0.4.0 |
Blockers/Concerns
None.
Session Continuity
Last session: 2026-05-21 (iOS build pipeline) Stopped at: v0.3.0 iOS shipped. All 5 acceptance items pass (A1-A5). 33 tests green on iOS sim. ChartRealtime.xcframework at chart-realtime/build/XCFrameworks/release/. Next action: Define v0.4.0 scope (Maven Central publish, iOS demo app, CI) Resume context:
- Library: chart-realtime, published dev.dtrentin:chart-realtime:0.5.0-SNAPSHOT to mavenLocal
- App: AndroidChartsApp consuming library, builds clean
- Remote: ssh://git@3nt-git.duckdns.org:222/davide.trentin/KMPCharts.git
- Package: dev.dtrentin.chart
- iOS: 3 targets compile, link, test (33 tests). XCFramework name
ChartRealtime, baseName CamelCase. - Local Mac setup: Xcode.app at /Applications/Xcode.app, iOS sim runtime installed (iPhone 17 family), local.properties points to ~/Library/Android/sdk, JDK 21 Temurin via JAVA_HOME.
STATE.md — Updated after every significant action