Kits: low-power engine tuning, the engine's next release, the webOS SDK, the Atlas references
The owner's four requests of 2026-10-26 (evening), researched and written as kits, with Tier 91 (T-545..T-560) on the build site. The owner's choices the same day: T-505 first, then these; the engine waits for UXP's next RB_ tag (the newest is still our base RB_20261006); the SDK to Redux 0.4.1 and /opt/PalmSDK refreshed. - cavekit-lowpower-uxp.md + docs/research/lowpower-uxp.md: the scan of the local engine, Moonchild's projects and the listed forks; twelve levers ranked (JS helper threads for two cores, -O2, jemalloc's retained pages, memory prefs, reduced motion, lazy images, decoders, omni.ja); none measured yet - cavekit-engine-release-2026-10.md: RC_20261026 is 12 small commits past our base, only patch 0060 overlaps (its roots now upstream) - cavekit-webos-sdk-update.md: HP's PDK is final; Redux 0.4 -> 0.4.1 - cavekit-atlas-references.md: the app moved to webOS-ports; the adapter and server forks' parents are the 2013 code, so Atlas itself is the upstream Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XtfxSpM1w2uiVKeLKoV3g3
This commit is contained in:
1 parent
224168c651
commit
4586bf6731
7 files changed
+423
No files matched your search
@@ -0,0 +1,69 @@
|
||||
---
|
||||
created: "2026-10-26"
|
||||
last_edited: "2026-10-26"
|
||||
complexity: quick
|
||||
---
|
||||
|
||||
# Cavekit: The Atlas Reference Repositories, Current
|
||||
|
||||
## Scope
|
||||
The owner, 2026-10-26: **"update atlas browser reference repos to the latest by pulling from upstream."**
|
||||
|
||||
Jihad's adapter and daemon descend from the same isis-browser code as Herrie82's Atlas Browser, and the Atlas sources
|
||||
are Jihad's working reference for the card side: the PGContext paint path (cavekit-offscreen-rendering.md R6), the
|
||||
BrowserServer protocol's later commands, the scroll buffer, the WPE backend's engine seam (docs/PICKUP.md). They live
|
||||
beside the project in `../Atlas/` as plain checkouts, read and never built or changed.
|
||||
|
||||
What the repositories are, read on 2026-10-26 (GitHub API):
|
||||
|
||||
| checkout | origin | its own upstream | newest push |
|
||||
|---|---|---|---|
|
||||
| `Atlas/atlas-browser-app` | `Herrie82/atlas-browser-app` — GitHub redirects it: the app moved to **`webOS-ports/org.webosports.app.atlas`** ("webOS Atlas Browser App based on WPE") | — | 2026-10-20 |
|
||||
| `Atlas/BrowserAdapter` | `Herrie82/BrowserAdapter` | a fork of `woce/BrowserAdapter` (2013) | 2026-07-28 |
|
||||
| `Atlas/BrowserServer` | `Herrie82/BrowserServer` | a fork of `isis-project/BrowserServer` (2013) | 2026-07-14 |
|
||||
| `Atlas/atlas-wpe-backend` | `Herrie82/atlas-wpe-backend` | none (its own) | 2026-08-24 |
|
||||
|
||||
The Atlas work is the upstream: Herrie82's repositories and webOS-ports' app. The forks' parents (`woce`,
|
||||
`isis-project`) are the 2013 code Atlas started from; "pulling from upstream" there would go backwards. All four
|
||||
checkouts were at their remote's default-branch head on 2026-10-26 (`git fetch`, 0 commits behind), but the app's
|
||||
remote URL is the old name and no checkout fetches branches other than its default one or records what was last read.
|
||||
|
||||
Reference: the session-start rule "fast-forward the reference repos first" (memory `update-workspace-repos-first`).
|
||||
|
||||
## Requirements
|
||||
|
||||
### R1: Each reference tracks its real upstream
|
||||
**Description:** Every Atlas checkout fetches from where Atlas development happens now, all of it.
|
||||
**Acceptance Criteria:**
|
||||
- [ ] `atlas-browser-app`'s origin is `https://github.com/webOS-ports/org.webosports.app.atlas` (not the redirected old name); the other three keep Herrie82's repositories, and the fork parents (`woce`, `isis-project`) are added as a second, read-only remote named `ancestor` for comparison, never pulled into the default branch
|
||||
- [ ] Every checkout has fetched all branches and tags of its origin (`git fetch --all --tags --prune`), and its default branch is at the origin's head by fast-forward only (a reference is never merged, rebased or edited)
|
||||
- [ ] A checkout with local changes or a diverged default branch is reported and left alone, not reset
|
||||
**Dependencies:** none
|
||||
|
||||
### R2: One command updates them and says what moved
|
||||
**Description:** The update is repeatable at every session start.
|
||||
**Acceptance Criteria:**
|
||||
- [ ] A host script (`tools/host/update-references.sh`) runs R1 for the four Atlas checkouts (and takes other reference checkouts as arguments: `webos-docs`, `ref-forks/lunace-webos-ports`), with no network writes and no change to Jihad's own repository
|
||||
- [ ] It prints, per checkout, the commits that arrived (count and one line each, newest first), new branches and tags, and the head it ended at; with nothing new it says so
|
||||
- [ ] It refuses to run while any checkout has uncommitted changes in it, naming them
|
||||
**Dependencies:** R1
|
||||
|
||||
### R3: What moved is read for Jihad
|
||||
**Description:** An update is only useful if what changed upstream is weighed against Jihad.
|
||||
**Acceptance Criteria:**
|
||||
- [ ] The last-read head of each reference is recorded in `docs/REFERENCES.md` (repository, branch, commit, date), so the next update shows only the commits since
|
||||
- [ ] For the commits since the last record, a short note in the same file says which touch something Jihad shares or mirrors (the BrowserServer command set and the YAP contract, cavekit-ipc-contract.md; the adapter's paint, scroll and input paths, cavekit-offscreen-rendering.md and cavekit-input-bridging.md; the app's card behaviour) and, per item, adopt / not applicable / owner's call
|
||||
- [ ] Items marked "owner's call" are put to the owner as multiple-choice questions
|
||||
**Dependencies:** R2, cavekit-ipc-contract.md R1
|
||||
|
||||
## Out of Scope
|
||||
- Building or running Atlas, or merging Atlas code into Jihad (an "adopt" item becomes its own task on the kit it touches)
|
||||
- The UXP engine (cavekit-engine-update.md) and the webOS SDK (cavekit-webos-sdk-update.md)
|
||||
|
||||
## Cross-References
|
||||
- cavekit-ipc-contract.md — the protocol the adapter and server share
|
||||
- cavekit-offscreen-rendering.md R6 — the Atlas paint path Jihad ported
|
||||
- cavekit-engine-update.md — the same "read before you take it" discipline for the engine
|
||||
|
||||
## Changelog
|
||||
- 2026-10-26: created from the owner's request; the upstream map read from the GitHub API.
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
created: "2026-10-26"
|
||||
last_edited: "2026-10-26"
|
||||
complexity: standard
|
||||
---
|
||||
|
||||
# Cavekit: The Engine on UXP's Latest Release (2026-10-26)
|
||||
|
||||
## Scope
|
||||
The owner, 2026-10-26: **"update uxp/goanna to the latest release as of october 26th, 2026."** This is the first
|
||||
update made with the procedure cavekit-engine-update.md built (`build/engine/update-engine.sh`, `docs/ENGINE.md` §6-7).
|
||||
|
||||
What upstream has, read on 2026-10-26 (`git ls-remote` of https://repo.palemoon.org/MoonchildProductions/UXP and its
|
||||
compare view):
|
||||
- The newest **release** tag (`RB_*`, a UXP shipped with a Pale Moon release) is **`RB_20261006`** (`5f290d1`, Pale Moon
|
||||
35.0.2) — the engine's base today. Nothing newer is tagged `RB_`.
|
||||
- The `release` branch is at **`RC_20261026`** (`6b18be9`, "[js] Avoid OOB array copy", 2026-10-26), 12 commits past it
|
||||
(with `RC_20261024`, `037cc5f`, between): a JS self-hosting fix, the emSign roots removed and certdata to September
|
||||
2026, SQLite 3.54.1, a lock in the component manager's memory reports, a selection fix in layout/generic, a strong ref
|
||||
in the mutation observer, an feTile overflow in gfx/2d, `jar:` no longer loadable by anyone, and three Windows-only
|
||||
file-extension commits. Goanna stays 6.9.0, NSS unchanged, ICU `icudt78l.dat` unchanged.
|
||||
- None of the 12 touches a file our 69 patches touch, except the certdata: patch 0060 already carries `037cc5f`'s roots,
|
||||
so it becomes empty on the new base.
|
||||
|
||||
Reference: `build/engine/engine-version.env`, `build/engine/update-engine.sh`, `docs/ENGINE.md`, `docs/ENGINE-SOURCE.md`,
|
||||
`context/kits/cavekit-certificate-trust.md` R2 (roots follow UXP's release).
|
||||
|
||||
## Requirements
|
||||
|
||||
### R1: The target is the owner's choice of release
|
||||
**Description:** "The latest release" is either the newest `RB_` (already ours) or the release branch's candidate.
|
||||
**Acceptance Criteria:**
|
||||
- [x] The owner's answer is recorded here: `RC_20261026` now, or the next `RB_` tag when Pale Moon ships it (this
|
||||
kit's tasks then wait for it) *(2026-10-26, the owner: **wait for the RB_ tag**. The kit waits for the first `RB_`
|
||||
newer than `RB_20261006`; check with `git ls-remote --tags https://repo.palemoon.org/MoonchildProductions/UXP.git`)*
|
||||
- [ ] The chosen tag's commit and date are pinned in `build/engine/engine-version.env` (`UXP_BASE`/`UXP_TAG`), and a tag
|
||||
name of the `RC_` form is accepted by `update-engine.sh` (its default lookup matches `RB_` only) and by
|
||||
`check-engine-pins.sh`
|
||||
**Dependencies:** cavekit-engine-update.md R2
|
||||
|
||||
### R2: The patch queue rebased by the procedure, nothing lost
|
||||
**Acceptance Criteria:**
|
||||
- [ ] `update-engine.sh <tag>` applies the queue on the new base in a worktree; patch 0060 (the roots, now upstream) is
|
||||
dropped or kept empty as the owner decides, and every other patch applies (or its conflict is resolved and recorded)
|
||||
- [ ] `update-engine.sh --finish` moves the engine branch (`jihad/uxp-<tag>`), the pins (the OE recipe's SRCREV, the
|
||||
user agent's short hash, the three start pages, `.gitmodules`), and `patch-queue.sh --check` reproduces the new pin
|
||||
exactly; `check-engine-pins.sh` passes
|
||||
- [ ] `check-engine-api.py` reports no export lost; the daemon's start line says every optional export is present
|
||||
- [ ] `JIHAD_APP_BUILD_ID` is bumped; `docs/ENGINE-SOURCE.md` names the new base
|
||||
**Dependencies:** R1
|
||||
|
||||
### R3: The roots still UXP release's
|
||||
**Acceptance Criteria:**
|
||||
- [ ] `tools/host/audit-roots.py` finds the built-in roots equal to the new base's certdata (0 findings), and the
|
||||
roots' pin (`ROOTS_SOURCE`, `ROOTS_SHA256`) names the new base's commit
|
||||
**Dependencies:** R2, cavekit-certificate-trust.md R2
|
||||
|
||||
### R4: The device runs it, nothing regressed
|
||||
**Acceptance Criteria:**
|
||||
- [ ] The desktop engine build and its tests pass (`docs/ENGINE.md` §7)
|
||||
- [ ] The ARM engine, daemon and three packages are built and installed by full `push-variant.sh` runs; default-check
|
||||
passes in all three variants
|
||||
- [ ] The areas the new commits touch are checked on the device: Jihad's own pages that load through `jar:` and
|
||||
`resource:` (about:settings, about:addons, about:personas, the start page) open; a profile with cookies and history
|
||||
survives the SQLite update (cookies kept, history listed); selection in a page (a long press) and an SVG filter page
|
||||
render
|
||||
- [ ] The engine fork's branch and main are the owner's to push (`.cavekit/handoff-2026-10-24/push.sh`)
|
||||
**Dependencies:** R2, R3
|
||||
|
||||
## Out of Scope
|
||||
- Newer engine features or a Goanna version change (none in this range)
|
||||
- The low-power optimizations (cavekit-lowpower-uxp.md) — separate work on top of whichever base this kit lands
|
||||
|
||||
## Cross-References
|
||||
- cavekit-engine-update.md — the procedure this kit uses
|
||||
- cavekit-certificate-trust.md R2 — roots follow UXP's release
|
||||
- cavekit-device-build.md — the packages and pushes
|
||||
|
||||
## Changelog
|
||||
- 2026-10-26: created from the owner's request; upstream read the same day (RB_20261006 newest release, RC_20261026 on
|
||||
the release branch).
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
created: "2026-10-26"
|
||||
last_edited: "2026-10-26"
|
||||
complexity: thorough
|
||||
---
|
||||
|
||||
# Cavekit: The Engine Tuned for Low-Power Hardware
|
||||
|
||||
## Scope
|
||||
The owner, 2026-10-26: **"scan the source code for the entire uxp stack to look for optimizations that jihad browser
|
||||
could benefit from given the low powered hardware legacy webos runs on"**, starting from Pale Moon, Epyrus, Basilisk,
|
||||
K-Meleon, SeaLion, BrassMonkey, MailNews, Borealis Navigator, Ambassador, Arctic Fox, IceApe, IceDove, OpenKomodoIDE
|
||||
and the rtfreesoft builds.
|
||||
|
||||
The scan is done: `docs/research/lowpower-uxp.md` (2026-10-26) ranks twelve candidate levers with their sources. Its
|
||||
finding: upstream and the forks hold little Jihad lacks (the forks are application layers, Windows-XP work or
|
||||
PowerPC/AltiVec); the leverage is in what Jihad has not tuned for two cores, 1 GB and slow storage — the JS helper
|
||||
threads, the optimization level, the allocator's retained memory, a handful of prefs, lazy images. None is measured.
|
||||
|
||||
This kit turns the candidates into measured decisions: each lever is tried on the TouchPad against the same baseline,
|
||||
kept only where it gains, and recorded either way.
|
||||
|
||||
Reference: `docs/research/lowpower-uxp.md`; `build/webos-oe/mozconfig.goanna-arm`; `build/webos-oe/make-device-bundle.sh`
|
||||
(the device prefs); `packaging/prefs/jihad-platform-prefs.js`; cavekit-engine-update.md (engine patches go through
|
||||
the queue).
|
||||
|
||||
## Requirements
|
||||
|
||||
### R1: One baseline, measured the same way every time
|
||||
**Description:** A lever is judged against numbers taken the same way before and after.
|
||||
**Acceptance Criteria:**
|
||||
- [ ] A device benchmark script runs, on one variant, with sensors as the bench rules say: desktop Wikipedia
|
||||
(HP_TouchPad) load to idle (time, main-thread pump lengths), `jihad-jsbench.html`, a long article's resident memory
|
||||
after load and 30 s later (`/proc/<pid>/smaps` RSS and PSS of the daemon), daemon start to first frame (cold and
|
||||
warm), and the scripted pan's frame rate on Wikipedia and the long page
|
||||
- [ ] It prints one row per run and repeats each measurement at least five times, reporting median and spread
|
||||
- [ ] The baseline of the shipped build is recorded in `docs/research/lowpower-uxp.md` before any lever is tried
|
||||
**Dependencies:** none
|
||||
|
||||
### R2: The CPU levers measured
|
||||
**Description:** The levers that trade CPU (research rows 1, 2, 12).
|
||||
**Acceptance Criteria:**
|
||||
- [ ] JS helper threads capped for two cores (Ion and parse threads, and a lower priority for helpers) tried as an
|
||||
engine patch: the Wikipedia pumps and jsbench against the baseline; kept only if both improve or neither regresses
|
||||
beyond the spread
|
||||
- [ ] -O2 (whole tree, or js/src + layout + gfx) tried against -Os: script and paint times, libxul size, start time,
|
||||
resident memory; the choice recorded with the numbers
|
||||
- [ ] PGO is either tried (with the on-device profiling run's procedure written down) or declined by the owner
|
||||
**Dependencies:** R1, cavekit-engine-update.md R1
|
||||
|
||||
### R3: The memory levers measured
|
||||
**Description:** The levers that trade resident memory (research rows 3, 4).
|
||||
**Acceptance Criteria:**
|
||||
- [ ] The allocator's arena count and dirty-page cap set for the daemon (environment, no rebuild) and a purge after a
|
||||
load goes idle: resident memory after Wikipedia and a long article, and the script and pan numbers, against the
|
||||
baseline
|
||||
- [ ] Each memory pref of research row 4 tried alone (predictor off, empty GC chunks, image cache size, surface-cache
|
||||
expiry): its memory and time effect recorded; the kept ones in the device prefs with a comment naming the
|
||||
measurement
|
||||
- [ ] Three daemons running at once (one per variant) with the kept levers stay inside the memory budget of
|
||||
cavekit-device-build.md R5
|
||||
**Dependencies:** R1
|
||||
|
||||
### R4: The page-content levers, owner's choices
|
||||
**Description:** Levers that change what a page does (research rows 5-8).
|
||||
**Acceptance Criteria:**
|
||||
- [ ] Reduced motion (`prefers-reduced-motion`) is put to the owner as a choice (default on, a setting, or off) with
|
||||
its measured effect on two animated sites
|
||||
- [ ] Lazy image loading is put to the owner (carry upstream's reverted implementation with a scroll-driven check, or
|
||||
not) with its measured effect on a long article (requests, resident memory)
|
||||
- [ ] `image/jxl` dropped from the Accept headers, or kept with the reason
|
||||
- [ ] The VP9/WebM decoder A/B (ffvpx vs libvpx, MSE WebM) measured at 360p and 480p (dropped frames), and the faster
|
||||
path chosen without losing FLAC/MP3 playback
|
||||
**Dependencies:** R1, cavekit-gre-widgets.md R1
|
||||
|
||||
### R5: The build and startup levers measured
|
||||
**Description:** Research rows 9-11.
|
||||
**Acceptance Criteria:**
|
||||
- [ ] The GRE packed into `omni.ja` tried: start to first frame, cold and warm; kept if faster
|
||||
- [ ] The content backend A/B (Skia vs the current) measured for paint time on Wikipedia and judged by eye for text
|
||||
- [ ] Removing accessibility and the devtools server tried only if no shipped feature or supported add-on needs them
|
||||
(checked against cavekit-addons-extensions.md), with libxul size and start time
|
||||
**Dependencies:** R1
|
||||
|
||||
### R6: Every result recorded, nothing kept unmeasured
|
||||
**Acceptance Criteria:**
|
||||
- [ ] `docs/research/lowpower-uxp.md` has, per lever, the numbers and the decision (kept / dropped / owner's call)
|
||||
- [ ] Every kept lever is in the build or the device prefs with a comment pointing at its measurement; every engine
|
||||
change is a patch in the queue (cavekit-engine-update.md R1)
|
||||
- [ ] Stock webOS 3.0.5 is not on the bench: any lever whose effect may differ there is named for the owner
|
||||
**Dependencies:** R2, R3, R4, R5
|
||||
|
||||
## Out of Scope
|
||||
- The GPU compositor's own levers (cavekit-gpu-rendering.md R3, T-505): measured there
|
||||
- Engine features beyond lazy images; an engine update (cavekit-engine-release-2026-10.md)
|
||||
|
||||
## Cross-References
|
||||
- cavekit-gpu-rendering.md — the pan rate this kit's baseline also measures
|
||||
- cavekit-device-build.md R5 — the memory budget
|
||||
- cavekit-engine-update.md — the patch queue
|
||||
- cavekit-modern-web.md — sites' behaviour under the levers
|
||||
|
||||
## Changelog
|
||||
- 2026-10-26: created from the owner's request and the day's research (`docs/research/lowpower-uxp.md`).
|
||||
@@ -177,6 +177,10 @@ Verified on desktop x86_64 AND cross-built + rendering on the HP TouchPad unless
|
||||
| Proxies & Certificates | cavekit-proxies-certs.md | 6 | 🟢 24 met / 2 partial / 0 open (counted 2026-10-25; latest entry 2026-10-25). 2026-10-13: built and device-verified (Enyo throughout, Mochi and Mojo in part); the Relay's pass-through live on the server and checked on the device; 24 met, 2 partial (typing them is the finger round); the Relay no longer passes users' addresses to sites | Settings → Proxy (none, webOS's setting, the Relay, WebOne, own, PAC); webOS's added and patched CAs trusted; a proxy's CA asked when opened; the Relay's CA an option, off |
|
||||
| Certificate Trust | cavekit-certificate-trust.md | 7 | ✅ 20 met / 0 partial / 0 open (counted 2026-10-25; latest entry 2026-10-25). done 2026-10-25: roots = UXP release (Pale Moon, Basilisk; patch 0060), 24 removed roots gone, 19 added, audit script + pins + update warning; TLS floor 1.2; the Trust dialog only for overridable errors; CRL-only revocation invisible (no CRL/CRLite in UXP, recorded); T-534 (NSS TLS 1.3 label) open |
|
||||
| Finger Emulation | cavekit-finger-emulation.md | 4 | 🟡 12 met / 2 partial / 1 open (counted 2026-10-25; latest entry 2026-10-24). The emulated finger on the real input path (tools/device/finger), the finger round of docs/FINGER-TESTS.md driven and judged by eye; what stays a person's (hearing, a physical keyboard). | An emulated finger that sends the touch panel's own datagrams to LunaSysMgr, and the round of finger tests it drives. |
|
||||
| Low-Power Engine Tuning | cavekit-lowpower-uxp.md | 6 | ⚪ 0 met / 0 partial / 19 open (new 2026-10-26). The scan done (`docs/research/lowpower-uxp.md`: twelve levers ranked; the forks hold little Jihad lacks); nothing measured yet | Each candidate lever (JS helper threads for two cores, -O2, the allocator's retained memory, memory prefs, reduced motion, lazy images, decoders, omni.ja) measured on the TouchPad against one baseline, kept only where it gains |
|
||||
| The Engine's Next Release | cavekit-engine-release-2026-10.md | 4 | ⚪ 1 met / 0 partial / 10 open (new 2026-10-26). The owner: wait for the next `RB_` tag (none newer than our base on 2026-10-26; RC_20261026 on the release branch) | The engine moved to UXP's next release with the update procedure: the queue rebased, the roots re-audited, the device re-checked where the new commits touch |
|
||||
| The webOS SDK at Its Latest | cavekit-webos-sdk-update.md | 3 | ⚪ 0 met / 0 partial / 7 open (new 2026-10-26). HP's PDK is final; webOS Archive's Redux SDK 0.4 -> 0.4.1; the owner: also refresh `/opt/PalmSDK` | The SDK submodule and its novacom built from it at the latest release, proven on the bench; the machine's own SDK refreshed |
|
||||
| The Atlas References, Current | cavekit-atlas-references.md | 3 | ⚪ 0 met / 0 partial / 9 open (new 2026-10-26). The app moved to webOS-ports/org.webosports.app.atlas; the adapter and server are Herrie82's (their fork parents are the 2013 code) | The Atlas reference checkouts tracking their real upstreams, one update command, what moved weighed for Jihad |
|
||||
|
||||
Totals (recounted from the kit files 2026-10-01): **15 domains, 98 requirements, 391 acceptance criteria — 338 met, 31 partial, 22 open.** Of the 22 open, 9 are the CE 3.1.0 re-verification sweep boxes (cavekit-device-build.md R4), one of which — the human-only residue — no agent can close. ~~Totals: 15 domains, 94 requirements, 348 acceptance criteria — 313 met, 11 partial, 24 open~~
|
||||
*(2026-08-06 session 2, all device-verified: preferences-ui R5's two criteria (the settings page's
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
created: "2026-10-26"
|
||||
last_edited: "2026-10-26"
|
||||
complexity: quick
|
||||
---
|
||||
|
||||
# Cavekit: The webOS SDK at Its Latest
|
||||
|
||||
## Scope
|
||||
The owner, 2026-10-26: **"update the webos sdk to the latest."**
|
||||
|
||||
What "the webOS SDK" is in this repository (read 2026-10-26):
|
||||
- **The SDK's command-line tools** (palm-package, palm-install, palm-launch, palm-log; Java wrappers around
|
||||
`webos-tools.jar`) and **novacom/novacomd**: the submodule `third_party/webos-sdk-redux` (webOS Archive's
|
||||
community-maintained SDK, https://github.com/webOSArchive/webos-sdk-redux), pinned at `f165ba9` (2026-10-09, the
|
||||
0.4 tree). `build/webos-oe/host-path.sh` puts its `Current/bin` first on PATH; `tools/host/build-novacom.sh` builds
|
||||
novacom/novacomd from it into `tools/host/bin/`. Upstream main is `5349208` (2026-10-19), **release 0.4.1**: a
|
||||
Windows novacomd and setup wizard, macOS driver packages, and a +293-line `novacomd/src/host/usb-linux.c` (upstream
|
||||
A/B-tested it on Linux against a CE 3.1.0 TouchPad, no regressions). Known upstream issue: novacomd does not compile
|
||||
with gcc 15 (C23 `bool`); `-std=gnu17` works around it (this host has gcc 14.2.1).
|
||||
- **The Palm PDK** (CodeSourcery gcc 4.3.3, the adapter's compiler): HP's final 3.0.5 build,
|
||||
`palm-sdk_3.0.5-svn528736-pho676_i386.deb`, sha256-pinned in `build/webos-oe/fetch-pdk.sh`. Nothing newer exists;
|
||||
the adapter's ABI is tied to it. It stays.
|
||||
- Not the SDK: the project's own cross toolchain (crosstool-NG 1.25.0) and sysroot, and the webos-mcp docs server.
|
||||
|
||||
Reference: the research brief of 2026-10-26 (this session), `docs/DEVICE-BUILD.md`, cavekit-device-build.md R11.
|
||||
|
||||
## Requirements
|
||||
|
||||
### R1: The SDK submodule at upstream's latest release
|
||||
**Acceptance Criteria:**
|
||||
- [ ] `third_party/webos-sdk-redux` is at upstream's 0.4.1 commit (`5349208` or the newest release commit on the day it
|
||||
is done), committed as the gitlink; `Current` resolves to the 0.4.1 tree
|
||||
- [ ] The PDK pin (`fetch-pdk.sh`, its sha256) is unchanged and the adapter still builds with it
|
||||
- [ ] `docs/DEVICE-BUILD.md` and cavekit-device-build.md R11 name 0.4.1
|
||||
**Dependencies:** none
|
||||
|
||||
### R2: The tools rebuilt and proven on the device
|
||||
**Acceptance Criteria:**
|
||||
- [ ] `tools/host/build-novacom.sh` rebuilds novacom/novacomd from 0.4.1, passing `-std=gnu17` so a gcc 15 host also
|
||||
builds it
|
||||
- [ ] On the bench (CE 3.1.0): `novacom -l` lists the device; a `novacom run`, a `put`/`get` of a 40 MB file and a
|
||||
full `push-variant.sh` all succeed (one session at a time); `palm-package`, `palm-install` and `palm-launch` build,
|
||||
install and launch the three packages
|
||||
- [ ] Stock 3.0.5 is not on the bench: its check is the owner's (asked before it is claimed)
|
||||
**Dependencies:** R1
|
||||
|
||||
### R3: The machine's own SDK (outside the repository), if the owner wants it
|
||||
**Acceptance Criteria:**
|
||||
- [ ] *(The owner, 2026-10-26: **yes, refresh it.**)* If the owner says so, `/opt/PalmSDK` is refreshed with 0.4.1's installer (a root step: the owner runs the command
|
||||
the session hands over), and `/usr/local/bin/palm-package` reports it; otherwise left as it is and noted
|
||||
**Dependencies:** R1
|
||||
|
||||
## Out of Scope
|
||||
- A replacement for the proprietary PDK compiler (a crosstool-NG gcc 4.3 build): a separate decision
|
||||
- The Windows and macOS parts of 0.4.1
|
||||
|
||||
## Cross-References
|
||||
- cavekit-device-build.md R11 — the host tools and their pins
|
||||
- cavekit-finger-emulation.md — its tools run over novacom
|
||||
|
||||
## Changelog
|
||||
- 2026-10-26: created from the owner's request and the day's research.
|
||||
@@ -490,6 +490,31 @@ Owner: "continue implementing everything you can using cavekit 3.1 with codex ad
|
||||
| T-363 | Review round 8 (inspector; Codex out of credits until Oct 7 1:53 AM) and fixes; re-run Codex on the range when credits return | cavekit-addons-extensions.md | addons R7/R10; mojo R6 | T-355,T-356,T-357,T-358,T-359,T-360,T-361,T-362 | no | M |
|
||||
| T-364 | [OWNER] Finger: Mojo pinch, the circles' menus, the in-field reload; Flash game feel | cavekit-mojo-ui.md | mojo R6; addons R7 | T-363 | yes | S |
|
||||
|
||||
## Tier 91 — Four kits of 2026-10-26: low-power levers, the engine's next release, the webOS SDK, the Atlas references
|
||||
|
||||
The owner's requests of 2026-10-26 (evening) and their choices the same day: **T-505 first, then these**; the engine
|
||||
**waits for the next `RB_` tag** (the newest is still our base RB_20261006; RC_20261026 is on the release branch);
|
||||
the SDK to Redux 0.4.1 **and** `/opt/PalmSDK` refreshed. Research: `docs/research/lowpower-uxp.md` and the kits' scopes.
|
||||
|
||||
| ID | Task | Kit | Reqs | Depends | Parallel | Size | Status |
|
||||
|----|------|-----|------|---------|----------|------|--------|
|
||||
| T-545 | The Atlas checkouts on their real upstreams: the app's origin to `webOS-ports/org.webosports.app.atlas`, the fork parents as a read-only `ancestor` remote, all branches and tags fetched, default branches fast-forwarded only; a dirty or diverged checkout reported, not reset | cavekit-atlas-references.md | R1 | T-505 | yes | S | PENDING |
|
||||
| T-546 | `tools/host/update-references.sh`: R1 for the four Atlas checkouts and any reference checkout named (webos-docs, lunace), what arrived per checkout, refuses on uncommitted changes | cavekit-atlas-references.md | R2 | T-545 | yes | S | PENDING |
|
||||
| T-547 | `docs/REFERENCES.md`: the last-read heads, and the commits since weighed for Jihad (adopt / not applicable / owner's call; the owner's calls asked as multiple choice) | cavekit-atlas-references.md | R3 | T-546 | yes | S | PENDING |
|
||||
| T-548 | The SDK submodule to Redux 0.4.1 (`5349208` or newer): the gitlink, `Current` checked, the PDK pin unchanged, DEVICE-BUILD.md and device-build R11 updated | cavekit-webos-sdk-update.md | R1 | T-505 | yes | S | PENDING |
|
||||
| T-549 | novacom/novacomd rebuilt from 0.4.1 (`-std=gnu17` passed); on the bench: `novacom -l`, run, a 40 MB put/get, a full push-variant.sh, palm-package/install/launch of the three packages | cavekit-webos-sdk-update.md | R2 | T-548 | no | S | PENDING |
|
||||
| T-550 | `/opt/PalmSDK` refreshed with 0.4.1's installer: the exact root command handed to the owner (pause for sudo), `/usr/local/bin/palm-package` checked after | cavekit-webos-sdk-update.md | R3 | T-548 | yes | S | PENDING |
|
||||
| T-551 | Watch for UXP's next `RB_` tag (`git ls-remote --tags` of the UXP repository at each session start); when it appears, read its range against the queue and start T-552 | cavekit-engine-release-2026-10.md | R1 | T-505 | yes | S | WAITING (no `RB_` newer than RB_20261006 on 2026-10-26) |
|
||||
| T-552 | The queue rebased by `update-engine.sh <tag>` / `--finish`: 0060 dropped or kept empty (the owner's word), pins, `patch-queue.sh --check`, `check-engine-pins.sh`, `check-engine-api.py`, the build id, ENGINE-SOURCE.md | cavekit-engine-release-2026-10.md | R1, R2 | T-551 | no | M | PENDING |
|
||||
| T-553 | The roots after the update: `audit-roots.py` 0 findings, the roots' pin on the new base | cavekit-engine-release-2026-10.md | R3 | T-552 | yes | S | PENDING |
|
||||
| T-554 | The new engine on the device: desktop tests, ARM engine + daemon + three packages by full pushes, default-check ×3, the touched areas (jar:/resource: pages, cookies and history across the SQLite update, selection, an SVG filter page); the push is the owner's | cavekit-engine-release-2026-10.md | R4 | T-553 | no | M | PENDING |
|
||||
| T-555 | The low-power baseline: one device benchmark script (Wikipedia load to idle and its pumps, jsbench, a long article's RSS/PSS now and after 30 s, daemon start cold and warm, the scripted pan on two pages), five runs each, medians and spread; the shipped build's baseline recorded | cavekit-lowpower-uxp.md | R1 | T-505 | no | M | PENDING |
|
||||
| T-556 | The CPU levers: JS helper threads for two cores (an engine patch), -O2 vs -Os, PGO tried or declined by the owner | cavekit-lowpower-uxp.md | R2 | T-555 | no | L | PENDING |
|
||||
| T-557 | The memory levers: jemalloc arenas and dirty cap for the daemon plus a purge after load idle; the memory prefs one by one; three daemons inside device-build R5's budget | cavekit-lowpower-uxp.md | R3 | T-555 | no | M | PENDING |
|
||||
| T-558 | The page-content levers: reduced motion and lazy images measured and put to the owner; `image/jxl` in the Accept headers; the VP9/WebM decoder A/B | cavekit-lowpower-uxp.md | R4 | T-555 | no | M | PENDING |
|
||||
| T-559 | The build and startup levers: omni.ja, the content backend A/B, accessibility/devtools server off if nothing needs them | cavekit-lowpower-uxp.md | R5 | T-555 | no | M | PENDING |
|
||||
| T-560 | Every lever's numbers and decision in `docs/research/lowpower-uxp.md`; kept levers commented in the build/prefs, engine changes in the queue; levers that may differ on stock 3.0.5 named for the owner | cavekit-lowpower-uxp.md | R6 | T-556, T-557, T-558, T-559 | yes | S | PENDING |
|
||||
|
||||
## Tier 90 — Certificate trust (2026-10-25; cavekit-certificate-trust.md)
|
||||
|
||||
The owner's direction of 2026-10-25: the roots audited for exploited or abandoned CAs, the removed ones gone, parity
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
# Low-power levers in the UXP stack, for the TouchPad
|
||||
|
||||
Research of 2026-10-26 (two research passes in one session; read-only; nothing measured on the device yet).
|
||||
Subject: the local engine `third_party/uxp` (UXP `RB_20261006` + Jihad's 69 patches), Moonchild Productions'
|
||||
projects (Pale Moon, Basilisk, Epyrus, the UXP repository's history and issues after our base), and the third-party
|
||||
UXP and Gecko-legacy forks the owner listed. Compared against what Jihad already sets:
|
||||
`build/webos-oe/mozconfig.goanna-arm`, the device prefs appended by `build/webos-oe/make-device-bundle.sh`,
|
||||
`packaging/prefs/jihad-platform-prefs.js`, `build/desktop/patches/`.
|
||||
|
||||
The hardware: two Scorpion cores (ARMv7-A, NEON, softfp) up to 1.2 GHz under an ondemand governor, 1 GB RAM shared
|
||||
with the OS and up to three daemons, an Adreno 220 shared with the system compositor, slow eMMC, a 40 MB `/tmp`.
|
||||
Pain points: pan frame rate, heavy-page script (desktop Wikipedia's 1-3 s pumps), ~200 MB per daemon, startup.
|
||||
|
||||
Tags: **[read]** read in the source; **[upstream]** an upstream report or commit; **[est]** an estimate, not measured.
|
||||
|
||||
## 1. What upstream and the forks have
|
||||
|
||||
- **UXP after our base:** nothing performance-related. `release` (RC_20261026) and `master` carry security fixes,
|
||||
libjxl 0.12, SQLite 3.54.1, certdata. Nothing to cherry-pick for speed. [upstream]
|
||||
- **SeaLion, BrassMonkey (wicknix):** application layers over stock UXP (`platform` is a submodule of upstream UXP);
|
||||
no AltiVec, PPC JIT or GC work. `.mozconfig`: `-O2`, `--disable-webrtc/-devtools/-safe-browsing/-necko-wifi`.
|
||||
- **Arctic Fox / AF-OSX-PPC:** TenFourFox-lineage Firefox 38; its SIMD is AltiVec (`yuv_convert_ppc.cpp`,
|
||||
qcms, Blur, nsTextFragment, UTF-8). The ARM equivalents mostly exist in UXP already (`gfx/2d/BlurNEON.cpp`,
|
||||
`gfx/ycbcr/yuv_convert_arm.cpp`, libpng NEON). One pref: `image.mem.decode_bytes_at_a_time=200000` (ours 16384).
|
||||
The comment in `make-device-bundle.sh` that Arctic Fox ships `gc_incremental_slice_ms=10` does not match the tree
|
||||
read (100, "issue 253").
|
||||
- **rtfreesoft / roytam1's UXP branches (and the boc-uxp MailNews / Borealis builds):** Windows-XP and SSE-less work
|
||||
(SRWLOCK, pre-NT6 ICU, AVX guards): none applies to ARM Linux. Their perf commits are already in our base except
|
||||
two below (parse threads, Xoroshiro register order).
|
||||
- **IceApe/IceDove-UXP (Hyperbola), Ambassador, OpenKomodoIDE, Epyrus:** nothing for a browser engine's speed.
|
||||
- **K-Meleon forum thread:** unreadable (the host served a mismatched certificate); unknown.
|
||||
- **Pale Moon / Basilisk prefs:** `network.predictor.enabled=false` (both); Fennec 52's mobile prefs are the closest
|
||||
low-memory reference (`mobile.js`).
|
||||
|
||||
## 2. The candidates, ranked
|
||||
|
||||
| # | lever | where | why it should help here | gain [est] | risk | in Jihad? |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | **JS helper threads capped and niced on 2 cores**: Ion compile threads 1 (not `cpuCount+4` = 6), parse threads 1 (roytam1 `04e063dde`), the helpers at a lower priority | `js/src/vm/HelperThreads.cpp:72-81, ~919-974` [read] | six normal-priority helpers compete with the main thread and the compositor on two cores; upstream issue #3172 reports large slowdowns on dual cores [upstream] | 10-30 % off the Wikipedia pumps | slower Ion warm-up | no |
|
||||
| 2 | **-O2 instead of -Os** (all, or js/src + layout + gfx), later GCC PGO by hand | `mozconfig.goanna-arm:69`; UXP's own default `old-configure.in:821-825` [read] | the interpreter, Baseline, regexp and layout favour -O2 on an in-order-ish core | 5-15 % CPU; PGO 10-20 % more | libxul +10-15 % (page cache), a full rebuild; PGO needs on-device profiling runs | no |
|
||||
| 3 | **jemalloc arenas and dirty pages** (`MALLOC_OPTIONS`: fewer arenas, smaller dirty cap), and a purge a few seconds after a load goes idle | `memory/mozjemalloc/jemalloc.c:413, ~5362, 5586` [read]; purge today only on pressure or the last card's close (`EngineHost.cpp:177-182`) | 8 arenas x up to 16 MB of freed-but-resident pages each | 20-60 MB less resident per daemon after a heavy page | more madvise calls; lock contention | no |
|
||||
| 4 | **prefs**: `network.predictor.enabled=false`; `javascript.options.mem.gc_max_empty_chunk_count` 30 -> 4; `image.cache.size` 25 MB -> 4-8 MB; `image.mem.surfacecache.min_expiration_ms` 180000 -> 30000; `image.mem.decode_bytes_at_a_time` 16384 -> 65536; `html5.flushtimer.*delay` 120 -> 250 ms | `all.js:1911, 4210, 4257, 4261, 4515` [read]; Pale Moon/Basilisk/Fennec 52 [upstream] | less SQLite I/O, fewer cached empty GC chunks and images, fewer decode dispatches and load reflows | a few to ~30 MB; some load time | small; each measured alone | no |
|
||||
| 5 | **`ui.prefersReducedMotion=1`** as a default or a user toggle | `nsMediaFeatures.cpp:613` [read]; Jihad sets 0 | many sites drop CSS animation and parallax: less paint and compose | site-dependent, can be large | sites look plainer: the owner's call | no (0) |
|
||||
| 6 | **lazy image loading** (`loading="lazy"`) carried as a patch: upstream wrote it and reverted it twice (7574161abe, 17b7e131b4, 5185da6cf0; reverts 30a1c98c9d, 5212aa7bf1), its 250 ms poll per image replaced by a scroll check | `dom/html/HTMLImageElement.cpp` [read] | long pages fetch and decode every image | large on long pages (network, decode, memory) | a reverted feature: our own maintenance | no |
|
||||
| 7 | **no `image/jxl` in the Accept headers** | `goanna.js:1393, 3326` [read] | software JXL decode is expensive on Scorpion; servers fall back to WebP/JPEG/PNG (NEON paths) | only on JXL sites | none | no |
|
||||
| 8 | **media**: `media.ffvpx.enabled=false` A/B (ffvpx's ARM tree has no VP8/VP9 NEON, libvpx has); MSE WebM off so sites offer H.264 | `PDMFactory.cpp:355-358` [read] | VP9 decode is CPU-bound here | dropped frames at 360p/480p | moves FLAC/MP3 paths; needs a working H.264 path | no |
|
||||
| 9 | **Skia content backend** A/B | `gfx.content.azure.backends`; `gfxPlatformHeadless.cpp:97-102` [read] | Fennec 52 used Skia+NEON for content | paint time unknown | text rendering differences | no |
|
||||
| 10 | **startup**: the GRE packed into `omni.ja` (2126 loose files today); elfhack-style relocation packing (361781 relative relocations) | `make-device-bundle.sh:143-147` [read] | fewer opens and stats on eMMC | start to first frame, tens to hundreds of ms | packaging change | no |
|
||||
| 11 | `--disable-accessibility`, `--disable-devtools-server` | `old-configure.in:2456, 4093` [read] | a smaller libxul | page-in and startup | add-ons needing them break (cavekit-addons-extensions.md) | no |
|
||||
| 12 | Xoroshiro128++ register order on 32-bit (roytam1 `454565b2a`, `b69cdf1cd`); zlib-ng (UXP #3085, open) | [upstream] | fewer spills in `Math.random`; faster inflate | tiny | — | no |
|
||||
|
||||
Already in Jihad (verified by the research): Thumb-2, `-Os`, `--enable-release`, gold with ICF, jemalloc in the
|
||||
program, `--disable-webrtc/-gamepad/-necko-wifi/-dbus/-updater/-crashreporter/-tests/-printing`; surface cache 32 MB,
|
||||
`size_factor` 8, no bfcache viewers; the JS GC set (high water mark 32, slice 5 ms, heap growth 120, allocation
|
||||
threshold 64 MB tuned on jsbench); media cache 32 MB; `layout.frame_rate=30`; RAM cache 16 MB, disk cache 50 MB;
|
||||
`memory.free_dirty_pages`; the parse-thread cap of 2 (upstream 0f0cbed455).
|
||||
|
||||
## 3. Attractive but not applicable
|
||||
|
||||
- `content.notify.interval`, `content.sink.*`: only `nsContentSink` reads them, not the HTML5 parser.
|
||||
- `image.mem.max_decoded_image_kb`: no such pref in UXP.
|
||||
- mimalloc (`--enable-mimalloc`): throughput-tuned; Jihad keeps jemalloc for its reporter and purge.
|
||||
- Parallel/idle GC (#3092) and incremental CC (#3179): reverted or slower upstream.
|
||||
- Fennec's `layers.low-precision-buffer`, progressive paint, `gfx.displayport.strategy`: APZ/Android only.
|
||||
- `--disable-precompiled-startupcache` (SeaLion): the opposite of what startup needs.
|
||||
- PPC/GCC 4.8 workarounds (`-fpermissive`, `-flax-vector-conversions`), AltiVec paths, AV1 (not built).
|
||||
|
||||
## Sources
|
||||
|
||||
UXP: https://repo.palemoon.org/MoonchildProductions/UXP (issues 3030, 3085, 3092, 3172, 3179); Pale Moon prefs
|
||||
`palemoon/app/profile/palemoon.js:618`; Basilisk `basilisk/app/profile/basilisk.js:457-460, 627`; Fennec 52
|
||||
`mobile/android/app/mobile.js:84, 397-405, 583` (hg.mozilla.org FIREFOX_52_0_RELEASE); https://github.com/wicknix/SeaLion,
|
||||
/brass-monkey, /AF-OSX-PPC, /SpiderWeb; https://github.com/rmottola/Arctic-Fox; https://rtfreesoft.blogspot.com/ and
|
||||
https://github.com/roytam1/UXP (commits 04e063dde, 454565b2a, b69cdf1cd, c7116a213, b44216a88);
|
||||
https://git.hyperbola.info:50100/software/icedove-uxp.git/; https://repo.hyperbola.info:50000/other/iceape-uxp/;
|
||||
https://github.com/Ascrod/ambassador; https://github.com/ActiveState/OpenKomodoIDE;
|
||||
https://repo.palemoon.org/athenian200/epyrus; https://repo.palemoon.org/Basilisk-Dev/Basilisk.
|
||||
Reference in new issue
Block a user