109 Commits

Author SHA1 Message Date
udo
0ff42f357f Document request-scoped MySQL cleanup 2026-07-08 18:44:07 +00:00
udo
6bdccacf02 fix cli unit document root resolution 2026-07-06 20:35:09 +00:00
udo
6f446c4aef hide internal csrf session key helper 2026-07-06 10:08:44 +00:00
udo
b8c2efe976 add native csrf helpers 2026-07-06 09:58:25 +00:00
udo
125a24e2f9 redact sensitive runtime config logging 2026-07-06 08:03:09 +00:00
udo
a6cb1c0390 fix wasm session and mysql placeholder state 2026-07-06 07:54:01 +00:00
root
991a0f62b4 harden runtime config and docs 2026-06-27 20:58:07 +00:00
udo
c148c1b36b test: allow skipping nested local service probes 2026-06-22 02:39:36 +00:00
udo
30fcfce103 test: include response tails in site failures 2026-06-22 01:31:44 +00:00
udo
41b034739b test: use explicit failed-count checks 2026-06-22 01:14:07 +00:00
udo
bd007231de test: distinguish case failures from summary labels 2026-06-22 00:56:46 +00:00
udo
7cf930b4a8 test: accept explicit zero-failure summaries 2026-06-22 00:39:12 +00:00
udo
4d17d80f9a test: build failed-count markers explicitly 2026-06-22 00:21:10 +00:00
udo
0d59ea4b1c test: rely on site summary failure counts 2026-06-21 23:54:01 +00:00
udo
a0d085859c test: stabilize cold local service probes 2026-06-21 23:37:01 +00:00
udo
9e70dde366 test: detect site case failures explicitly 2026-06-21 23:05:32 +00:00
udo
c73dbc8503 test: retry cold site suite probes 2026-06-21 22:42:02 +00:00
udo
1d6c882fb7 test: wait for complete local HTTP bodies 2026-06-21 22:24:12 +00:00
udo
245119f952 test: report site suite marker details 2026-06-21 22:07:28 +00:00
udo
e113215ffa test: wait for slow streamed test responses 2026-06-21 21:50:37 +00:00
udo
1088f6b9a5 test: tolerate cold unit browser responses 2026-06-21 21:21:39 +00:00
root
1770323a2a fix test runner repo path handling 2026-06-21 21:05:51 +00:00
root
4a6fc46ec8 docs: document runtime cache request param 2026-06-21 21:02:36 +00:00
root
c0f3c5507c fix doc example cache path 2026-06-21 20:59:01 +00:00
root
4eda629c8d cleanup, docs 2026-06-17 13:02:57 +00:00
root
b8b56cf3dd cleanup, docs 2026-06-16 23:02:45 +00:00
root
ea08d5f28b cleanup, docs 2026-06-16 12:21:31 +00:00
root
dff1959341 cleanup, error pages 2026-06-16 08:46:54 +00:00
root
f2a3503ac3 configurable trans-membrance hostcall blocklist 2026-06-16 01:13:06 +00:00
root
52cf266a5e docs 2026-06-15 21:46:31 +00:00
root
99cd92fb4a docs 2026-06-15 21:42:50 +00:00
udo
34a97e2577 chore: use version file for package builds 1-2026-06-001 2026-06-15 16:19:55 +00:00
root
6be92ef93e smolstuf 2026-06-15 15:45:52 +00:00
root
5ee257565c smolstuf 2026-06-15 15:40:24 +00:00
root
5f430155b7 deb update 2026-06-15 13:16:39 +00:00
root
762b586242 post-W7 cleanup 2026-06-15 12:31:33 +00:00
root
1a5c6547b9 post-W7 cleanup 2026-06-15 12:00:46 +00:00
root
75bccb778c W7 done done 2026-06-15 11:14:03 +00:00
root
ad2ba7b632 W7 done done 2026-06-15 11:08:44 +00:00
root
abcb66717e W7 done done 2026-06-15 11:06:35 +00:00
root
1743c51e46 W7 done done 2026-06-15 11:04:16 +00:00
root
04745f39a8 W7 done done 2026-06-15 10:53:36 +00:00
root
f5637bb587 W7 done done 2026-06-15 10:28:23 +00:00
root
b1a0df9c93 W7 done done 2026-06-15 10:19:06 +00:00
root
4f84ac544d feat: request_perf() worker-side timing hostcall; restore demo System Info
Units run in the wasm sandbox, so my_pid/parent_pid/context.server->request_count
read as sandbox stubs — the demo System Info counters were broken, and there was
no authoritative server-side request timing available to unit code (client-side
measurement cannot see queue/dispatch latency).

