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>
83 lines
4.1 KiB
Markdown
83 lines
4.1 KiB
Markdown
# 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 |
|
||
|-------|--------|--------|---------|
|
||
| ~~Dirty flag render (skip frame if no new data)~~ | v0.2.0 | S | ✓ v0.3.0 |
|
||
| ~~targetFps=30 default~~ | v0.2.0 | S | ✓ v0.3.0 |
|
||
| ~~iOS expect/actual beyond currentTimeMs~~ | Init | L | ✓ v0.3.0 |
|
||
| ~~KDoc on public API surface~~ | v0.2.0 | M | ✓ v0.3.0 |
|
||
| ~~README with integration example~~ | v0.2.0 | S | ✓ v0.3.0 |
|
||
| ~~iOS build/test pipeline (compile + iosTest + XCFramework)~~ | 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*
|