Skip to content

cherry-pick: this week's dev work (#460, #461, lwIP pool) and older dev PRs missing on main - #462

Merged
gg582 merged 22 commits into
mainfrom
chore/main-picks-week-and-gaps
Oct 29, 2026
Merged

gg582 merged 22 commits into
mainfrom
chore/main-picks-week-and-gaps

Conversation

@gg582

@gg582 gg582 commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Summary

Brings to main everything merged into dev that main still lacks. This covers dev's last week and an audit of every PR ever merged into dev from other branches. Commits are in dev order and use git cherry-pick -x, or a partial pick that names its source commit.

This week on dev

The last three were committed to dev directly, not through a PR. The rest of dev's week (#452–#457) is already on main through #454 and #458. #459 is already present by content.

Older dev PRs that never reached main: whole picks

Older dev PRs: partial picks. Only the part that is missing on main and still present on dev is taken. The rest of each PR is already on main in its own form, and each commit message says which part was taken.

Follow-up commits:

How missing changes were found

  1. I listed all 279 PRs merged into dev (gh pr list --base dev --state merged).
  2. I dropped those main already has. A PR counted as present on main if any of these held:
    • its diff reverse-applies to main's tree;
    • its PR number or commit sha is referenced in a main commit message or in a main PR body (that is how main records picks);
    • every line it adds is already in main's version of the same file.
  3. For what was left, I kept only the lines that the PR added, that still exist in dev's current file, and that are missing from main's. This removes changes that dev itself later replaced. 28 PRs remained, and I went through each one by hand.

Not picked, with reasons

Conflict resolution

Submodule gitlinks are unchanged. main keeps its own lsquic pin (2b30189).

How it was verified