Add a request_perf() unit API backed by a new uce_host_request_perf hostcall.
The native worker answers it live, returning a DValue:
  worker_pid, parent_pid, request_count,
  accept_us  = (time_start - time_init)*1e6   (entry -> dispatch wait),
  running_us = (now - time_start)*1e6         (since dispatch, live),
  total_us   = (now - time_init)*1e6          (since the request entered UCE),
  workspace_birth_us.
time_init is captured at request entry (handle_request, with a handle_complete
fallback); a RequestPerfSnapshot {pids, request_count, time_init, time_start} is
threaded from wasm_backend_serve through wasm_worker_serve onto the workspace,
and the hostcall computes the live deltas at call time. Wired like uce_host_units
(sized DValue hostcall): core_hostcalls.syms + sys.cpp/sys.h request_perf().

site/demo/index.uce System Info now uses request_perf() and shows the real worker
PID, an incrementing per-worker request count, and the timing counters.

Implemented via the pi agent (gpt-5.3-codex-spark); a review of the live numbers
caught accept_us mistakenly computed as (now - time_init) (== total_us), fixed to
the dispatch wait (time_start - time_init). Independently verified on the host:
System Info shows non-zero PIDs, incrementing count, accept_us ~50us << total_us
~2.4ms with accept+running==total; run_cli_tests --include-wasm-kill => 87 passed,
0 failed, 0 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 08:18:04 +00:00
root
83ab9e10f7 perf: extend the compiled-module disk cache to per-unit modules
Follow-up to 560290c. Per-unit .wasm modules were still Cranelift-compiled per
worker on first use (~40-70ms each), so with 8-call worker recycling fresh
workers re-JIT every unit they touch.

Refactor the core cache logic into a shared WasmWorker helper:
- cached_wasm_path(p): maps <...>.wasm -> <...>.cwasm.
- load_or_compile_cached_module(engine, cached, wasm, bytes, err): deserialize_file
  the .cwasm when it is newer than the .wasm; otherwise Module::compile + serialize,
  written atomically (temp+rename); deserialize failure falls back to compile.
Both the core module load and unit_module() now go through this helper, so unit
artifacts get the same <unit>.uce.cwasm cache the core got.

Independently verified on the host: fresh-worker first-hit unit latency ~40-70ms
-> ~3-21ms; full suite wall-clock 20.5s -> 6.5s (and ~40s before any caching);
run_cli_tests --include-wasm-kill => 87 passed, 0 failed, 0 skipped.

Implemented via the pi agent (gpt-5.3-codex-spark sub-model).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 00:16:41 +00:00
root
560290ca1d perf: cache the compiled core module so fresh workers deserialize, not recompile
Workers recycle every 8 requests (calls_until_termination=8). Each fresh worker
ran wasmtime::Module::compile() on the 6.8MB bin/wasm/core.wasm — a ~1.3s
Cranelift JIT — on its first request, so every ~8th request spiked to ~1.3s and
dominated suite wall-clock.

Cache the compiled artifact: on worker core-module load, if bin/wasm/core.cwasm
exists and is newer than core.wasm, load it via Module::deserialize_file() (mmap,
~ms); otherwise Module::compile() as before and atomically (temp+rename) write
the serialized artifact for the next worker. Deserialize failure / stale cache
falls back to a normal compile, so it is self-healing; rebuilding core.wasm
(newer mtime) invalidates the cache. Engine config (epoch_interruption,
signals_based_traps(false)) is unchanged, which the serialized format requires.

