Restore disable_configstore, EuiccDisabler and thermal CDEV guards, branding and rebuild/sync helpers; document device roles, laptop migration, and Gitea. Co-authored-by: Cursor <cursoragent@cursor.com>
6.9 KiB
009 — Device polish after LAB daily-driver / GOLDEN rebacon (2026-10-16)
Owner test of the current Magisk ship zip. LAB is the daily driver (do not wipe/flash without an explicit owner ask). GOLDEN was factory-reset and now runs our build — it is no longer a live AXP.OS oracle.
ADB / debug: GOLDEN 11071JEC203839 (connected). Prefer GOLDEN for
logcat / vendor probes. LAB 11231JEC207477 stays main phone — read-only
unless the owner says otherwise.
AXP parity oracle: code and dumps on a16.ssystems.de
(/srv/rom/references/axp/, EXTENDROM, archived golden captures) — not
the live GOLDEN system anymore.
Measured on GOLDEN (our zip): 23.2-20261008-PRO-sunfish,
ro.build.date=Sun Oct 11 08:24:09 UTC 2026, kernel
4.14.357-openela-g28f9290ae067-dirty #81.
Priority high
1. configstore-hal / VINTF — root cause + fix in WT
- Every ~5s:
android.hardware.configstore@1.1::ISurfaceFlingerConfigs/defaultmust be in VINTF manifest → service aborts and init restarts it. - Present on current zip:
/vendor/etc/init/android.hardware.configstore@1.1-service.rc(servicevendor.configstore-hal), binary under/vendor/bin/hw/…. - Root cause:
build/make/target/product/base_vendor.mkpullsandroid.hardware.configstore@1.1-serviceviaPRODUCT_PACKAGES_SHIPPING_API_LEVEL_29. Lineagedevice/google/sunfish/device-lineage.mknormally packagesdisable_configstore(Soongoverridesstub) so the HIDL HAL is not installed. Wave 4 treated that as a “lab-only command” and removed it → empty Configstore stanza → real HAL ships → A16 VINTF crash-loop. - Fix (local WT):
apply_009_drop_lab_only_commands.pyno longer dropsdisable_configstore; it restores it if missing. Bacon postflight requires HAL+rc absent and/vendor/bin/disable_configstorepresent. - Lands on next bacon/OTA; no live flash of LAB.
2. Thermal — keep both; fix false HAL ERROR (WT)
Why two: complementary, not duplicates.
| Process | Role |
|---|---|
android.hardware.thermal-service.pixel |
Android HAL: temps + cooling device reporting (thermal_info_config.json) |
thermal-engine |
QC closed-loop: CPU/GPU/fcc/modem actions in thermal-engine-sunfish.conf |
Stock packaging on a16: device.mk packs the pixel HAL; vendor +
init.hardware.rc start vendor.thermal-engine.
pixel-thermal ERROR root cause (confirmed):
thermal_info_config_sunfish.json lists CoolingDevices
(thermal-cpufreq-0/7, thermal-devfreq-0, fcc) but has zero
BindedCdev/CdevRequest. Only sunfish among device/google/*/thermal_info*
is unbound like that — by design (engine mitigates). Newer pixel HAL still
runs logCoolingDeviceStatus() ~every few minutes and
getCdevMaxRequest() ERROR-spams for every unbound cdev. Sensors still read
OK (skin-therm-monitor, etc.). Parallel stack works; log was lying.
Fix: apply_009_thermal_cdev_log.py — skip unbound cdevs in the CDEV log
(VERBOSE note); real binded-path ERROR unchanged.
thermal-engine (Magisk su 2026-10-16 after Magisk install): both services
running, vendor.thermal.link_ready=1. Sysfs has full cooling set
(fcc, thermal-cpufreq-*, thermal-devfreq-0, modem_*, adsp_vdd, …).
Boot dmesg: early Couldn't get temp USB port thermal zone rc=-22 (before
zones ready), charger WLC cooling missing (wireless), SELinux deny
hal_power → hal_thermal find (separate). No live ion/msm_thermal spam in
current buffers after reboot — treat earlier reports as boot noise unless
reproduced under load. Keep engine.
Priority medium
3. OpenEUICC / EuiccDisabler — fix in WT
im.angry.openeuiccinstalled (/system_ext/priv-app/OpenEUICC).- Crash path is GoogleParts
device/google/sunfish/parts/.../EuiccDisabler.java(org.lineageos.settings.EuiccDisabler), not EuiccPolicy Kotlin (that already guards). Stack:Unknown package: com.google.android.euicc. - Fix:
apply_009_euicc_disabler_guard.py— skip missing packages beforesetApplicationEnabledSetting. Does not retarget to OpenEUICC / does not disableim.angry.openeuicc. Wired into ship bacon after wave1 euicc drop.
4. MediaCodec / media_quality — closed (expected on phone)
Reproduced 2026-10-16 on GOLDEN (Jelly browser → HW VP9 c2.qti.vp9.decoder):
media_quality service unavailable, skipping updatePictureProfileis ALOGI.MediaQualityServiceonly starts whenmediaQualityFw() && isTv(SystemServer.java). Phones never publishmedia_quality; MediaCodec skips picture profiles. Not a VINTF/codec bug.Failed to query component interface …: 6=BAD_INDEXwhile probing C2 allocator params; same session then creates pools OK and plays video.- No ROM fix. Do not ship TV MediaQuality just to silence an INFO line.
5. Audio SLIM_0_RX Format — root cause known; no simple ship fix
Reproduced on every speaker open (browser video). Audio still works.
- Card id:
sm6150bolerosnd(Bolero / CDC-DMA, not classic Slimbus). - Proprietary
audio.primary.sm6150.so(vendor blob) defaultsis_slimbus_interface=trueand only clears it for an allowlist of full card names (sm6150-idp-snd-card,sm6150-qrd-snd-card, …).sm6150bolerosndis missing → HAL looks upSLIM_0_RX Format, which does not exist; Bolero expectsWSA_CDC_DMA_RX_0 Format(same logic exists in CAFplatform.cbehind!is_slimbus_interface). - Soft-fail: ALOGE then continues (channel map / playback OK).
- Fix would mean rebuilding/replacing
audio.primary.sm6150from CAF with one card-name allowlist line — not a mixer_paths XML tweak. Deferred unless we deliberately take on audio HAL from source (risk vs log noise).
Build hygiene
- Kernel uname shows
-dirtyon this bacon — rebuild from a clean tree or document intentional WT deltas in the artifact notes. - Non–Direct Boot apps (e.g. Metrolist) can crash before unlock — app issue, not ROM.
Does not need changes (this session)
F2FS / storage, AVB/verity, encryption, SELinux enforcing, Wi‑Fi / BT / calls / camera / video / audio functional path. Nora display-during-video is device- specific, not ROM.
Next bacon / OTA note
This list is device polish, not the full upstream OTA path. Still follow
docs/009-ota-rebuild-checklist.md + docs/009-upstream-rebase-ota.md for
sync / Magisk / apps gates. Land polish as vendor apply scripts + postflight
checks where possible.
Host commands (2026-10-16 polish bacon)
# From laptop (after WT edits):
./scripts/009-sync-ota-stage-to-host.sh
./scripts/009-relaunch-polish-bacon.sh
# On rom-dev01:
cat /srv/rom/artifacts/detach-bacon009polish20261016.status
tmux attach -t bacon009polish20261016 # optional
Apply wiring in ship bacon (order): euicc guard → thermal CDEV log → … → wave4
drop_lab_only_commands (configstore restore). See
scripts/009-bacon-axp-stage1-combo4-cve-hi-releasekeys.sh.