diff --git a/changelog/2022-01-21.log b/changelog/2022-01-21.log new file mode 100644 index 0000000..3879583 --- /dev/null +++ b/changelog/2022-01-21.log @@ -0,0 +1,15 @@ +commit ad3d65cdacdcc5aed72fe12354f66190d7be454d +Initial commit + +commit c047927b189860220428b42400ed18942150882c +initial import + + +commit 3e8f0f1fa780da7836128fdbc39bbe8c2ba97de8 +initial import + + +commit 939009f9a11d0934226c830375057491f088d362 +shell stuff, preprocessor directive + + diff --git a/changelog/2022-01-28.log b/changelog/2022-01-28.log new file mode 100644 index 0000000..f3acd7e --- /dev/null +++ b/changelog/2022-01-28.log @@ -0,0 +1,4 @@ +commit 18ca2368bc1d4a5ef7e4c8470a9b3e32f496fc86 +VERY basic UTF8 parser + + diff --git a/changelog/2022-01-30.log b/changelog/2022-01-30.log new file mode 100644 index 0000000..e829e6a --- /dev/null +++ b/changelog/2022-01-30.log @@ -0,0 +1,12 @@ +commit 17336fe649c52c162a4541968c8d24c0c2ab3eb9 +Unicode stuff + + +commit 5df52146be3f5a45759459d5716aec4ef8d3c33a +split_space + + +commit 3a9dfba86cb7dadb1268fcfd689b14066779e6aa +fixed bug in #load + + diff --git a/changelog/2022-01-31.log b/changelog/2022-01-31.log new file mode 100644 index 0000000..73380d5 --- /dev/null +++ b/changelog/2022-01-31.log @@ -0,0 +1,4 @@ +commit 0a6ebc60f0b8aacf8b01e14bd9b6447c750edeb5 +precompile on startup + + diff --git a/changelog/2022-02-11.log b/changelog/2022-02-11.log new file mode 100644 index 0000000..5314678 --- /dev/null +++ b/changelog/2022-02-11.log @@ -0,0 +1,14 @@ +commit 6f6919f3f01686175001251e2fca215bccc4806f +backage builder + + +commit defc628204f95d0cdd16c95c89ea30efe922b31a +packaging + + +commit 9e5b7d39e3b8be9f4ad537a134b1081564ae4abc +Basic readme + +commit 21fdeafb6c5b8bc80a9d93ed61c36e05fbe7b267 +Basic documentation + diff --git a/changelog/2022-04-18.log b/changelog/2022-04-18.log new file mode 100644 index 0000000..1ac9b8c --- /dev/null +++ b/changelog/2022-04-18.log @@ -0,0 +1,8 @@ +commit 364d83b199afa6a341173a80791060a42c169f0c +doc update + + +commit 392b7224b16e41198b0425c5ae04f46e014e78c7 +Merge branch 'main' of github.com:ThingamaNet/uce + + diff --git a/changelog/2022-12-22.log b/changelog/2022-12-22.log new file mode 100644 index 0000000..11b1559 --- /dev/null +++ b/changelog/2022-12-22.log @@ -0,0 +1,4 @@ +commit 984453f336a9b2ad47689d161c89d7020006f75a +update sigh + + diff --git a/changelog/2026-04-18.log b/changelog/2026-04-18.log new file mode 100644 index 0000000..b1aea4d --- /dev/null +++ b/changelog/2026-04-18.log @@ -0,0 +1,26 @@ +commit cd8f07aaa78fc488eba3b0e435350e5c2823e53e +Refactor FastCGI server and compiler, enhance HTTP header parsing, and add WebSocket support + +- Refactored FastCGIServer class to improve socket handling and added shutdown functionality. +- Updated compiler functions to streamline HTML and text literal processing. +- Enhanced split_kv function to support uppercase keys and added split_http_headers for better HTTP header parsing. +- Introduced new session management functions to validate and handle session IDs. +- Added WebSocket frame parsing and handling in the URI module. +- Created systemd service scripts for easier deployment and management of the UCE FastCGI runtime. +- Added new test cases for header handling, time parsing, and WebSocket functionality. + + +commit 86dc93864e8eab9227ac50b16f1fc7f561383f5b +Add WebSocket support and enhance chat functionality + +- Implement WebSocket handling in the FastCGI server, allowing for real-time communication. +- Introduce functions for managing WebSocket connections, broadcasting messages, and sending to specific connections. +- Create a chat interface in the `websockets.ws.uce` file, including message handling and user notifications. +- Refactor existing code to accommodate WebSocket integration, ensuring compatibility with HTTP requests. +- Update documentation to reflect new features and usage instructions for WebSocket functionality. + + +commit 46d98a092fb606c87ab4b9eef32fe68eeca2b2cb +Enhance WebSocket support: add opcode handling, binary message support, and improve connection validation + + diff --git a/changelog/2026-04-19.log b/changelog/2026-04-19.log new file mode 100644 index 0000000..2838a62 --- /dev/null +++ b/changelog/2026-04-19.log @@ -0,0 +1,20 @@ +commit be514d63d6ed709a40441db9dc809837081d54f6 +trying to port web app starter from PHP + + +commit 2b5586d7dfffc5c1c40cac97e6d4d0e1f86f151a +decided in favor of dedicated COMPONENT() macro, updates to documentation + + +commit d1167aec3b4d7870db0b289ee0ea690f8e7e5cc9 +getting closer to full port of web app starter + + +commit af642c8167383f9acf99274d3b3c94017d860dcf +getting closer to full port of web app starter + + +commit dc05f9faa5eab980f1f1fd44cee06f811cc748ff +PHP familiarity shortcuts + + diff --git a/changelog/2026-04-20.log b/changelog/2026-04-20.log new file mode 100644 index 0000000..647124d --- /dev/null +++ b/changelog/2026-04-20.log @@ -0,0 +1,9 @@ +commit b53eb6e4f1b5fa4e2a4907022f591eb9a1860c33 +Enhance template parser to handle C++ comments and refactor preprocessing logic + +- Updated parser to correctly interpret C++ `//` and `/* ... */` comments within template code. +- Split preprocessing implementation into separate files for better organization. +- Added regression test for comment parsing in templates. +- Adjusted CSS styles for improved layout and readability in documentation. + + diff --git a/changelog/2026-04-22.log b/changelog/2026-04-22.log new file mode 100644 index 0000000..ae77573 --- /dev/null +++ b/changelog/2026-04-22.log @@ -0,0 +1,16 @@ +commit 8223dcc6b3cb7f4d26c69097fac973c2671f0938 +I think I need to change the documentation format + + +commit f7b066b374f1031d38e3d2b344f6680534c3a2b2 +changing doc format and HTML literals + + +commit 14ebf10a229021bb5d0fb1eae42a69c042699318 +changing doc format and HTML literals + + +commit 223cf4c6e1c7a205bf1a27bebdc6d04fd7557df0 +website with slop placeholders + + diff --git a/changelog/2026-04-28.log b/changelog/2026-04-28.log new file mode 100644 index 0000000..82e6971 --- /dev/null +++ b/changelog/2026-04-28.log @@ -0,0 +1,4 @@ +commit cd445f3c9b6aa079a969351d6eb742b8a4d24f6b +some cleanup + + diff --git a/changelog/2026-04-29.log b/changelog/2026-04-29.log new file mode 100644 index 0000000..99a7b9a --- /dev/null +++ b/changelog/2026-04-29.log @@ -0,0 +1,4 @@ +commit 9f7625c7fdd6a9d2a184dc2cdf9f8a719d219ec2 +working on documentation and more API functions + + diff --git a/changelog/2026-05-21.log b/changelog/2026-05-21.log new file mode 100644 index 0000000..49e8ff9 --- /dev/null +++ b/changelog/2026-05-21.log @@ -0,0 +1,24 @@ +commit 02e153a6a78bf8ded1c7380713023b4f9c3b656f +Add archive helpers and harden task runtime + + +commit d37517041de0c5ebe4dfd232093a78ff49cff383 +Add custom server API and runtime limits + + +commit 0d8b74930c74cc8018cb1c0cfc7cfe6740b49cf6 +Harden HTTP path headers sessions and archives + + +commit 41e9ca219fd684c75e78a5493e20c754c7899105 +Streamline hardening helpers and expand coverage + + +commit 8b37e7ea1e58e36c97852f79ec121947a1ffea08 +Fix direct HTTP status sanitizer fallback + + +commit 71ddcaf7d48ffd1343e597e4715b570c922a306c +Consolidate config and base64 helpers + + diff --git a/changelog/2026-06-11.log b/changelog/2026-06-11.log new file mode 100644 index 0000000..cda43fd --- /dev/null +++ b/changelog/2026-06-11.log @@ -0,0 +1,12 @@ +commit 7f757654b658d049564f1725f54fde781575e304 +fix: harden UCE runtime and starter + + +commit 20db6695890a3ac274217fd0ed9e0edf7c5eb093 +fix: stabilize runtime follow-up regressions + + +commit b957a2373b8464ffcb7791cc6b0031c441d5b09c +chore: ignore Python cache artifacts + + diff --git a/changelog/2026-06-12.log b/changelog/2026-06-12.log new file mode 100644 index 0000000..c4e8547 --- /dev/null +++ b/changelog/2026-06-12.log @@ -0,0 +1,28 @@ +commit 941f5aea08941327eecbc43128d8f171a4064616 +feat: add configurable UCE error pages + + +commit 7066da3cdef08b01dda64bca34caadc7000587b2 +refactor: rename DTree to DValue + + +commit 7e2faf1472c84f302ce5b7f9674091a1a2b3930f +spike: validate WASM phase 0 + + +commit 80285b7fb4acd15850218ee87c72ec8272332c05 +feat: implement WASM phase 1 DValue ABI + + +commit 961df2d542ff6554e32da9ee28e73f5fc59b5975 +phase 5 + + +commit 89b5499c8f4e1a8acc8748e66c9dba9eb9679369 +fix: harden WASM phase 5 harness + + +commit eb8f303f94f0f43699eca7cd6474eedaef1ed711 +docs: remove unsupported second-plane language roadmap + + diff --git a/changelog/2026-06-13.log b/changelog/2026-06-13.log new file mode 100644 index 0000000..cf4be1f --- /dev/null +++ b/changelog/2026-06-13.log @@ -0,0 +1,36 @@ +commit 577aae076e3603137265332adfdded3c15cfa8f4 +W3 + + +commit afaa4dd7c0203f322d625593a0d1c96c37130005 +feat: cut over to WASM backend + + +commit 5a56d4f39e4b30a9a4e43985d64906aa16a642e6 +W5 + + +commit c84fc86e6cdfe254a59d57b909f647e6c254ef76 +W6 + + +commit fe83c524118722c062295bc9575cb71eff64dacb +feat: membrane remaining wasm host surfaces + + +commit d6421cb8f3721e69e999b84335e9094ad96356e9 +feat: extend wasm backend entrypoints + + +commit af6500d1343581abdac475dcb6855821afd8c8d0 +fix: harden wasm w7 entrypoint paths + + +commit b1856c1725970b31027383a7ae79c2140a62a896 +chore: narrow wasm backend entrypoint API + + +commit 6bb4f7f0ad801a0127956f49e54d2be722c6537f +test: port network suite to uce cli runner + + diff --git a/changelog/2026-06-14.log b/changelog/2026-06-14.log new file mode 100644 index 0000000..912f1d3 --- /dev/null +++ b/changelog/2026-06-14.log @@ -0,0 +1,111 @@ +commit 15e8d092bc13c425b5c7f7a19dfaf3c9728104f5 +W7+ + + +commit 8587fbc5aa0f38739182fa50383bb94c8d821ed7 +wasm runtime: central WS broker, unified handlers, W7d holdouts, membrane completeness + +- WS: a dedicated broker process owns HTTP_PORT + every connection; it forwards + renders to the worker pool over uce.sock (non-blocking) and applies ws_* + command batches flushed back at workspace teardown. Removes the now-dead + per-worker websocket executor (-509 lines). +- Dispatch: unify CLI / WebSocket / serve_http / page render through one + serve_via_wasm(entry_unit, handler) path; handler string -> __uce_ + export symbol. +- W7d: rewrite zip.uce to the membrane return-value error contract (no C++ + try/catch), error-reporting.uce to genuine wasm traps instead of throw, and + sharedunit.uce to unit_info(); empty the native-only token gate. +- Membrane: wire ls / mkdir / file_mtime through new uce_host_file_list / + uce_host_file_mkdir / uce_host_file_mtime hostcalls (resolve_guest_file gains + directory support). Fixes /doc/index.uce listing nothing; adds a regression + assertion that the index enumerates items. +- Docs: add docs/wasm-runtime-architecture.md; record the W7e staged native- + deletion plan in WASM-PROPOSAL.md. + + +commit 2debd338040cf97e82bb8ccbb5ec09caee089c17 +W7e: wasm-preferred dispatch + compile-on-demand; harden unit ABI validator + +- Dispatch (linux_fastcgi.cpp): route every request through wasm. On a + cold/stale artifact, compile the unit on demand (get_shared_unit, forced) and + serve wasm; native compiler_invoke* remains only as a fallback when wasm + cannot be made ready (compile failure / backend disabled). Applies to the 4 + handle_complete branches and the CLI socket path. +- backend.cpp: delete the now-vestigial native-only fallback token gate + (wasm_backend_native_fallback_*), empty since W7d; should_handle now gates on + config + current artifact + healthy worker only. +- check_unit_wasm.py: skip the defense-in-depth llvm-nm allocator scan when + llvm-nm SIGSEGVs on a degenerate-but-valid module (e.g. a unit with no + exported handlers). Fixes site/demo/empty.uce, the last unit that could not + produce a .wasm; forbidden allocator *exports* are still rejected. + +A pi-assisted review caught that the compile-freshness check keys off the .so +mtime only, so force_recompile is required to rebuild a missing/stale .wasm; a +unit already cached in-process whose .wasm later vanished still uses native +fallback (closed in W7e stage B). Native execution is otherwise bypassed for +all real traffic. + + +commit fb728d63bcd0d80bd5161537e81c30d27eb4df7b +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. + + +commit cf513368730e5f337e64a9c9f1456e6a64f49d9c +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. + + +commit bfd6d338299dd9001fe2d4a66f82bbc2b3b07ed9 +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. + + + diff --git a/changelog/2026-06-15.log b/changelog/2026-06-15.log new file mode 100644 index 0000000..76d20f8 --- /dev/null +++ b/changelog/2026-06-15.log @@ -0,0 +1,58 @@ +commit 560290ca1d18d4d5a0d204bb187d1aa68c3b5ac7 +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. + + +commit 83ab9e10f7c0f17805e40a9a3d2b4a3357e5280f +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 .uce.cwasm cache the core got. + + +commit 4f84ac544d9c91a66d068d372055eec8e1723def +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. + + diff --git a/scripts/git-changelog-by-date.sh b/scripts/git-changelog-by-date.sh new file mode 100755 index 0000000..edb3ef2 --- /dev/null +++ b/scripts/git-changelog-by-date.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root=$(git rev-parse --show-toplevel) +cd "$repo_root" + +out_dir="${1:-changelog}" +mkdir -p "$out_dir" +rm -f "$out_dir"/*.log + +while IFS= read -r commit; do + commit_date=$(git show -s --format=%cs "$commit") + out_file="$out_dir/$commit_date.log" + { + printf 'commit %s\n' "$commit" + git show -s --format=%B "$commit" + printf '\n' + } >> "$out_file" +done < <(git rev-list --reverse HEAD) + +printf 'Wrote changelog files to %s\n' "$out_dir"