Skip to content

chore(release): bump version to 0.16.0 and rebuild dist - #197

Merged
kalwalt merged 1 commit into
devfrom
chore/release-0.16.0
Sep 6, 2026
Merged

chore(release): bump version to 0.16.0 and rebuild dist#197
kalwalt merged 1 commit into
devfrom
chore/release-0.16.0

Conversation

@kalwalt

@kalwalt kalwalt commented Sep 6, 2026

Copy link
Copy Markdown
Member

Summary

Release prep for 0.16.0 (Phase A of the release runbook). Minor bump from 0.15.0: two feat: commits in this range (injectable RNG #189, Levenberg-Marquardt refinement #187), no breaking changes.

Includes everything merged since 0.15.0:

Changes in this PR

  • package.json: 0.15.00.16.0
  • package-lock.json: regenerated with npm 11; npm audit fix applied for a high-severity transitive brace-expansion advisory (dev-only dependency)
  • dist/jsfeatNext.js, dist/jsfeatNext.mjs, types/: rebuilt fresh via npm run build-ts
  • CHANGELOG.md: new 0.16.0 section generated via git-cliff

Testing

  • npm test: 353/353 passing on the regenerated lockfile + rebuilt dist.
  • Manually verified both examples/sample_orb.html and examples/sample_orb_pinball.html against the freshly rebuilt dist/ — confirmed working.

Includes issues #185, #186, #187, #188, #189 (RANSAC/LMEDS refit + F64
precision + Levenberg-Marquardt refinement + injectable RNG), #194 (npm
Trusted Publishing), #139 (S64_t rejection), and #142 (ORB example training
coordinate fixes). Minor bump (0.15.0 -> 0.16.0) per two feat: commits in
this range (injectable rng, LM refinement); no breaking changes.

Regenerated package-lock.json with npm 11 and applied `npm audit fix` for a
high-severity transitive brace-expansion advisory (dev-only dependency).
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Prepare jsfeatNext 0.16.0 release artifacts

⚙️ Configuration changes 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Bump package metadata to 0.16.0 and document changes since 0.15.0.
• Rebuild UMD, ESM, and TypeScript declaration artifacts for the release.
• Refresh the lockfile and remediate the brace-expansion development dependency advisory.
Diagram

graph TD
  R["Release 0.16.0"] --> P["Package manifest"] --> B["Vite build"] --> D["Runtime bundles"]
  B --> T["Type declarations"]
  R --> L["Dependency lock"]
  R --> C["Changelog"]
Loading
High-Level Assessment

The current approach matches the repository's release model: update authoritative package metadata, regenerate the lockfile, rebuild checked-in publishable bundles and declarations, and generate release notes. Building only during publication or omitting generated artifacts was considered, but would make the reviewed commit differ from the exact package contents exported through dist/ and types/.

Files changed (13) +459 / -51

Documentation (1) +50 / -0
CHANGELOG.mdAdd the 0.16.0 release notes +50/-0

Add the 0.16.0 release notes

• Adds categorized release notes for fixes, CI, documentation, features, and tests merged since 0.15.0. The entry is dated 2026-09-06.

CHANGELOG.md

Other (12) +409 / -51
jsfeatNext.jsRebuild the 0.16.0 UMD bundle +2/-2

Rebuild the 0.16.0 UMD bundle

• Regenerates the minified UMD/CommonJS bundle with version 0.16.0. The bundle incorporates the accumulated matrix validation, deterministic sampling, homography refitting, F64 precision, and Levenberg-Marquardt APIs.

dist/jsfeatNext.js

jsfeatNext.mjsRebuild the 0.16.0 ESM bundle +165/-25

Rebuild the 0.16.0 ESM bundle

• Regenerates the readable ESM distribution with the 0.16.0 version and all functionality merged since 0.15.0, including robust-estimation refitting and nonlinear refinement.

dist/jsfeatNext.mjs

package-lock.jsonRefresh release version and secure transitive dependency +6/-6

Refresh release version and secure transitive dependency

• Updates lockfile package metadata to 0.16.0 and upgrades the development-only brace-expansion dependency from 5.0.7 to 5.0.9. The updated package now declares Node 20 or newer.

package-lock.json

package.jsonBump package version to 0.16.0 +1/-1

Bump package version to 0.16.0

• Changes the published package version from 0.15.0 to 0.16.0 for the minor release.

package.json

index.d.tsExport the generated RandomFn type +1/-1

Export the generated RandomFn type

• Adds RandomFn to the package-level type exports so consumers can type injectable random-number generators.

types/src/index.d.ts

linalg.d.tsDeclare the Levenberg-Marquardt solver API +45/-0

Declare the Levenberg-Marquardt solver API

• Adds the LMCallback contract and the linalg.lm_solve declaration. Documentation defines residual and Jacobian behavior, convergence controls, and numerical strategy.

