Releases: webarkit/WebARKitLib-rs
Releases · webarkit/WebARKitLib-rs
Release list
v0.8.0
Milestone — Pure-Rust completeness, validation & polish
⚙️ Miscellaneous Tasks
- (ar2) Allow too_many_arguments on SIMD get_similarity variants (#180)
- Clear strict clippy lints in examples/tests/benches (#180)
- (codecov) Exclude examples/benches from coverage targets (#180)
- (coverage) Fix tarpaulin tests/ glob and mirror in codecov (#180)
- Tighten clippy gate to --all-targets --all-features (#180)
- Relocate strict clippy gate to kpm-build (ubuntu) job (#180)
- (miri) Add Miri UB validation for pure-Rust code paths (#182)
- (miri) Drop -Zmiri-strict-provenance (trips on third-party deps) (#182)
- (miri) Switch to Tree Borrows to avoid crossbeam-epoch false positive (#182)
- (miri) Enable -Zmiri-disable-isolation for tempfile-using tests (#182)
- (miri) Enable -Zmiri-ignore-leaks for rayon thread pool (#194)
- (miri) Promote to required gate, split workflow, add README badge (#182)
- (miri) Skip docs-only changes via paths-ignore + same-name shim
- (benchmarks) Harden against flaky external C-library downloads (#204)
⚡ Performance
- (ci) Scope Miri job to unsafe boundaries via cfg_attr(miri, ignore) (#194)
- (ci) Annotate remaining real-image tests (#194 follow-up)
- (kpm) Gaussian scale-space pyramid — benchmark + rayon parallelization (#209)
- (kpm) Box-filter Pyramid downsample — criterion benchmark + SIMD (#211)
🐛 Bug Fixes
- (core) Clean up trivial clippy lints under --all-targets --all-features (#180)
- (kpm) Tighten dual-mode FFI extern cfg to match caller cfg (#180)
- (kpm) Replace unaligned transmute in hamming_distance_96 (#192)
- (ci) Disable cargo-bin cache on kpm-build to stop stale rustup-init shim (#134)
💼 Other
- (wasm) Make cc/bindgen optional, fix wasm dead-code (#161 goal 1)
📚 Documentation
- (benches) Refresh BENCHMARKS.md for criterion 0.8
- (agents) Codify #180 clippy conventions and un-ignore .agents/
- (kpm) Mark box-filter Pyramid as kept-but-unused reference (#203)
- (wasm) Note .fset3 / KPM detection in the NFT demo description (#161)
- Update README + ARCHITECTURE for the v0.8.0 milestone
🕸️ WebAssembly & Emscripten
- (wasm) Wire console logger + clean SIMD wasm build; add .fset3 asset (#161 goals 2,3)
- (wasm) KPM detection binding + browser NFT demo (#161 goal 4)
🚀 Features
- (kpm) Facade-parity convenience accessors on VisualDatabase + FeatureStore slices (#148)
- (example) Nft_marker_gen .fset3 via RustFreakMatcher — drop ffi-backend (#179)
🚜 Refactor
- (ar) Convert Default::default() + field reassign to struct-init (#180)
- (kpm) Factor VisualDatabase::query matching loop + add query_from_keyframe (#147) (#217)
🧪 Testing
- (core) Add unit tests for relocated math/pattern helpers (#180)
- (homography) Widen cauchy_cost tolerance to 1e-5 for Miri (#194)
- (kpm) Raise M9 coverage — exclude examples + edge tests (#177) (#218)
- (ci) Verify ffi-backend tests + example link on macOS (#119)
## [0.7.0] - 2026-06-05
Milestone 9 — VisualDatabase & pure Rust backend
⚙️ Miscellaneous Tasks
- (examples) Dump db_id pyramid in simple_nft_dual to aid #160 triage
- (corner-error) Wire the absolute_corner_error gate into kpm-build (#166)
- (submodule) Bump WebARKitLib for std::map matcher-determinism fix (refs #170)
- (submodule) Retarget WebARKitLib pin to post-#39 merged master SHA (#170)
- (bridge) Bump jsartoolkit-nft to 1.10.0 + sharp to 0.34.5 + regen sidecar + widen POSE_ROT_TOL (#170)
- (examples) Convert simple_nft to arlog macros (PR 4/4 for #90)
🐛 Bug Fixes
- (test) Regenerate kpm_regression baseline and close CI gap (#155)
- (test) Restore Linux baseline + gate test_full_pipeline_pose to Linux
- (tests) Adapt corner-error gate to cross-platform variance (drop pinball-demo, widen epsilon to 2.0 px) (#166)
- (kpm) Use BTreeMap for Hough vote tally and VisualDatabase keyframes to remove Rust-side matcher nondeterminism (#170)
📚 Documentation
- (kpm) Add end-to-end pose comparison to M9-2 design doc §10
- Switch regen capture recipe from arlog_e! to arlog_i! (#155)
- (examples) Clarify simple_nft_dual.rs reports homography-level comparison (#157)
- (tests) Add README for annotated_frames fixtures (#166)
- (readme) Mark M9 (#139) complete, refresh roadmap + nft_marker_gen
🚀 Features
- (kpm) Port VisualDatabase to Rust (M9-1, #140)
- (kpm) Move BHC feature index from FeatureMatcher onto Keyframe (#146)
- (kpm) Port HoughSimilarityVoting::autoAdjustXYNumBins (#150)
- (kpm) Implement RustFreakMatcher and DualFreakMatcher (M9-2, #141)
- (examples) Add simple_nft_dual.rs with DualFreakMatcher and per-frame divergence reporting (#157)
- (tools) Add annotate_corners HTML tool for absolute corner-error fixtures (#166)
- (tools) Per-corner edit + cursor-centered wheel zoom in annotate_corners (#166)
- (examples) Save C++ and Rust marker-outline PNGs in simple_nft_dual to visualize divergence
- (tests) Add cross-stack parity gate vs jsartoolkitNFT-Node (jsartoolkitNFT#584 Track 2, refs #170, #166 Track B)
- (kpm) Remove C++ FFI as default — pure Rust FreakMatcher complete (#142)
- (kpm) M9 — pure Rust KPM/NFT pipeline complete (#176)
🧪 Testing
- (kpm) Redefine M9 parity gate as corner reprojection (#152)
- (fixtures) Add annotated corner fixtures for the absolute corner-error gate (#166)
- (fixtures) Set annotator to kalwalt in the 5 annotated corner JSONs (#166)
- (kpm) Add absolute corner-error regression gate against annotated ground truth (#166)
- (fixtures) Replace blurry seq fixtures with screen-captured shots; drop nondeterministic frames (#166)
- (kpm) Add temporary REGEN block to capture post-fix EXPECTED_FULL_POSE on Linux
- (kpm) Regenerate test_full_pipeline_pose baseline against post-fix Linux values; drop REGEN block
- (corner-error) Regen baseline post-fix on Linux + widen epsilon to 3.5 px (residual BHC variance) (#170)
## [0.6.1] - 2026-05-24
🐛 Bug Fixes
- (ci) Remove invalid --ignore-timeouts flag from tarpaulin config
- (ci) Add CODECOV_TOKEN to codecov upload step
🚀 Features
- Add Tarpaulin-based code coverage report
v0.7.0
Milestone 9 — VisualDatabase & pure Rust backend
⚙️ Miscellaneous Tasks
- (examples) Dump db_id pyramid in simple_nft_dual to aid #160 triage
- (corner-error) Wire the absolute_corner_error gate into kpm-build (#166)
- (submodule) Bump WebARKitLib for std::map matcher-determinism fix (refs #170)
- (submodule) Retarget WebARKitLib pin to post-#39 merged master SHA (#170)
- (bridge) Bump jsartoolkit-nft to 1.10.0 + sharp to 0.34.5 + regen sidecar + widen POSE_ROT_TOL (#170)
- (examples) Convert simple_nft to arlog macros (PR 4/4 for #90)
🐛 Bug Fixes
- (test) Regenerate kpm_regression baseline and close CI gap (#155)
- (test) Restore Linux baseline + gate test_full_pipeline_pose to Linux
- (tests) Adapt corner-error gate to cross-platform variance (drop pinball-demo, widen epsilon to 2.0 px) (#166)
- (kpm) Use BTreeMap for Hough vote tally and VisualDatabase keyframes to remove Rust-side matcher nondeterminism (#170)
📚 Documentation
- (kpm) Add end-to-end pose comparison to M9-2 design doc §10
- Switch regen capture recipe from arlog_e! to arlog_i! (#155)
- (examples) Clarify simple_nft_dual.rs reports homography-level comparison (#157)
- (tests) Add README for annotated_frames fixtures (#166)
- (readme) Mark M9 (#139) complete, refresh roadmap + nft_marker_gen
🚀 Features
- (kpm) Port VisualDatabase to Rust (M9-1, #140)
- (kpm) Move BHC feature index from FeatureMatcher onto Keyframe (#146)
- (kpm) Port HoughSimilarityVoting::autoAdjustXYNumBins (#150)
- (kpm) Implement RustFreakMatcher and DualFreakMatcher (M9-2, #141)
- (examples) Add simple_nft_dual.rs with DualFreakMatcher and per-frame divergence reporting (#157)
- (tools) Add annotate_corners HTML tool for absolute corner-error fixtures (#166)
- (tools) Per-corner edit + cursor-centered wheel zoom in annotate_corners (#166)
- (examples) Save C++ and Rust marker-outline PNGs in simple_nft_dual to visualize divergence
- (tests) Add cross-stack parity gate vs jsartoolkitNFT-Node (jsartoolkitNFT#584 Track 2, refs #170, #166 Track B)
- (kpm) Remove C++ FFI as default — pure Rust FreakMatcher complete (#142)
- (kpm) M9 — pure Rust KPM/NFT pipeline complete (#176)
🧪 Testing
- (kpm) Redefine M9 parity gate as corner reprojection (#152)
- (fixtures) Add annotated corner fixtures for the absolute corner-error gate (#166)
- (fixtures) Set annotator to kalwalt in the 5 annotated corner JSONs (#166)
- (kpm) Add absolute corner-error regression gate against annotated ground truth (#166)
- (fixtures) Replace blurry seq fixtures with screen-captured shots; drop nondeterministic frames (#166)
- (kpm) Add temporary REGEN block to capture post-fix EXPECTED_FULL_POSE on Linux
- (kpm) Regenerate test_full_pipeline_pose baseline against post-fix Linux values; drop REGEN block
- (corner-error) Regen baseline post-fix on Linux + widen epsilon to 3.5 px (residual BHC variance) (#170)
v0.6.1
🐛 Bug Fixes
- (ci) Remove invalid --ignore-timeouts flag from tarpaulin config
- (ci) Add CODECOV_TOKEN to codecov upload step
🚀 Features
- Add Tarpaulin-based code coverage report
v0.6.0
Milestone 8 — FREAK descriptor & DoG detector
⚙️ Miscellaneous Tasks
🐛 Bug Fixes
- (kpm) Relax dual-mode Gaussian-pyramid test to <= 1 ULP tolerance
- (kpm) Disable FP contraction in C++ build to restore cross-platform parity
- (kpm) Use full 15-digit C++ literals for orientation smoothing kernel
- (kpm) Silence clippy::excessive_precision on SMOOTH_KERNEL
📚 Documentation
- Add §3.5 documenting bilinear interpolation formula equivalence
- Add §3.4 documenting the NONMAX_CHECK macro replacement
- Update README and ARCHITECTURE with M8 milestone details
🚀 Features
- (kpm) Port BoxFilterPyramid8u to Rust (M8 step 1)
- (kpm) Port interpolate.h + BinomialPyramid32f to Rust (M8 step 2)
- (kpm) Port DoG detector + OrientationAssignment to Rust (M8 step 3)
- (kpm) Port FREAK descriptor + Keyframe to Rust (M8 step 4)
🧪 Testing
- (kpm) Add dual-mode test for DoG detector with find_orientation=true
v0.5.1
⚙️ Miscellaneous Tasks
- Convert generators to arlog_*! macros (PR 3/4 for #90)
🎨 Styling
- Fix rustfmt import order in nft_marker_gen.rs
🐛 Bug Fixes
- (examples) Use arlog_rel! for help banner and prompt UI per review
v0.5.0
Milestone 7 — Hough voting & feature matching in pure Rust
🚀 Features
- (kpm) Implement Hough similarity voting algorithm (M7)
- (kpm) Implement binary hierarchical clustering and k-medoids for FREAK descriptors
- (kpm) Port FeatureStore and FeatureMatcher with three match variants
- (kpm) Port ArrayShuffle for BHC parity with C++ baseline
🐛 Bug Fixes
- (kpm) Fix arlog macro imports and unused variable warnings (#109)
- (kpm) Apply clippy and fmt fixes to hough.rs for M7
- (kpm) Resolve clippy warnings in clustering module
- (kpm) Resolve remaining clippy warnings in clustering
- (kpm) Include in kpm_c_api.cpp for GCC build
- (kpm) Move include before matcher headers for GCC build
- (build) Use platform-appropriate C++ stdlib (libc++ on macOS, libstdc++ on Linux)
- (kpm) Use combined absolute+relative tolerance in M6-2 dual-mode tests
- (kpm) Widen relative tolerance to 1e-5 for M6-2 dual-mode tests
🧪 Testing
- (kpm) Add dual-mode FFI tests for FeatureMatcher (M7-3)
- (kpm) Strengthen dual-mode FeatureMatcher tests with pair equality and global-best invariants
📚 Documentation
- Add pre-commit verification workflow and arlog import pattern to CLAUDE.md
🎨 Styling
- Fix formatting from cargo fmt
⚙️ Miscellaneous Tasks
- Run dual-mode tests in CI to enforce C++ parity
- Scope dual-mode tests to --lib to avoid pre-existing integration test failures
v0.4.1
Patch release — Matrix code GlobalID, paramGL ports, and quality fixes
🚀 Features
- (matrix) Add ARMatrixCodeType::GlobalID variant and MatchOk.global_id field
- (bch) Implement BCH(127,64,22) decoder for AR_MATRIX_CODE_GLOBAL_ID
- (matrix) Add 14x14 GlobalID bit extraction with 4-direction traversal
- (matrix) Wire AR_MATRIX_CODE_GLOBAL_ID into ar_matrix_code_get_id and ar_get_marker_info
- (matrix) Add GlobalID support to matrix code type and update parsing logic
- (core) Implement ar_param_change_size and argl_camera_frustum_rh
- (param_gl) Port remaining three paramGL.c functions to param_gl.rs
🐛 Bug Fixes
- (param_gl) Fix clippy::doc_overindented_list_items on line 249
- (arlog) Scope test log capture to the thread running the arlog test
🚜 Refactor
- (param) Change ar_param_change_size to mutate ARParam in-place
📚 Documentation
- (param_gl) Fix C source reference from argl.c to paramGL.c
⚙️ Miscellaneous Tasks
- Finish converting load_nft.rs to arlog_*! macros
v0.4.0
Milestone 6 — Math & homography in pure Rust
🐛 Bug Fixes
- (kpm) Satisfy clippy on freak::math constants and helpers
- (bench) Resolve SIMD benchmark compilation errors
📚 Documentation
- (kpm) Clarify SolveLinearSystem2x2 is dead in OUR build context
🚀 Features
- (kpm) Port FREAK math utilities from C++ (Milestone 6 Phase 1-3)
- (kpm) Port linear algebra and linear solvers (M6-2)
- (kpm) Port homography pipeline + Padé matrix exp (M6-3)
🧪 Testing
- (kpm) Add dual-mode validation for FREAK math fast-paths
- (kpm) Add dual-mode validation for M6-2 linear solvers
- (kpm) Add dual-mode validation for M6-3 homography pipeline
v0.3.8
Last action before Milestone 6 — Math & homography in pure Rust
⚙️ Miscellaneous Tasks
- Pass --features log-helpers when running simple example
- Remove accidental .DS_Store from repo changes
- Convert println!/eprintln! to arlog_*! in examples and bench
🎨 Styling
- Apply cargo fmt --all (fixes CI fmt check)
- (core) Fix formatting issues
- (marker) Apply cargo fmt
- (diagnostic) Apply stable rustfmt wrapping (#104 CI)
🐛 Bug Fixes
- (clippy) Clear all warnings and add clippy -D warnings to CI
- (clippy) Fix 5 CI-only clippy warnings (explicit_counter_loop, manual_checked_ops)
- (marker) Populate cf_patt/id_patt and copy to final id/cf per mode
- (core) Port confidence_cutoff from C and add regression tests (issue #92)
- (marker) Wire cutoff_phase from MatchOk/MatchError result codes (#88)
- (marker) Resolve merge conflict in cutoff_phase tests
- (simple,marker) Honour the buff/pixel_format contract (#103)
📚 Documentation
- (issue-86) Add implementation plan
- Update CLAUDE.md with documentation and style guidelines
- (issue-103) Correct findings — Rust/C cf close but not byte-equal
🚀 Features
- (marker) Add finalize_marker_id_cf_dir helper
- (types) Add MatchOk, MatchError, From for ARMarkerInfoCutoffPhase
- (core) Add ar_detect_marker orchestrator for full marker detection pipeline
- (types) Add AR tracking history mode constants (#101)
- (marker) Port arDetectMarker tracking history pipeline (#96)
- (diagnostic) Add dump_patt + diff_patt for issue #103
🚜 Refactor
- (core) Move AR modules into ar/ subfolder (closes #82)
- (types) Defer MatchOk.global_id field to issue #89
- (pattern) Pattern_match returns Result<MatchOk, MatchError>
- (matrix) Ar_matrix_code_get_id returns Result<MatchOk, MatchError>
🧪 Testing
v0.3.7
🐛 Bug Fixes
- Replace PNG banner with JPG version in README and assets