Skip to content

package: stop selecting jsonfilter, mirroring firmware #2304 - #128

Merged
openipc-ai merged 1 commit into
masterfrom
package/drop-jsonfilter-mirroring-firmware-2304
Aug 25, 2026
Merged

package: stop selecting jsonfilter, mirroring firmware #2304#128
openipc-ai merged 1 commit into
masterfrom
package/drop-jsonfilter-mirroring-firmware-2304

Conversation

@openipc-ai

@openipc-ai openipc-ai commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Fixes the three devices that have been red on the nightly, and unblocks #126 and #127 — whose only failures are these same three.

What is wrong

OpenIPC/firmware dropped BR2_PACKAGE_JSONFILTER from every one of its defconfigs in #2304, once the WebUI stopped calling it. builder's defconfigs are its own files, so 97 of them kept selecting it. jsonfilter selects JSON_C and LIBUBOX, and on a device that enables neither uqmi-openipc nor wifibroadcast-ng, nothing else selects libubox — so it and jsonfilter shipped for nothing.

That is what has had three devices over their rootfs cap:

device rootfs over by
hi3518ev200_lite_switcam-hs303 5124KB / 5120KB 4KB
ssc333_lite_babysense-see-hd-ip206 5124KB / 5120KB 4KB
ssc333_lite_meari-speed-6s 5128KB / 5120KB 8KB

How little it took

Bisecting meari across firmware revisions: the last passing nightly (08-23) built firmware 4223e6ff, the first failing one (08-24) built f5c75187. Two commits separate them, one CI-only. So it is #2301, which added 408 bytes to the comment-stripped sysupgrade:

4223e6ff  raw=53352  stripped=22621
f5c75187  raw=56722  stripped=23029

408 bytes of a genuine bug fix pushed the image over a 4KB padding step, because it had no headroom at all. The fix is to give these images headroom, not to give back the bug fix.

Measured

ssc333_lite_meari-speed-6s, built the way builder.sh builds it — devices/<item>/ copied over a firmware checkout at master, clean tree both times:

before   rootfs.squashfs 5128KB/5120KB   size exceeded by: 8KB
after    rootfs.squashfs 5096KB/5120KB   24KB spare

−32KB, from /usr/bin/jsonfilter (18068 raw) and /usr/lib/libubox.so (30404 raw).

And the hisilicon one, built the same way — different SoC, different vendor SDK, same result:

hi3518ev200_lite_switcam-hs303
before   rootfs.squashfs 5124KB/5120KB   size exceeded by: 4KB
after    rootfs.squashfs 5100KB/5120KB   20KB spare

Neither /usr/bin/jsonfilter nor /usr/lib/libubox.so is in either target tree afterwards. ssc333_lite_babysense-see-hd-ip206 is not built here: it is the same SoC, variant and cap as meari and needs 4KB where meari needed 8KB, so it is covered by the smaller of the two measurements.

json-c does not go: majestic lists it in MAJESTIC_DEPENDENCIES, so buildroot builds and installs it whether or not BR2_PACKAGE_JSON_C is set. Only those two files leave the image — worth stating because the size report attributes 17KB to json-c and that is not part of this saving.

What keeps it