Implemented via the pi agent (delegated to a gpt-5.3-codex-spark sub-model).
Independently verified on the host: worker-startup request latency drops from
~1.3s to ~23ms (warm 12x /demo/hello.uce: all <=0.023s, no spikes); full suite
wall-clock ~40s -> 20.5s; run_cli_tests --include-wasm-kill => 87 passed, 0
failed, 0 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 00:02:22 +00:00
root
bfd6d33829 W7f: sweep dead/legacy/fallback leftovers after native-pipeline removal
Post-deletion cleanup (units run only on wasm):
- types.h/compiler.cpp: drop the native-era SharedUnit fields so_name,
  bin_file_name, and the opt_so_optional cache-mode plumbing (no native
  optional .so path remains). The per-unit compile lock is re-keyed from
  so_name+.lock to wasm_name+.lock (still per-unit).
- unit_info() and to_string(SharedUnit*) no longer expose .so artifact fields.
- backend.h: drop the stale "+ fallback-token gate" comment.
- Docs/comments corrected to wasm-only reality: README, tests/README,
  site/doc C++ preprocessor + error_pages + unit_info pages, site/info intro,
  site/demo/unit-browser artifact card; the Phase-5 native-vs-wasm benchmark
  harness (tests/wasm_benchmark.py) reframed for the wasm-only backend.

Audit confirmed no live references remain to so_handle, load_shared_unit,
compiler_load_shared_unit, compiler_invoke*/_cli/_websocket/_serve_http,
COMPILE_SCRIPT/COMPILE_WASM_UNITS, or the native export-symbol constants;
request_ref_handler/dv_call_handler are kept (live wasm funcref casts).

Swept via the pi agent (delegated to a gpt-5.3-codex-spark sub-model);
independently re-verified on the host: run_cli_tests --include-wasm-kill =>
87 passed, 0 failed, 0 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 23:43:16 +00:00
root
cf51336873 W7e: delete the native unit pipeline (.so compile + dlopen execution)
Units now run exclusively on wasm; the native generated-C++ -> clang -> .so ->
dlopen path and its request-time fallback are removed.

- Dispatch (linux_fastcgi.cpp): the 4 handle_complete branches + the CLI-socket
  path route every request through wasm (wasm_ready compiles cold/stale on
  demand); a wasm-unavailable unit now yields a clean error page
  (fail_wasm_unavailable / render_request_failure) instead of native execution.
  compiler_invoke / _cli / _websocket / _serve_http deleted.
- compiler.cpp (-1274): removed the native .so compile (COMPILE_SCRIPT),
  load_shared_unit, dlopen/dlsym/dlclose, compiler_load_shared_unit, and the
  SharedUnit .so function-pointer fields (on_setup/on_render/on_component/
  on_websocket/on_cli/on_once/on_init) in types.h/types.cpp. compile_shared_unit
  now builds only the .wasm side-module; the .uce preprocessor/parser front-end
  is kept (it emits the C++ the wasm compile consumes).
- unit_call()/component()/once/init now resolve across units through the wasm
  host component resolver (uce_host_component_resolve) instead of native dlsym;
  configured runtime error pages render through the wasm backend.
- Dropped the WASM_BACKEND_ENABLED feature flag and dead COMPILE_SCRIPT /
  COMPILE_WASM_UNITS config; unit ABI freshness tied to UCE_UNIT_ABI_VERSION;
  guard against serving a stale .wasm for a deleted source; retired the obsolete
  W5 native-vs-wasm toggle script. Docs updated.

Implemented via the pi agent (with 3 delegated sub-reviews); independently
re-verified on the build host: run_cli_tests --include-wasm-kill => 87 passed,
0 failed, 0 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 23:20:50 +00:00
root
fb728d63bc W7e stage B: factor the .wasm artifact into unit compile-freshness
inspect_shared_unit_filesystem() tracked only the .so mtime, so a missing or
stale .wasm with a current .so never triggered a rebuild and the unit fell to
native indefinitely (the in-process cache also never invalidated). Account for
su->wasm_name when wasm unit compilation is enabled: a unit counts as compiled
only as of the OLDER of the two artifacts; a missing .wasm forces a recompile.
Closes the cached-vanished-.wasm gap noted in the stage A review.

Verified independently on the build host: run_cli_tests --include-wasm-kill =>
87 passed, 0 failed; delete-.wasm-then-request rebuilds the artifact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 18:50:31 +00:00