Skip to content

PAM Native 1.22.6

Choose a tag to compare

@DavidWilliamBalbino DavidWilliamBalbino released this 06 Oct 22:45
· 25 commits to main since this release

PAM Native 1.22.6

Source commit: 2aff2f3b49d3558503a1c9aee86cf97e7436c50e ([skip ci]).

The final V3 source passed the release gates and integrated Android cache-recovery QA.

Changes

  • Typed ImageLoadEvent, ImageErrorEvent and ImageProgressEvent handlers
    receive decoded objects through the shared compiler event decoder. Direct
    callbacks and explicit event arguments work in generated and interpreted
    expressions. Existing string, untyped and zero-argument handlers keep their
    contracts, and forwarded event objects retain identity.
  • Android applies initial rich-text effects once after the full property pass,
    avoiding repeated content, font, sizing and letter-spacing work. Initial
    PamContainer backgrounds similarly use the final authored properties.
    Incremental changes remain immediate; native controls, ImageBackground and
    custom views keep their existing paths. Drawing, ripple and clipping are
    unchanged.
  • Android and iOS native bridges keep module completions within their original
    PHP request. Opaque native callback IDs prevent queued cleanup results or
    late callbacks from consuming reused PHP IDs after reload. Public module and
    wire contracts are unchanged.
  • Prebuilt PHP class/template caches restore empty or truncated derived files
    from their unchanged bundle pack on first materialization. Repairs publish
    atomically and invalidate only the repaired opcode. Valid files are reused;
    failed pack reads remain retryable. Later renders do not reread the pack or
    repeat size checks.

Completed validation

  • The PHP SDK suite, 547 PHP source parses, protocol parity, Rust formatting,
    207 Rust workspace tests and 214 JVM tests passed on the accepted V3 source.
    Android/Rust/Protocol sources are byte-identical to V2; the final PHP suite
    includes the new cache-recovery regression.
  • Android APIs 26 and 36 each passed 37 renderer instrumented cases plus one
    reload regression in a separate instrumentation process: 38 cases per API.
    Coverage includes list/image continuity, native zoom and gesture handoff,
    initial text/background properties, text parity/clipping and rebind.
  • The reload regression failed on published 1.22.5 when two shutdown timer
    results consumed new Linking callbacks. The final candidate delivered only
    the new entry's four results, including the typed canOpenUrl result. Its
    HTTPS fixture checks URL support without opening a URL or accessing a server.
  • Cache regressions reproduce missing-class failures with empty/truncated
    class/template files and prove exact restoration, reuse of valid files,
    retry after a failed pack read and no additional reads per render.
  • Fresh native and native-ui projects passed first launch, edit/reload/
    restore, source restoration and counter increment on API 36 and API 26.
    Both final V3 results contain at least two reload-ready events with distinct
    bundle versions, valid screenshots and no runtime errors.
  • The 12 release assets have verified hashes: Android renderer, plugin API AAR,
    PHP SDK and Linux CLI, their four checksum files, and Android/PHP
    reproducibility and package-budget reports. Reproducibility and budget gates
    passed for renderer, PHP and AAR; the CLI has a verified checksum, not a
    separate claim of double-build reproducibility.

Application measurements and limits

The accepted initial-properties A/B kept all 157 PAM assets byte-identical.
The largest mount CPU interval changed from 21.020 to 18.609 ms, the largest
Recycler layout CPU interval from 44.064 to 39.893 ms, and its eleven binds
from 29.714 to 27.976 ms. The total observed mount CPU increased from 27.453
to 37.593 ms; this is evidence for reduced work in the selected intervals,
not a reduction in every opening cost.

Untraced steady scroll changed from 0/417 frames classified as jank (p95 10 ms)
to 1/420 (p95 11 ms), with GPU median/p95 at 4/5 ms in both. Cold p95 changed
from 133 to 105 ms while jank changed from 10/16 to 12/16 frames. A single pair,
shader work and scheduling limit attribution. Cold opening has not achieved
the 60 FPS target
, and these samples do not establish universal FPS or
complete application parity.

The image-event application regression reproduced the old TypeError and
passed the two compiled editor/crop consumers on the candidate. A candidate
V1 device session also exported edited photos and confirmed one remote post
with HTTP 201. The final V3 APK then recovered an intentionally empty Feed
class on Android: 0 bytes became the original 22,665 bytes with the exact
original SHA-256, and Feed rendered after process restart without clearing
application data. Backend
media processing remains separate from SDK correctness and release acceptance.

Upgrade and platform scope

Update the SDK, rebuild/precompile the application bundle and rebuild the
native host. PHP remains ^8.5; third-party dependencies and numeric protocol/
ABI identifiers are unchanged. Existing 1.22.5 list and zoom fixes remain
included. See the migration guide.

Validation uses direct local commands without GitHub Actions. The iOS bridge
implements the same request-scoped callback mapping, but iOS execution was
unavailable on the Linux host. Cache size recovery does not detect arbitrary
same-size corruption or rebuild a damaged source pack. The device cache recovery evidence and source hashes are recorded in the release manifest.