This file keeps the current release work and the most recent release evidence. Complete prior notes are preserved in 0.2 release history.
- Package version:
0.4.0 - Release target:
0.4.0 - Published npm latest:
0.4.0 - Release state:
release - Registry checked at:
2026-07-20
- Scope: large-image resilience, non-blocking native work, bounded concurrency, decode-time downsampling, resource limits, cancellation, transactional outputs, and alpha contract validation
This published release preserves existing compressImage(options) usage
while adding an optional AbortSignal-compatible control. Android and iOS now
limit native compression to two concurrent operations, reject unsafe
source/working sizes before full decode, and clean incomplete outputs on every
failure or cancellation path. iOS codec work is ImageIO/CoreGraphics-based and
no longer runs on the main queue. npm latest, immutable tag v0.4.0, and the
GitHub Release now identify the published 0.4.0 artifact.
- Stable
ERR_CANCELLEDandERR_RESOURCE_LIMITpublic/native contracts. BitmapFactory.inSampleSize,ImageDecoder.setTargetSize, and ImageIO thumbnail downsampling sized for contain, cover, stretch, and orientation.- Operation-specific temporary output plus atomic publication and cleanup.
- Additive runtime capability fields for concurrency, downsampling, and named limits.
- 48MP, dimension overflow, queued/running cancellation, settle-once, target-search cancellation, cleanup, and alpha decode-back coverage.
- Batch compression, progress events, new output codecs, animation preservation, or remote/data inputs.
- Trusted Release runs
29732117486
and
29736694994
verified the exact source and all eight compatibility lanes. The first run
published the 68,633-byte tarball through npm OIDC; the resume run proved the
same registry SRI and skipped
npm publish. - Both continuations stopped in registry smoke because npm 12 changed exact
npm view --jsonandnpm pack --jsonfrom npm 11's object/array shapes to single-item arrays/keyed objects. The published tarball was not changed or republished; this follow-up normalizes both npm versions and rejects ambiguous results. - Read-only Registry Validation run
29737871213
passed consumer install/typecheck, registry integrity, SLSA attestation, and
offline replay. Its repository-owned evidence archive has aggregate SHA-256
d6ab0b806fd1c5d5605faeafe2d9809b4a665193219694a416c154f833bc2558. - Release Evidence Policy Review run
29738926758
reviewed canonical candidate
7b97603d…8090, rehearsed the complete five-version evidence set, and produced attestation 36142406. The retained review archive replays at aggregate SHA-25658a9c63441d0ec9364df1b72addd0d947152973a92aa7ec7ef08e5c01d9b3106. - The immutable
v0.4.0 GitHub Release
and tag resolve to source commit
6841a887b2d8b6c9e4823d2708233feeecaa77ea. - Native Demo Evidence run 29738858393 captured fresh Android and iOS 0.4.0 results from that exact release source; the checked manifest binds every source/output/screenshot byte and the presentation video by SHA-256.
pnpm verify
pnpm example:typecheck
pnpm smoke:consumer
pnpm docs:check
pnpm site:check
pnpm site:build
pnpm fixtures:compatibility:check
pnpm example:android-unit-test
pnpm example:android-instrumentation
pnpm example:ios:large-image-test
git diff --check
pnpm pack --dry-run-
Package version:
0.3.0 -
npm latest:
0.3.0 -
Release state:
release -
Registry checked at:
2026-07-18 -
Scope: public support contract, user documentation and native-result demo, compatibility evidence, community health, protected repository settings, OIDC trusted publishing, and an exact-artifact public launch
The release keeps native compression and output behavior unchanged. It adds the
public surfaces and operational controls required for a reproducible open
source launch. The exact Android/iOS compatibility matrix and public Pages
deployment are green. npm 0.3.0 was published from exact protected source
f8ad71f14ac50dac9dc433a46ee4e9a6d7e1bca7 through OIDC trusted publishing,
and the immutable v0.3.0 GitHub Release
contains the matching tarball, checksum, provenance metadata, and registry
consumer-smoke manifest.
- Android 23+, iOS 13.4+, React Native architecture, Node, Bare React Native, and Expo development-build compatibility contracts backed by release gates.
- A VitePress public site, typed integration guides, an option-to-code builder, and traceable Android/iOS native-result demo artifacts.
- Targeted example-app presentation refactoring without native pipeline changes.
- Contribution, support, governance, issue, pull request, security-reporting, changelog, and discoverability surfaces.
- Protected branch/tag and repository-setting audits.
- One-tarball OIDC npm trusted publishing, registry verification, immutable GitHub Release, and existing release-evidence handoff.
- A launch kit that is ready for separately approved public announcements.
- New codecs, native compression behavior, cancellation, progress, or browser compression.
- Expo Go, App Store/Play Store distribution, v1.0 stability, paid marketing, tracking analytics, Changesets, or semantic-release.
- Rewriting historical release-evidence policy, digests, or archives.
- Exact compatibility evidence: run 29639654333 passed React Native 0.73.11 Legacy, React Native 0.86.0 Legacy/New, and Expo 57.0.7 development-build consumers on Android and iOS.
- Exact native demo evidence: run 29639654302 produced the checked Android/iOS assets and digest manifest.
- Public Pages evidence:
run 29641396874
built, audited, and deployed the public documentation site from protected
master. - Exact publication evidence: run 29641603870 passed source/artifact preflight and all eight compatibility lanes, then published the 58,780-byte tarball with npm OIDC provenance. Its continuation stopped after npm 12 returned an unrecognized array-shaped registry response; no package, tag, dist-tag, or Release asset was replaced.
- Exact registry evidence:
run 29643434413
independently confirmed SHA-512 integrity, SLSA provenance metadata,
latestresolution, the 79-file inventory, packed README status, and a fresh registry consumer install from immutable tagv0.3.0. The matching retained evidence archive is replayed bypnpm verify:release-evidence -- --version 0.3.0. - Policy-review evidence:
run 29644362987
reviewed the exact v0.3.0 candidate, rehearsed the complete four-version
archive set, and attested the canonical review manifest. The retained review
archive replays offline through
pnpm verify:release-evidence-review-archive -- --version 0.3.0.
pnpm verify
pnpm example:typecheck
pnpm docs:check
pnpm site:check
pnpm site:build
pnpm fixtures:compatibility:check
pnpm release:dry-run
git diff --check
pnpm pack --dry-runpnpm release:dry-run must pass without publishing. The trusted release remains
fail-closed unless package, README, RELEASE, registry state, protected source
SHA, and exact tarball identity stay aligned.
The first post-publish continuation exposed an npm 12 transport-shape change:
multi-field exact-version npm view --json responses are single-item arrays.
The release artifact was already published correctly; the follow-up repository
fix normalizes npm 11 object and npm 12 array responses and keeps polling until
the semantic publication action is resume.
-
Package version:
0.2.62 -
npm latest:
0.2.62 -
Release state:
release -
Registry checked at:
2026-07-17 -
Scope: documentation information architecture, semantic status gates, repository verification contract decomposition, Android request parsing, and source/decode/bitmap-transform boundary extraction, plus iOS request and source/inspection, image-decoder, resize/render, JPEG metadata, and output encoder/persistence and pipeline orchestration ownership boundaries
This work separates the npm user README from repository-only release operations. It adds a network-free documentation gate for semantic status, required headings/links/commands, file existence, internal Markdown links and anchors, README size, and npm package exclusions.
The packed README stale validator reads only the marked current-status block.
Historical candidate text outside that block is ignored. The shared state
matrix blocks candidate and permits release; Android doctor consumes the
same semantic result instead of matching release procedure sentences.
The repository-only release status manifest is the
authority for the release target, observed published npm latest, release state,
and registry check date. Package version remains authoritative in
package.json and must match the release target; the README and this release
block are validated mirrors. Keeping the two version fields separate prevents
pre-publish source from claiming that the target already exists on npm.
Repository verification is split by contract instead of one Android-named umbrella test. Package shape, documentation, Android wiring, iOS wiring, and workflow supply chain each have an explicit authority. Native behavior remains owned by Kotlin unit/instrumentation tests and the iOS host-app smoke gates; doctor checks their structure and presence without copying implementation sentences.
The Android bridge now delegates ReadableMap parsing and validation to an
immutable typed request boundary. Output selection, metadata, target-size,
resize, and source URI validation retain their existing error codes and
messages. File/content source access and platform decode now flow through a
ContentResolver-injected source resolver and typed decoder result. Decode
order and EXIF orientation remain unchanged. Orientation and resize now flow
through a typed bitmap transformer whose ownership scope releases original,
rotated, scaled, and cropped bitmaps exactly once. Metadata copy and encode
behavior are unchanged.
The iOS bridge now delegates option parsing and static validation to an
immutable, Foundation-only request boundary. Source URI, output selection,
quality, target size, metadata, and resize defaults/errors are covered by a
table-driven native executable. Runtime WebP availability is still determined
through ImageIO and queried only for WebP output, preserving validation order.
Source URI acquisition now flows through a Foundation-only resolver with
injected data/security-scope hooks, and ImageIO type/signature classification
flows through an immutable input inspector with bridge-provided AVIF runtime
availability. UIImage decode and ImageIO first-frame selection now flow through
an immutable decoder result/error boundary with injected decode, validation,
and main-thread executor hooks. Resize geometry now flows through immutable
transform request, geometry, result, and error models; the UIKit default owns
pixel-size lookup, opaque white versus alpha-preserving backgrounds,
UIGraphicsImageRenderer, and main-thread rendering. Capability projection
moved unchanged to a private helper so the bridge stays focused on
orchestration. JPEG metadata preserve eligibility, ImageIO source-property
reading, and destination orientation/dimension normalization now flow through
immutable request/result/error models with an injected source-property reader.
The bridge and encoder no longer manipulate metadata dictionaries directly;
the JPEG metadata result supplies destination properties to the platform
encoder. Format routing and target-size binary search now flow through an
immutable encoder request/result/error boundary with injected JPEG, PNG, WebP,
and synchronous executor hooks. The UIKit/ImageIO default owns codec calls,
WebP destination discovery, and main-thread execution. Cache directory and
extension selection, timestamp/UUID path generation, atomic file writes, and
CompressionResult projection now flow through a Foundation-only output owner
with injected filesystem, clock, and identifier hooks. A Foundation-only
compression pipeline now owns the complete request, input, metadata, decode,
transform, encode, and output sequence through injected stage adapters. The
ImageIO-backed default supplies WebP/AVIF runtime providers and the native smoke
stage observer. The bridge is limited to Codegen argument conversion, promise
mapping, and capability projection. Output URI, stable errors, stage order,
metrics, metadata copy, and encoded output behavior are unchanged.
package.jsonas the package-version authority, with aligned README/RELEASE/SECURITY/Vitest coverage.- npm-focused README with current support, installation, API examples, limitations, verification, and repository documentation links.
- Repository-only release-evidence, Action pin, and historical documentation.
- Repository-only structured release-status manifest and shared publishability matrix.
pnpm docs:checkin default verification.- Aligned README/RELEASE marker parsing and current candidate refusal.
- Domain contract suites for package, Android, iOS, documentation, and workflow verification, with a repository-only authority matrix.
- Android doctor checks based on module wiring, commands, structured fixture metadata, and executable native-test authorities.
- Typed Android compression request parsing with table-driven Kotlin coverage for defaults, boundaries, invalid values, and malformed bridge types.
- Typed Android source/decode boundaries with Kotlin characterization coverage for file/content access, stream closure, format hints, bounds, EXIF orientation, and HEIF/AVIF platform gates.
- Typed Android bitmap transformation and ownership boundaries with table-driven coverage for all eight EXIF orientations, contain/cover/stretch, no-upscale identity, center crop, and exactly-once recycling.
- Typed iOS compression request parsing with Foundation-only native coverage for defaults, required fields, output availability, quality/maxBytes, metadata, resize modes/dimensions, and stable error contracts.
- Typed iOS source acquisition and format inspection with native coverage for file/content URIs, immutable bytes, security-scope closure, ImageIO type aliases, AVIF signatures/runtime availability, and stable errors.
- Typed iOS image-decoder ownership with native coverage for JPEG/PNG ordinary decode, GIF/WebP/HEIC/HEIF/AVIF first-frame routing, synchronous executor ownership, immutable results/errors, and stable decode failures.
- Typed iOS resize/render ownership with exact geometry tables for no-resize, contain, cover, stretch, width-only, height-only, portrait/landscape, no-upscale, and center crop; injected renderer tests preserve opaque/alpha policy, synchronous executor ownership, immutable models, and stable failure classification.
- Typed iOS JPEG metadata ownership with native coverage for preserve eligibility, exact unsupported errors, safe/strip quality-only properties, ImageIO reads, TIFF/EXIF orientation and dimension normalization, malformed or missing source properties, immutable models, and unchanged source data.
- Typed iOS output encoder ownership with native coverage for JPEG/PNG/WebP routing, metadata forwarding, synchronous executor ownership, quality-cap short circuit, exact target-size probe order, unreachable targets, missing candidates, immutable models, and stable encode failures.
- Typed iOS output persistence ownership with native coverage for cache and temporary-directory paths, JPEG/PNG/WebP extensions, clock/UUID naming, atomic writer delegation, immutable models, stable directory/write errors, output URI, byte metrics, and zero-source compression ratio.
- Typed iOS pipeline orchestration with native coverage for exact success stage order, every stage failure and downstream short circuit, underlying error forwarding, runtime WebP/AVIF providers, native exception mapping, immutable models, and post-promise resolution notification.
- npm publish, dist-tag changes, git tags, or GitHub Releases.
- Registry/review policy, digest,
evidence/npm, orevidence/reviewschanges. - Workflow structure changes, acquisition bundle verification, native compression behavior/public API changes, or AVIF output changes.
pnpm verify
pnpm example:typecheck
pnpm example:ios:decoder-test
pnpm example:ios:encoder-test
pnpm example:ios:output-test
pnpm example:ios:pipeline-test
pnpm example:ios:metadata-test
pnpm example:ios:transformer-test
pnpm example:ios:input-test
pnpm example:ios:request-test
pnpm example:ios:build
pnpm example:ios:smoke
pnpm fixtures:release-evidence-review-acquisition:check
pnpm docs:check
git diff --check
pnpm pack --dry-runPackage inspection must show no docs/, evidence/, scripts/, or test/
entries. pnpm release:dry-run stops for candidate and continues for a
manifest-aligned release after a reviewed status update.
- v0.2.62 registry provenance
retains exact tag-ref Registry Validation run
29558617089; the linked policy review and durable archive retain exact review run29561132321, attestation, ZIPs, and offline replay. - v0.2.61 added authenticated review artifact acquisition and canonical importer handoff.
- v0.2.60 retained the review archive for expiration-independent replay.
- v0.2.59 added the reviewed policy receipt, promotion rehearsal bundle, and signer attestation.
- v0.2.58 added canonical policy candidate preparation and reviewed promotion.
- v0.2.57 added authenticated Registry Validation artifact acquisition.
- v0.2.56 added release-evidence archive import and multi-version replay.
- v0.2.55 established the retained Action Pin attestation/release evidence baseline.
All earlier 0.2.x and 0.1.x entries, including exact runs, artifact IDs,
digests, validation commands, publication results, and non-goals, are indexed by
their version headings in docs/releases/0.2-history.md.