On the picked tree, with main's submodule pins:

  • check_test_wiring, check_api_baseline (incl. the v4 guarantee), check_env_knobs, check_api_test_coverage, check_inline_exports, malloc_lint.sh, scripts/ci unit tests: OK
  • scripts/ci/cppcheck.sh with cppcheck 2.13: no findings
  • make -j16 all and make -k test: all targets pass, exit 0 (lsquic built fresh at 2b30189).
  • make baremetal-dist-check and make baremetal-size-gate: the bundles build and cross-compile; hello, hello-rtc, hello-lwip and hello-tls PASS under qemu-arm, all within budget.
  • make wasip2-smoke: PASS, including the second /hello probe picked from fix(wasip2): link stack size + edge-KV persistence example (issue #201) #206.

gg582 and others added 22 commits October 29, 2026 20:44
fix(tutorials): keep the websocket chat handler receiving until the client closes

(cherry picked from commit 857c3e4)
ci(queue): require Redis and NATS integration coverage

(cherry picked from commit 8378b78)
…r-readme

docs(example): add README for example/json-builder (issue #275)

(cherry picked from commit 7d308f5)
docs(example): add README for example/sstring (issue #275)

(cherry picked from commit e260635)
docs(example): add README for example/html (issue #275)

(cherry picked from commit 8acfcc2)
bench(web-frameworks): pin CWIST_WORKERS=4 in the-benchmarker config

(cherry picked from commit 268fa99)
…er-readme

docs(example): add README for example/simple-server (issue #275)

(cherry picked from commit 47466cc)
docs(example): add README for example/http (issue #275)

(cherry picked from commit 54850d3)
…destroy (#60)

Partial pick: only the test for the chunk-count bound; seq_auth.c already cleanses session_id through SEQ_AUTH_CLEANSE. The rest of #60 is already on main in its own form.

(cherry picked from commit 5738510)
…ompare (#66)

Partial pick: only the empty-compare and INT_MAX substr tests; the sstring.c fixes are already on main. The rest of #66 is already on main in its own form.

(cherry picked from commit 30e757f)
… (#206)

Partial pick: the sqlite canary in tests/wasip2_smoke.c, the second /hello probe in wasip2-smoke that catches a request-path stack overflow, and the stack note in docs/api/wasi.md. main already links wasip2 with WASIP2_STACK_BYTES and carries example/wasip2-kv.

(cherry picked from commit 15ce8d3)
…n the ASan job (#263)

Partial pick: the CONTRIBUTING.md note on `make tutorials-check`; the target and the ASan job step are already on main.

(cherry picked from commit 8f73cad)
Partial pick: the "Browser runtime gate" section in docs/api/wasm-component.md and the tests/browser/node_modules ignore; the component-browser-test target and workflow step are already on main.

(cherry picked from commit abb5987)
Partial pick: only the test_gc_job_handoff ignore entry. The code fixes #350 restored to dev came from main and are already here.

(cherry picked from commit 447bd5d)
feat(port): complete the bare-metal STM32 epic (#447)

(cherry picked from commit 0222a58)
example(port): STM32F769I-DISCO wire inspector on real Ethernet (#447)

(cherry picked from commit 9361cea)
Measured on hardware with held-open parallel sockets: 4 simultaneous
connections are served, a 5th completes the TCP handshake but gets no
HTTP response (adapter max_conns), and no slots leak after overload.
Document the knobs to raise the cap (cfg.max_conns, MEMP_NUM_TCP_PCB,
pbuf pools, heap).

(cherry picked from commit b8f3532)
…watchdog

Swept max_conns on hardware with held-open parallel sockets:

- 4 (stock) through 32: clean even with tight SYN+GET bursts.
- 64: 64/64 with paced connects; a tight 64-way burst strands some
  connections (their data frames never arrive) until the 30 s idle timeout.
- 96, 128: fully served.
- 192 (max_conns=192, MEMP_NUM_TCP_PCB=200): highest fully validated
  configuration, 192/192 simultaneous requests answered.
- 256: ~196 answered, then resets - per-connection RX/TX buffers exhaust
  the newlib heap; this is a RAM ceiling, not a protocol one.

Documented the full table, the paced-vs-burst behavior, the TIME_WAIT
headroom needed between successive batches, and the knobs to go further.

Also harden the rev-A RMII watchdog found flaky during this sweep: one
toggle did not always recover the receiver, and the old >2-CRC-error gate
could stay disarmed after a counter reset. Now retry up to 40 times,
500 ms apart, while the MAC reports CRC errors but no good unicast frame,
and drop the periodic debug stats output from the example.

(cherry picked from commit 7e79252)
Replace the per-connection heap buffers with one static pool allocated at
listen time: max_conns slots of conn + rx_buffer_bytes + tx_buffer_bytes
(both default 2048, new cwist_lwip_config fields). Accept/close only move
slots between the free list and the active list, so there is no
per-connection or per-response heap traffic after listen.

Responses larger than the TX buffer now keep their response object alive
and stream through the fixed buffer in chunks as the peer acknowledges
(plaintext and TLS paths), instead of growing a per-connection buffer to
the full response size. Requests that do not fit the pooled RX buffer are
refused with 431/413.

Verified:
- host test_lwip_adapter and test_lwip_tls all pass (20 KB response,
  pipelining, framing errors, connection cap, TLS records);
- baremetal smoke and size gate pass on all four firmware;
- STM32F769I-DISCO: 256/256 and 288/288 simultaneous connections served
  (512 B rx / 256 B tx slots), up from ~196 before; 320 slots fail
  cleanly at boot when the pool does not fit the heap.

Documented the pool model in docs/embedded/stm32.md (EN+KO) and the new
measurements in example/stm32f769/README.md.

(cherry picked from commit 1906963)
The empty-compare test picked from #66 now calls it; dev's list no longer
carries the entry either.
main's WASM_SRCS still carries src/core/mem/gc.c, which dev moved to
WASIP2_EXTRA_SRCS only. BAREMETAL_SRCS takes both lists, so gc.c appeared
twice: harmless for the archive, but the single-file bundle from #460's
baremetal-dist defined everything in gc.c twice and the Cortex-M7 CI job
failed in baremetal-dist-check.
@github-actions

Copy link
Copy Markdown
Contributor

This PR targets main, but CWIST's contribution flow lands work on dev first (see CONTRIBUTING.md). Automatic redirect onto dev failed -- the commits didn't cherry-pick cleanly (likely a real content conflict against dev's current state, not just a base-branch mismatch).

A maintainer needs to recreate this PR's commits against dev by hand (git cherry-pick, preserving authorship) and close this one in favor of the recreation. Labeled needs-manual-dev-redirect for visibility.

@gg582
gg582 merged commit 810aadd into main Oct 29, 2026
44 of 45 checks passed
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