types/src/linalg/linalg.d.ts

math.d.tsDeclare the seedable mulberry32 generator +15/-0

Declare the seedable mulberry32 generator

• Adds the RandomFn import and declares math.mulberry32 for reproducible RANSAC and LMEDS sampling.

types/src/math/math.d.ts

matrix_t.d.tsDocument unsupported S64 matrix rejection +12/-0

Document unsupported S64 matrix rejection

• Adds the private S64_t validation declaration and explains why unsupported 64-bit integer matrices are rejected instead of exposed through an incorrect F64 view.

types/src/matrix_t/matrix_t.d.ts

motion_estimator.d.tsExpose reproducible sampling and homography refitting APIs +61/-8

Expose reproducible sampling and homography refitting APIs

• Adds injectable RNG support to get_subset and documents minimal-sample behavior for RANSAC and LMEDS. Declares find_homography with linear refitting, mask recomputation, optional LMEDS thresholds, and LM refinement.

types/src/motion_estimator/motion_estimator.d.ts

ransac_params_t.d.tsAdd RNG configuration to robust estimation parameters +10/-2

Add RNG configuration to robust estimation parameters

• Declares the RandomFn-backed rng property and constructor argument while preserving Math.random as the default.

types/src/motion_estimator/ransac_params_t.d.ts

motion_model.d.tsDeclare F64 homography and refinement capabilities +74/-6

Declare F64 homography and refinement capabilities

• Documents F64 normalization and DLT scratch matrices, plus affine and homography refinement methods. It also describes the private F64 homography model buffer used to avoid premature rounding.

types/src/motion_model/motion_model.d.ts

types.d.tsExtend motion kernels with optional refinement +17/-0

Extend motion kernels with optional refinement

• Adds the optional MotionKernel.refine contract and defines RandomFn as a Math.random-compatible source for deterministic robust estimation.

types/src/types.d.ts

@qodo-code-review

qodo-code-review Bot commented Sep 6, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Solver errors drain shared buffers ✗ Dismissed 📘 Rule violation ☼ Reliability
Description
lm_solve acquires eight cache nodes before invoking callback.compute, but releases them only at
the normal function epilogue instead of in a finally block. If any callback invocation throws,
those nodes remain checked out; repeated failures exhaust the fixed pool and make later algorithm
calls fail inside get_buffer.
Code

dist/jsfeatNext.mjs[800]

+		let o = e.rows, s = t, c = e.data, u = this.cache.get_buffer(s << 3), d = this.cache.get_buffer(s << 3), f = this.cache.get_buffer(s * o << 3), p = this.cache.get_buffer(o * o << 3), m = this.cache.get_buffer(o * o << 3), h = this.cache.get_buffer(o << 3), g = this.cache.get_buffer(o << 3), _ = this.cache.get_buffer(o << 3), v = u.f64, y = d.f64, b = f.f64, x = p.f64, S = m.f64, C = h.f64;
Evidence
Compliance rule 2965982 requires every shared-buffer allocation to have a matching release on
success and error paths. The newly distributed solver borrows eight nodes before calling an external
callback, its releases are only at the function epilogue, and the cache implementation explicitly
assumes balanced calls without an underflow check.

Rule 2965982: Release all shared buffer pool allocations with a matching put_buffer call
dist/jsfeatNext.mjs[799-850]
src/linalg/linalg.ts[693-805]
src/cache/cache.ts[99-129]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`lm_solve` leaks all borrowed cache nodes when `callback.compute` throws because releases occur only on normal completion.

## Issue Context
The cache has no underflow protection and requires every borrowed node to be returned. Update the TypeScript source, then rebuild the generated distribution artifacts.

## Fix Focus Areas
- src/linalg/linalg.ts[693-805]
- dist/jsfeatNext.mjs[799-850]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 27 rules
Review mode: ⚖️ Balanced: This release packages substantial runtime changes across RANSAC/LMEDS, homography and affine refinement, numerical precision, RNG behavior, and public TypeScript APIs, so it carries genuine cross-cutting correctness risk but is not clearly dense enough to require redundant extended review.

Grey Divider

Tip of the day
💡 Did you know, you can show, collapse, or hide each part of a finding: code, evidence, and all

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread dist/jsfeatNext.mjs
@kalwalt kalwalt self-assigned this Sep 6, 2026
@kalwalt kalwalt added enhancement New feature or request new-release labels Sep 6, 2026
@kalwalt kalwalt added this to the 1.0.0 milestone Sep 6, 2026
@kalwalt
kalwalt merged commit 71696d3 into dev Sep 6, 2026
5 checks passed
@kalwalt
kalwalt deleted the chore/release-0.16.0 branch September 6, 2026 13:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request new-release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant