You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
One list for burning down all remaining open work in this repo. Each item has a checked status and an order. Items with an existing issue link to it. Items without one are described inline with enough detail to act on, and don't get separate child issues.
Status was verified against main at 4ebcabd on 2026-09-17. Several open issues turned out to be already implemented and only need confirming and closing.
Burndown
Work top to bottom. Tick an item when its PR merges or when its issue closes with evidence.
Tier 0: close what is already done (verify, then close)
Verified on main:archive::write_emscripten_config_at writes config for the final location while staged, and the health check in install.rs (~L1005) rewrites configs of older managed installs. Both shipped in Rebase FastLED infrastructure onto kernal-api #242.
Closing step: run the real compiler health check plus a Blink compile once, then close.
Prior art: zackees/kernal-api macos-x64-tests.yml plus ci/macos-x64/{build-archive.sh,stage-guest-share.sh,recovery-guest.sh,verify-guest-results.py}, which runs the archive in a Recovery guest with a Mach-O cargo-nextest staged through the share directory.
an empty 68 GB disk is attached for anything larger;
network works.
Cadence: nightly plus workflow_dispatch. Boot plus probe alone took 391-579 s.
Acceptance:
the archive runs in the guest and the job fails on a test failure (the guest itself never exits non-zero, so verify collected results);
RED -> GREEN by temporarily breaking one test.
setup-soldr soldr-cook fails on every Linux build job (untracked)
Symptom: the Linux unit-test run on main (35193809098) shows failed to run custom build command for glib-sys v0.18.1 / gobject-sys v0.18.0, then cook: failed with exit 101 ... continuing without cooked deps. _terminal-test.yml shows the same.
Cause:setup-soldr cooks dependencies inside its own step, before the later "Install system dependencies (Linux)" step installs libgtk-3-dev / libwebkit2gtk-4.1-dev, so pkg-config finds no GLib. The prebuilt-dependency cache is never produced, and every run compiles those dependencies cold.
Fix: install the apt packages before zackees/setup-soldr in _unit-test.yml, _terminal-test.yml and the other _*.yml files that cook on Linux.
Acceptance:
the cook step logs success on Linux;
a second run shows a warm-cache hit;
record the before/after wall time of the Linux unit-test job.
Python files under ci/ are unlinted (untracked)
Symptom:bash lint runs ruff, black, isort and pyright over src tests only. ruff check ci reports 13 errors on main: 6 SIM102, 4 ISC004, 1 PIE810, 1 EXE001, 1 RUF100 (in ci/hooks/tool_guard.py and ci/lint_python/keyboard_interrupt_checker.py).
Why it matters:ci/ now holds real test code (safari_smoke.py, safari_terminal_smoke.py) that CI executes.
Fix: fix the 13 findings, then add ci to the ruff/black/isort/pyright invocations in lint.
Acceptance:bash lint covers ci/ and passes; reverting one fix makes lint fail.
Tier 3: developer experience
bash lint cannot complete on hosts without rustup (untracked)
Symptom: the dylint stage requires cargo-dylint 6.0.3 and a rustup binary (to pin nightly-2026-03-26), and exits before the Python stages run. On a NixOS host, no Python lint runs locally.
Fix: run the Python stages independently of the dylint stage, or skip dylint with a loud warning locally (never in CI) when its prerequisites are missing.
Acceptance:
on a host without cargo-dylint, bash lint still runs every other stage and exits non-zero with an explicit "dylint not run" message;
Organizational move with unresolved open questions (archive vs. deprecate, CLI shape, PyPI rename).
Needs an owner decision before any code work, so it goes last.
Acceptance criteria
Every checkbox above is ticked. Each existing issue is closed with a linked PR or verification evidence. Each untracked item has a merged PR meeting its own acceptance line.
Every bug or behavior change lands with RED -> GREEN evidence: a focused failing test or run first, then the fix. Tier 0 closures cite the verifying run instead.
bash test passes, and every CI workflow is green on the final merge.
No item is closed by weakening a check: no skipped browser checks, no lowered readiness gates, no JSPI flags (Safari remains a required target).
Decisions
Order. Tier 0 first because it is nearly free and shrinks the board. Then user-visible bugs, then CI that protects future work, then developer experience, then features and project moves.
No child issues for untracked items. They are small enough to describe inline, and each carries its own acceptance line. Open a child issue only if one grows beyond a single PR.
Context
One list for burning down all remaining open work in this repo. Each item has a checked status and an order. Items with an existing issue link to it. Items without one are described inline with enough detail to act on, and don't get separate child issues.
Status was verified against
mainat4ebcabdon 2026-09-17. Several open issues turned out to be already implemented and only need confirming and closing.Burndown
Work top to bottom. Tick an item when its PR merges or when its issue closes with evidence.
Tier 0: close what is already done (verify, then close)
4ebcabdmain:pyproject.tomlno longer declarestypeguardorzcmds_win32, and the implementation comment says it shipped in Rebase FastLED infrastructure onto kernal-api #242 (merged 2026-09-15).4ebcabdincl. a real cold compilemain:archive::write_emscripten_config_atwrites config for the final location while staged, and the health check ininstall.rs(~L1005) rewrites configs of older managed installs. Both shipped in Rebase FastLED infrastructure onto kernal-api #242.AllowWebGLInWorkerswas reverted upstream (fix(webview): stop forcing WebGL on OffscreenCanvas in WebKitGTK views zackees/kernal-api#272, onrelease/0.1.3, included in the currentv0.1.11pin). The main-thread render fallback is inbootstrap.tsand the worker.fastled <sketch> --test --test-screenshotrender, plus Safari. Then close.viewer did not render a canvas) even for a sketch that sets a screen map insetup(), because the layout arrives after the worker's single read. The WebGL2 behaviour itself is now correct:webgl2:falseon OffscreenCanvas falls back tocontextType: "main_thread"without error. Evidence in Viewer shows an empty canvas for sketches that set no screen map in setup() (e.g. Blink) #250.Tier 1: user-visible bugs
setScreenMap()insetup()(e.g. Blink)main:fastled_background_worker.tsreadsgetScreenMapData()once (~L647-659) and never polls again.setScreenMap()insetup()hit it too, so the documented workaround is not reliable. The trigger is ordering. Evidence and a RED -> GREEN command in Viewer shows an empty canvas for sketches that set no screen map in setup() (e.g. Blink) #250.Tier 2: CI coverage and CI cost
x86_64-apple-darwinnextest archive does not need a GPU.macos-x64-tests.ymlplusci/macos-x64/{build-archive.sh,stage-guest-share.sh,recovery-guest.sh,verify-guest-results.py}, which runs the archive in a Recovery guest with a Mach-Ocargo-nexteststaged through the share directory./var/rootis read-only (setHOMEunder/tmp);python3;/tmpis a 4.9 GB tmpfs;workflow_dispatch. Boot plus probe alone took 391-579 s.soldr-cookfails on every Linux build job (untracked)main(35193809098) showsfailed to run custom build command for glib-sys v0.18.1/gobject-sys v0.18.0, thencook: failed with exit 101 ... continuing without cooked deps._terminal-test.ymlshows the same.setup-soldrcooks dependencies inside its own step, before the later "Install system dependencies (Linux)" step installslibgtk-3-dev/libwebkit2gtk-4.1-dev, sopkg-configfinds no GLib. The prebuilt-dependency cache is never produced, and every run compiles those dependencies cold.zackees/setup-soldrin_unit-test.yml,_terminal-test.ymland the other_*.ymlfiles that cook on Linux.ci/are unlinted (untracked)bash lintruns ruff, black, isort and pyright oversrc testsonly.ruff check cireports 13 errors onmain: 6 SIM102, 4 ISC004, 1 PIE810, 1 EXE001, 1 RUF100 (inci/hooks/tool_guard.pyandci/lint_python/keyboard_interrupt_checker.py).ci/now holds real test code (safari_smoke.py,safari_terminal_smoke.py) that CI executes.cito the ruff/black/isort/pyright invocations inlint.bash lintcoversci/and passes; reverting one fix makes lint fail.Tier 3: developer experience
bash lintcannot complete on hosts without rustup (untracked)cargo-dylint6.0.3 and arustupbinary (to pinnightly-2026-03-26), and exits before the Python stages run. On a NixOS host, no Python lint runs locally.cargo-dylint,bash lintstill runs every other stage and exits non-zero with an explicit "dylint not run" message;Tier 4: features and project direction
fastled/cliAcceptance criteria
bash testpasses, and every CI workflow is green on the final merge.Decisions
main; what remains is a verification render, blocked only by Viewer shows an empty canvas for sketches that set no screen map in setup() (e.g. Blink) #250's Blink behavior when Blink is used as the sketch.Open questions
migration: real WASM viewer fails OffscreenCanvas WebGL2 compatibility in Linux smoke #247 closing render: can a sketch that sets a screen map stand in for Blink?Answered 2026-09-17: no. A screen-mapped sketch fails the same way, so Viewer shows an empty canvas for sketches that set no screen map in setup() (e.g. Blink) #250 must land first.lintprovide a Nix path forcargo-dylintand a nightly toolchain, instead of only a skip-with-warning?Related issues
#245, #246, #247, #250, #254, #56. Closed context: #251/#261 (guest findings), #259/#260 (terminal CI).