Two consumers genuinely need jsonfilter, and both keep it:

  • devices/apfpv — its own etc/init.d/S99msposd reads majestic's config.json through it, and ssc338q_apfpv / ssc378qe_apfpv do not enable wifibroadcast-ng. Those two keep the symbol with the reason written above the line, which is why this is 95 defconfigs and not 97. Same undeclared-runtime-dependency trap firmware #2305 had to fix.
  • every other FPV device — enables wifibroadcast-ng, whose Config.in selects BR2_PACKAGE_JSONFILTER (added by #2305) for the same script. They keep it without saying so.

LTE devices keep libubox through uqmi-openipc, which selects it independently.

Nothing else here calls jsonfilter: grepping devices/ and package/ finds only that one S99msposd line, and firmware's tree has no caller left outside wifibroadcast-ng.

Related

Third instance of the same root cause @flyrouter raised on firmware#2308: builder keeps its own copies of files firmware also maintains, and a fleet-wide change to firmware does not reach them. #126 is the kernel-config instance; this is the defconfig instance.

OpenIPC/firmware dropped BR2_PACKAGE_JSONFILTER from every one of its
defconfigs in #2304, once the WebUI stopped calling it. builder's defconfigs are
its own files, so 97 of them kept selecting it. jsonfilter selects JSON_C and
LIBUBOX, and on a device that enables neither uqmi-openipc nor wifibroadcast-ng
nothing else selects libubox, so it and jsonfilter shipped for nothing.

That is what has had three devices over their rootfs cap:

    hi3518ev200_lite_switcam-hs303      rootfs 5124KB/5120KB   -4KB
    ssc333_lite_babysense-see-hd-ip206  rootfs 5124KB/5120KB   -4KB
    ssc333_lite_meari-speed-6s          rootfs 5128KB/5120KB   -8KB

all three red on the nightly, meari since 2026-08-24. Bisecting meari across
firmware revisions lands on #2301, which added 408 bytes to the comment-stripped
sysupgrade script -- these images had no headroom left at all, and 408 bytes of
a genuine bug fix was enough to push one over a 4KB padding step. The fix is to
give them headroom, not to give back the bug fix.

Measured on ssc333_lite_meari-speed-6s, built the way builder.sh builds it --
devices/<item>/ copied over a firmware checkout at master, clean tree both times:

    before   rootfs.squashfs 5128KB/5120KB   size exceeded by: 8KB
    after    rootfs.squashfs 5096KB/5120KB   24KB spare

-32KB, from /usr/bin/jsonfilter (18068 raw) and /usr/lib/libubox.so (30404 raw).
json-c does NOT go: majestic lists it in MAJESTIC_DEPENDENCIES, so buildroot
builds and installs it whether or not BR2_PACKAGE_JSON_C is set. Only the two
files above leave the image.

Two consumers genuinely need jsonfilter and both keep it:

  * devices/apfpv's own etc/init.d/S99msposd reads majestic's config.json
    through it, and ssc338q_apfpv and ssc378qe_apfpv do not enable
    wifibroadcast-ng. Those two keep the symbol, with the reason written above
    the line -- the same undeclared-runtime-dependency trap firmware #2305 had
    to fix, and the reason this is 95 defconfigs and not 97.

  * every other FPV device enables wifibroadcast-ng, whose Config.in selects
    BR2_PACKAGE_JSONFILTER (added by #2305) for the same script. They keep it
    without saying so.

LTE devices keep libubox through uqmi-openipc, which selects it independently.

Nothing else in this repository calls jsonfilter: grepping devices/ and
package/ finds only that one S99msposd line, and firmware's own tree has no
caller left outside wifibroadcast-ng.
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can hide the parts of a finding you never read, like the evidence or the agent prompt

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Drop redundant jsonfilter selections from device defconfigs

🐞 Bug fix ⚙️ Configuration changes 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Removes redundant jsonfilter selections from 95 device defconfigs, restoring constrained rootfs
 headroom.
• Keeps jsonfilter explicit for two APFPV boards whose startup script consumes it.
• Aligns builder-owned package selections with upstream firmware dependency ownership.
Diagram

graph TD
  A["Device defconfig"] --> B{"Runtime consumer?"} -->|APFPV script| C["Explicit jsonfilter"] --> F["Rootfs image"]
  B -->|WFB enabled| D["wifibroadcast-ng"] --> C
  B -->|No consumer| E["Drop jsonfilter"] --> F
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Synchronize defconfigs from firmware
  • ➕ Prevents future fleet-wide package drift
  • ➕ Reduces duplicate configuration maintenance
  • ➖ Requires cross-repository ownership and synchronization rules
  • ➖ Broader migration risk than this focused nightly-build fix
2. Add automated drift validation
  • ➕ Detects builder and firmware defconfig divergence in CI
  • ➕ Preserves builder-specific overrides
  • ➖ Needs a defined allowlist for intentional differences
  • ➖ Does not itself establish runtime dependency ownership

Recommendation: Merge the focused dependency correction now: it matches upstream firmware behavior, retains both direct and transitive consumers, and restores rootfs headroom. Follow with automated drift validation or defconfig synchronization to address the recurring cross-repository root cause.

Files changed (97) +10 / -95

Bug fix (3) +0 / -3
hi3518ev200_lite_switcam-hs303_defconfigRestore rootfs headroom by dropping jsonfilter +0/-1

Restore rootfs headroom by dropping jsonfilter

• Removes the unused package selection that pushed this constrained image beyond its 5120KB rootfs limit.

devices/hi3518ev200_lite_switcam-hs303/br-ext-chip-hisilicon/configs/hi3518ev200_lite_switcam-hs303_defconfig

ssc333_lite_babysense-see-hd-ip206_defconfigRestore rootfs headroom by dropping jsonfilter +0/-1

Restore rootfs headroom by dropping jsonfilter

• Removes the unused package selection that pushed this constrained image beyond its 5120KB rootfs limit.

devices/ssc333_lite_babysense-see-hd-ip206/br-ext-chip-sigmastar/configs/ssc333_lite_babysense-see-hd-ip206_defconfig

ssc333_lite_meari-speed-6s_defconfigRestore rootfs headroom by dropping jsonfilter +0/-1

Restore rootfs headroom by dropping jsonfilter

• Removes the unused package selection, reducing the measured rootfs from 5128KB to 5096KB.

devices/ssc333_lite_meari-speed-6s/br-ext-chip-sigmastar/configs/ssc333_lite_meari-speed-6s_defconfig

Documentation (2) +10 / -0
ssc338q_apfpv_defconfigDocument required APFPV jsonfilter selection +5/-0

Document required APFPV jsonfilter selection

• Explains why this board must explicitly retain jsonfilter: its S99msposd script consumes config.json and wifibroadcast-ng does not provide the dependency.

devices/apfpv/br-ext-chip-sigmastar/configs/ssc338q_apfpv_defconfig

ssc378qe_apfpv_defconfigDocument required APFPV jsonfilter selection +5/-0

Document required APFPV jsonfilter selection

• Explains why this board must explicitly retain jsonfilter: its S99msposd script consumes config.json and wifibroadcast-ng does not provide the dependency.

devices/apfpv/br-ext-chip-sigmastar/configs/ssc378qe_apfpv_defconfig

Other (92) +0 / -92
hi3516cv300_mini_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter because this profile has no runtime consumer requiring it.

devices/common/br-ext-chip-hisilicon/configs/hi3516cv300_mini_defconfig

hi3518ev200_mini_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter because this profile has no runtime consumer requiring it.

devices/common/br-ext-chip-hisilicon/configs/hi3518ev200_mini_defconfig

ssc30kq_fpv_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/common/br-ext-chip-sigmastar/configs/ssc30kq_fpv_defconfig

ssc338q_fpv_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/common/br-ext-chip-sigmastar/configs/ssc338q_fpv_defconfig

ssc378qe_fpv_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/common/br-ext-chip-sigmastar/configs/ssc378qe_fpv_defconfig

gk7102ca_lite_umea-qc01x_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7102ca_lite_umea-qc01x/br-ext-chip-goke/configs/gk7102ca_lite_umea-qc01x_defconfig

gk7102ca_lite_vstarcam-g8896wip_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7102ca_lite_vstarcam-g8896wip/br-ext-chip-goke/configs/gk7102ca_lite_vstarcam-g8896wip_defconfig

gk7202v300_lite_cootli_camv0103_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7202v300_lite_cootli_camv0103/br-ext-chip-goke/configs/gk7202v300_lite_cootli_camv0103_defconfig

gk7202v300_lite_ipg-g3-wr_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7202v300_lite_ipg-g3-wr/br-ext-chip-goke/configs/gk7202v300_lite_ipg-g3-wr_defconfig

gk7202v300_lite_xg521_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7202v300_lite_xg521/br-ext-chip-goke/configs/gk7202v300_lite_xg521_defconfig

gk7205v200_lite_cpplus-cp-unc-ta21l2c_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v200_lite_cpplus-cp-unc-ta21l2c/br-ext-chip-goke/configs/gk7205v200_lite_cpplus-cp-unc-ta21l2c_defconfig

gk7205v200_lite_tiandy-tc-c321n_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v200_lite_tiandy-tc-c321n/br-ext-chip-goke/configs/gk7205v200_lite_tiandy-tc-c321n_defconfig

gk7205v200_lite_vixand-ipc-1_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v200_lite_vixand-ipc-1/br-ext-chip-goke/configs/gk7205v200_lite_vixand-ipc-1_defconfig

gk7205v200_lite_vixand-iph-5-4g_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v200_lite_vixand-iph-5-4g/br-ext-chip-goke/configs/gk7205v200_lite_vixand-iph-5-4g_defconfig

gk7205v210_lite_tiandy-tc-c32qn_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v210_lite_tiandy-tc-c32qn/br-ext-chip-goke/configs/gk7205v210_lite_tiandy-tc-c32qn_defconfig

gk7205v210_lite_vixand-ivg-g3s_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v210_lite_vixand-ivg-g3s/br-ext-chip-goke/configs/gk7205v210_lite_vixand-ivg-g3s_defconfig

gk7205v210_lite_vixand-ivg-g4f-a-w_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v210_lite_vixand-ivg-g4f-a-w/br-ext-chip-goke/configs/gk7205v210_lite_vixand-ivg-g4f-a-w_defconfig

gk7205v210_lite_vixand-ivg-g4f-a_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v210_lite_vixand-ivg-g4f-a/br-ext-chip-goke/configs/gk7205v210_lite_vixand-ivg-g4f-a_defconfig

gk7205v210_lite_vixand-ivg-g4h_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v210_lite_vixand-ivg-g4h/br-ext-chip-goke/configs/gk7205v210_lite_vixand-ivg-g4h_defconfig

gk7205v300_lite_vixand-ivg-g6s-w_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v300_lite_vixand-ivg-g6s-w/br-ext-chip-goke/configs/gk7205v300_lite_vixand-ivg-g6s-w_defconfig

gk7205v300_lite_vixand-ivg-g6s_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/gk7205v300_lite_vixand-ivg-g6s/br-ext-chip-goke/configs/gk7205v300_lite_vixand-ivg-g6s_defconfig

hi3516cv200_lite_trassir-tr-d4121ir1-v2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3516cv200_lite_trassir-tr-d4121ir1-v2/br-ext-chip-hisilicon/configs/hi3516cv200_lite_trassir-tr-d4121ir1-v2_defconfig

hi3516ev300_ultimate_rostelecom-ipc8232swc-we_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3516ev300_ultimate_rostelecom-ipc8232swc-we/br-ext-chip-hisilicon/configs/hi3516ev300_ultimate_rostelecom-ipc8232swc-we_defconfig

hi3516ev300_ultimate_rvi-1ncmw2028_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3516ev300_ultimate_rvi-1ncmw2028/br-ext-chip-hisilicon/configs/hi3516ev300_ultimate_rvi-1ncmw2028_defconfig

hi3518ev200_lite_lenovo-snowman-1080p_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3518ev200_lite_lenovo-snowman-1080p/br-ext-chip-hisilicon/configs/hi3518ev200_lite_lenovo-snowman-1080p_defconfig

hi3518ev200_lite_qtech-qvc-ipc-136w_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3518ev200_lite_qtech-qvc-ipc-136w/br-ext-chip-hisilicon/configs/hi3518ev200_lite_qtech-qvc-ipc-136w_defconfig

hi3518ev200_lite_smartwares-cip-37210_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3518ev200_lite_smartwares-cip-37210/br-ext-chip-hisilicon/configs/hi3518ev200_lite_smartwares-cip-37210_defconfig

hi3518ev200_lite_switcam-hs303-v2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3518ev200_lite_switcam-hs303-v2/br-ext-chip-hisilicon/configs/hi3518ev200_lite_switcam-hs303-v2_defconfig

hi3518ev200_lite_vstarcam-c8892wip_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3518ev200_lite_vstarcam-c8892wip/br-ext-chip-hisilicon/configs/hi3518ev200_lite_vstarcam-c8892wip_defconfig

hi3518ev200_ultimate_lenovo-snowman-1080p_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3518ev200_ultimate_lenovo-snowman-1080p/br-ext-chip-hisilicon/configs/hi3518ev200_ultimate_lenovo-snowman-1080p_defconfig

hi3518ev200_ultimate_tplink-kasa-kc110_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/hi3518ev200_ultimate_tplink-kasa-kc110/br-ext-chip-hisilicon/configs/hi3518ev200_ultimate_tplink-kasa-kc110_defconfig

ssc30kd_lite_cmcc-ds-ytj5301_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc30kd_lite_cmcc-ds-ytj5301/br-ext-chip-sigmastar/configs/ssc30kd_lite_cmcc-ds-ytj5301_defconfig

ssc30kq_apfpv_greg-generic-bu-eu_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Removes the direct selection so package ownership follows declared consumers.

devices/ssc30kq_apfpv_greg-generic-bu-eu/br-ext-chip-sigmastar/configs/ssc30kq_apfpv_greg-generic-bu-eu_defconfig

ssc30kq_apfpv_greg-generic-cu-eu_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Removes the direct selection so package ownership follows declared consumers.

devices/ssc30kq_apfpv_greg-generic-cu-eu/br-ext-chip-sigmastar/configs/ssc30kq_apfpv_greg-generic-cu-eu_defconfig

ssc30kq_rubyfpv_generic_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Removes the direct selection so package ownership follows declared consumers.

devices/ssc30kq_rubyfpv_generic/br-ext-chip-sigmastar/configs/ssc30kq_rubyfpv_generic_defconfig

ssc325_lite_imilab-ec3-cmsxj25a_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc325_lite_imilab-ec3-cmsxj25a/br-ext-chip-sigmastar/configs/ssc325_lite_imilab-ec3-cmsxj25a_defconfig

ssc325_lite_imou-c22cp_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc325_lite_imou-c22cp/br-ext-chip-sigmastar/configs/ssc325_lite_imou-c22cp_defconfig

ssc325_lite_tp-link-tapo-c310-v1_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc325_lite_tp-link-tapo-c310-v1/br-ext-chip-sigmastar/configs/ssc325_lite_tp-link-tapo-c310-v1_defconfig

ssc325_lite_trassir-tr-w2c1-v1_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc325_lite_trassir-tr-w2c1-v1/br-ext-chip-sigmastar/configs/ssc325_lite_trassir-tr-w2c1-v1_defconfig

ssc325de_lite_imou-c22ep-s2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc325de_lite_imou-c22ep-s2/br-ext-chip-sigmastar/configs/ssc325de_lite_imou-c22ep-s2_defconfig

ssc333_lite_tp-link-tapo-c110-v2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc333_lite_tp-link-tapo-c110-v2/br-ext-chip-sigmastar/configs/ssc333_lite_tp-link-tapo-c110-v2_defconfig

ssc333_lite_tp-link-tapo-c110-v26_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc333_lite_tp-link-tapo-c110-v26/br-ext-chip-sigmastar/configs/ssc333_lite_tp-link-tapo-c110-v26_defconfig

ssc333_lite_vstarcam-c43s_b_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc333_lite_vstarcam-c43s_b/br-ext-chip-sigmastar/configs/ssc333_lite_vstarcam-c43s_b_defconfig

ssc335_lite_tp-link-tapo-c110-v1_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc335_lite_tp-link-tapo-c110-v1/br-ext-chip-sigmastar/configs/ssc335_lite_tp-link-tapo-c110-v1_defconfig

ssc335_lite_tp-link-tapo-c310-v220_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc335_lite_tp-link-tapo-c310-v220/br-ext-chip-sigmastar/configs/ssc335_lite_tp-link-tapo-c310-v220_defconfig

ssc335_lite_trassir-tr-w2c1-v2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc335_lite_trassir-tr-w2c1-v2/br-ext-chip-sigmastar/configs/ssc335_lite_trassir-tr-w2c1-v2_defconfig

ssc335de_lite_dahua-hfw1230sp-v2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc335de_lite_dahua-hfw1230sp-v2/br-ext-chip-sigmastar/configs/ssc335de_lite_dahua-hfw1230sp-v2_defconfig

ssc335de_lite_imou-c22e-s2-v2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc335de_lite_imou-c22e-s2-v2/br-ext-chip-sigmastar/configs/ssc335de_lite_imou-c22e-s2-v2_defconfig

ssc335de_lite_uniview-c1l-2wn-g_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc335de_lite_uniview-c1l-2wn-g/br-ext-chip-sigmastar/configs/ssc335de_lite_uniview-c1l-2wn-g_defconfig

ssc337_lite_h3c-tc2101_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc337_lite_h3c-tc2101/br-ext-chip-sigmastar/configs/ssc337_lite_h3c-tc2101_defconfig

ssc337_lite_tiandy-tc-c321n-v2_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc337_lite_tiandy-tc-c321n-v2/br-ext-chip-sigmastar/configs/ssc337_lite_tiandy-tc-c321n-v2_defconfig

ssc337_lite_tp-link-tapo-c110-v1_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc337_lite_tp-link-tapo-c110-v1/br-ext-chip-sigmastar/configs/ssc337_lite_tp-link-tapo-c110-v1_defconfig

ssc337de_ultimate_foscam-x5_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/ssc337de_ultimate_foscam-x5/br-ext-chip-sigmastar/configs/ssc337de_ultimate_foscam-x5_defconfig

ssc338q_apfpv_greg-generic-bu-eu_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Removes the direct selection so package ownership follows declared consumers.

devices/ssc338q_apfpv_greg-generic-bu-eu/br-ext-chip-sigmastar/configs/ssc338q_apfpv_greg-generic-bu-eu_defconfig

ssc338q_apfpv_greg-generic-cu-eu_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Removes the direct selection so package ownership follows declared consumers.

devices/ssc338q_apfpv_greg-generic-cu-eu/br-ext-chip-sigmastar/configs/ssc338q_apfpv_greg-generic-cu-eu_defconfig

ssc338q_fpv_caddx-fly_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/ssc338q_fpv_caddx-fly/br-ext-chip-sigmastar/configs/ssc338q_fpv_caddx-fly_defconfig

ssc338q_fpv_emax-wyvern-link_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/ssc338q_fpv_emax-wyvern-link/br-ext-chip-sigmastar/configs/ssc338q_fpv_emax-wyvern-link_defconfig

ssc338q_fpv_openipc-mario-aio_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/ssc338q_fpv_openipc-mario-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-mario-aio_defconfig

ssc338q_fpv_openipc-thinker-aio_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/ssc338q_fpv_openipc-thinker-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-thinker-aio_defconfig

ssc338q_fpv_openipc-urllc-aio_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/ssc338q_fpv_openipc-urllc-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-urllc-aio_defconfig

ssc338q_fpv_runcam-wifilink_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/ssc338q_fpv_runcam-wifilink/br-ext-chip-sigmastar/configs/ssc338q_fpv_runcam-wifilink_defconfig

ssc338q_rubyfpv_generic_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Removes the direct selection so package ownership follows declared consumers.

devices/ssc338q_rubyfpv_generic/br-ext-chip-sigmastar/configs/ssc338q_rubyfpv_generic_defconfig

ssc338q_rubyfpv_thinker_internal_wifi_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Removes the direct selection so package ownership follows declared consumers.

devices/ssc338q_rubyfpv_thinker_internal_wifi/br-ext-chip-sigmastar/configs/ssc338q_rubyfpv_thinker_internal_wifi_defconfig

ssc377qe_fpv_ccdcam-im50q01-tipoman_defconfigDefer jsonfilter to FPV dependency selection +0/-1

Defer jsonfilter to FPV dependency selection

• Removes the direct selection; wifibroadcast-ng retains jsonfilter transitively where required.

devices/ssc377qe_fpv_ccdcam-im50q01-tipoman/br-ext-chip-sigmastar/configs/ssc377qe_fpv_ccdcam-im50q01-tipoman_defconfig

t10_lite_hb-wifi-z6_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t10_lite_hb-wifi-z6/br-ext-chip-ingenic/configs/t10_lite_hb-wifi-z6_defconfig

t10_lite_jvs-ingt10-gqs60ep_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t10_lite_jvs-ingt10-gqs60ep/br-ext-chip-ingenic/configs/t10_lite_jvs-ingt10-gqs60ep_defconfig

t20_lite_ec37-t11_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t20_lite_ec37-t11/br-ext-chip-ingenic/configs/t20_lite_ec37-t11_defconfig

t20_ultimate_azarton-c1_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t20_ultimate_azarton-c1/br-ext-chip-ingenic/configs/t20_ultimate_azarton-c1_defconfig

t21_lite_chinamobile-hdc-51-a5-v12_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t21_lite_chinamobile-hdc-51-a5-v12/br-ext-chip-ingenic/configs/t21_lite_chinamobile-hdc-51-a5-v12_defconfig

t21_lite_smartwares-cip-37210at_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t21_lite_smartwares-cip-37210at/br-ext-chip-ingenic/configs/t21_lite_smartwares-cip-37210at_defconfig

t21_lite_wansview-q5-1080p_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t21_lite_wansview-q5-1080p/br-ext-chip-ingenic/configs/t21_lite_wansview-q5-1080p_defconfig

t21_lite_xyx-06s_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t21_lite_xyx-06s/br-ext-chip-ingenic/configs/t21_lite_xyx-06s_defconfig

t23_lite_jooan-a6m-u_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t23_lite_jooan-a6m-u/br-ext-chip-ingenic/configs/t23_lite_jooan-a6m-u_defconfig

t23_lite_jooan-q3r-u_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t23_lite_jooan-q3r-u/br-ext-chip-ingenic/configs/t23_lite_jooan-q3r-u_defconfig

t23_lite_lsc-3215672_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t23_lite_lsc-3215672/br-ext-chip-ingenic/configs/t23_lite_lsc-3215672_defconfig

t31_lite_aceline-aip-o4_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_aceline-aip-o4/br-ext-chip-ingenic/configs/t31_lite_aceline-aip-o4_defconfig

t31_lite_aoni-ep01j05_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_aoni-ep01j05/br-ext-chip-ingenic/configs/t31_lite_aoni-ep01j05_defconfig

t31_lite_chinamobile-hdc-51-a6-v11_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_chinamobile-hdc-51-a6-v11/br-ext-chip-ingenic/configs/t31_lite_chinamobile-hdc-51-a6-v11_defconfig

t31_lite_chinatelecom-y4h-50_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_chinatelecom-y4h-50/br-ext-chip-ingenic/configs/t31_lite_chinatelecom-y4h-50_defconfig

t31_lite_cmcc-hdc-51-a6-v10_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_cmcc-hdc-51-a6-v10/br-ext-chip-ingenic/configs/t31_lite_cmcc-hdc-51-a6-v10_defconfig

t31_lite_tp-link-tapo-tc70-v3_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_tp-link-tapo-tc70-v3/br-ext-chip-ingenic/configs/t31_lite_tp-link-tapo-tc70-v3_defconfig

t31_lite_tuya-gv7630-t31-ptz_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_tuya-gv7630-t31-ptz/br-ext-chip-ingenic/configs/t31_lite_tuya-gv7630-t31-ptz_defconfig

t31_lite_vstarcam-cs55_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_vstarcam-cs55/br-ext-chip-ingenic/configs/t31_lite_vstarcam-cs55_defconfig

t31_lite_wansview-q5-2k_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_wansview-q5-2k/br-ext-chip-ingenic/configs/t31_lite_wansview-q5-2k_defconfig

t31_lite_wyze-v3b_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_wyze-v3b/br-ext-chip-ingenic/configs/t31_lite_wyze-v3b_defconfig

t31_lite_xiaomi-mjsxj03hl-jxq03_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_xiaomi-mjsxj03hl-jxq03/br-ext-chip-ingenic/configs/t31_lite_xiaomi-mjsxj03hl-jxq03_defconfig

t31_lite_xiaomi-mjsxj03hl_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_xiaomi-mjsxj03hl/br-ext-chip-ingenic/configs/t31_lite_xiaomi-mjsxj03hl_defconfig

t31_lite_xiaomi-mjsxj05hl_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_xiaomi-mjsxj05hl/br-ext-chip-ingenic/configs/t31_lite_xiaomi-mjsxj05hl_defconfig

t31_lite_zte-k540_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_lite_zte-k540/br-ext-chip-ingenic/configs/t31_lite_zte-k540_defconfig

t31_ultimate_azarton-c1-t31x_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_ultimate_azarton-c1-t31x/br-ext-chip-ingenic/configs/t31_ultimate_azarton-c1-t31x_defconfig

t31_ultimate_gcraftsman-gca50_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t31_ultimate_gcraftsman-gca50/br-ext-chip-ingenic/configs/t31_ultimate_gcraftsman-gca50_defconfig

t40_lite_movols-mo-805p_defconfigRemove redundant jsonfilter selection +0/-1

Remove redundant jsonfilter selection

• Stops directly selecting jsonfilter and avoids shipping its unused runtime footprint.

devices/t40_lite_movols-mo-805p/br-ext-chip-ingenic/configs/t40_lite_movols-mo-805p_defconfig

@openipc-ai
openipc-ai merged commit a5882d5 into master Aug 25, 2026
96 checks passed
@openipc-ai
openipc-ai deleted the package/drop-jsonfilter-mirroring-firmware-2304 branch August 25, 2026 17:29
openipc-ai added a commit that referenced this pull request Aug 25, 2026
…129)

* ci: watch for drift from firmware instead of finding it by accident

builder.sh copies devices/<item>/* over a fresh firmware clone, so a device
directory that ships its own copy of a firmware file replaces it outright. A
fleet-wide change in firmware reaches every device that only references a path
and none that ships its own copy, silently, because nothing in either repository
is looking. One comment on OpenIPC/firmware#2308 turned up three instances of
that in an afternoon: 13 board configs that missed the CONFIG_VT sweep (#126),
97 defconfigs that kept BR2_PACKAGE_JSONFILTER after firmware retired it and put
three devices over their rootfs cap (#128), and excludes lists naming files that
no longer exist (firmware#2313 reports those at build time).

The trigger is the design. Every one of those was caused by a commit in
firmware while this repository sat untouched, so a pull_request check would
never have fired for any of them -- nobody opens a builder PR when firmware
changes. firmware-drift.yml runs on a schedule and files an issue rather than
failing: drift someone else introduced is not a reason to redden a nightly that
is otherwise fine. Only the self-test gates a merge here, out of lint.yml.

Two checks, because the two kinds of drift are not the same shape.

Shadowed files: comparing content is useless, a builder copy is *supposed* to
differ. What matters is whether firmware's version moved since a human last
reconciled them, so each of the 13 entries pins the blob it was reconciled
against. Re-pinning is the act of looking again. The mapping is hand-authored --
nothing can infer that gk7205v200.generic-fpv derives from gk7205v200.generic.

Defconfig symbols: nothing here copies a firmware defconfig, so pinning does not
apply. Every BR2_PACKAGE_*=y is resolved against buildroot, firmware and this
tree and sorted into "resolves nowhere" (a dead line kconfig ignores) and
"resolves, but no firmware defconfig selects it" (needs an allowlist entry). An
allowlist entry can also fence a symbol to the devices that need it; without
that, writing JSONFILTER down as builder-only for devices/apfpv would equally
bless it creeping back onto 95 unrelated defconfigs, which is #128 verbatim.

Replayed against the three regressions, each reproduced by hand on a clean tree:

    firmware moves a shadowed config
      -> br-ext-chip-goke/board/gk7205v200/gk7205v200.generic.config moved in
         firmware since this copy was reconciled (2026-08-25).
         builder copy: devices/common/.../gk7205v200.generic-fpv.config
         pinned 7450c6803f6d, firmware now f97dce84c0f8
         firmware commits since:
           85233f0e kernel: drop CONFIG_VT and the busybox applets ... (#2308)

    jsonfilter creeps back onto a non-apfpv device
      -> BR2_PACKAGE_JSONFILTER is allowlisted only for apfpv/*/configs/*_defconfig,
         but 1 other defconfig(s) select it.

    firmware retires a symbol builder still selects
      -> BR2_PACKAGE_LIBUBOX is selected here but by no firmware defconfig.

Resolving against buildroot is not optional and getting it wrong is how a
checker lies. Buildroot is vendored by neither repository, so a first pass over
OpenIPC packages alone called HOSTAPD, IW, PHP, UHTTPD, LIBZIP and BWM_NG dead;
all six are upstream. Matching only "Config.in" then called PHP_EXT_ZIP dead,
because buildroot declares php's extensions in package/php/Config.ext. Without
--buildroot that half is skipped and says so rather than inventing findings.

Two symbols really do resolve nowhere today -- BR2_PACKAGE_APFPV_GREG on the
four greg-generic devices and BR2_PACKAGE_WIFIBROADCAST_EXT in devices/common.
Both are recorded as known-dead and reported as a notice on every run rather
than removed: whether those devices still want the packages is a maintainer's
call, not a side effect of adding a check.

The three new paths are classified in ci-matrix.py so this PR and every future
re-pin cost no device builds. Without that a blob update is a 107-device run.

* ci: discover shadowed files instead of listing them by hand

Qodo caught the shadow list omitting the device-local t21 and t31 kernel configs.
It was right, and the hole was much bigger than the five it named: a hand-written
list of 13 board configs against 93 same-path shadows covering 35 firmware paths.
The missing ones are not incidental -- load_goke, load_hisilicon, load_sigmastar
and four vendor .mk files are all shadowed by some device, and those are exactly
the shared files a fleet-wide fix lands in. firmware regression-tests
load_hisilicon's os_mem_size derivation; two devices here ship their own copy of
that script and would not have seen the fix.

Listing them by hand was the wrong shape. builder.sh copies devices/<item>/*
over the firmware clone, so any file at a path firmware also has replaces it --
which makes same-path shadows discoverable rather than something to remember.
discover_shadows() walks devices/ and reports anything sitting on a firmware
path with no entry in firmware-drift.json, so the list cannot silently rot and a
device added tomorrow cannot quietly introduce an unreconciled shadow.

The manifest goes from 13 entries to 101: the 88 discovered ones, plus the 13
hand-authored entries that discovery cannot find because the name differs from
the file they replace -- gk7205v200.generic-fpv shadows gk7205v200.generic, and
nothing can infer that.

Two self-test cases for the new path: a same-path shadow with no entry is
reported, and an entry silences it. Verified against the tree by dropping the
load_hisilicon entries, which surfaces both devices immediately.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant