findings(E-5,E-6): validation-round fixes — live e2e falsified two ported shapes
E-5: the module-identity bridge called installingModule._malloc, but this build exposes _malloc only as a bare glue-closure export (Module._malloc is absent) — every char/stat event entry threw TypeError, which also starved the E-6 credit window (thrown dispatches never acked) and wedged the queued bg-finished frame behind them. The bridge now uses the bare closure exports (identity is still exact: the EM_JS body IS the installing module's closure; the __ngspiceOnEvent self-disarm covers supersession). E-6 (codex reference design corrected — its validation matrix never ran): a FULL credit window was terminal (stopEventStream at 64 in-flight frames). Under live e2e that killed a real simulation: bg-thread emissions proxy one per task, so each line ships as its own frame and a normal transient outruns a busy main thread. A full window now DEFERS into a bounded FIFO (512 events / 4 MiB) drained in order as acks free credit; only true overload or an invalid ack is terminal. Retention stays bounded (8 MiB in flight + 4 MiB deferred + 1 MiB open batch). And the service/harness mirror queue now acks at ENQUEUE — placing a frame in the bounded pre-handler queue is taking ownership; without that, a stream starting before the C++ handler installs (the ngspice-probe page) starves the worker window forever. Test updates: worker-batch reducer — new "a full credit window defers and drains in order, never terminal" case pinning the regression; the storm case now proves the deferred caps are the terminal edge. board-ready.ts gains the owner-free openBoardProgrammatically (codex helper the ported occ-export spec needs; the barrier-based waitForUiBoardReady was NOT taken). occ-export.spec: domId is optional on this line's registry (coordinate fallback is the supported path). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
c14e76651c
commit
06a46546cc
7 changed files with 180 additions and 21 deletions
|
|
@ -177,7 +177,12 @@ EM_JS( void, js_ngspice_install_events, (), {
|
|||
let p = 0;
|
||||
if( text != null ) {
|
||||
const n = lengthBytesUTF8( text ) + 1;
|
||||
p = installingModule._malloc( n );
|
||||
// Bare closure exports: this EM_JS body is compiled into the
|
||||
// installing module's glue closure, so _malloc/stringToUTF8
|
||||
// ARE that exact module's (Module._malloc is not populated in
|
||||
// this build). The identity guarantee is the handler capture
|
||||
// plus the __ngspiceOnEvent self-disarm above.
|
||||
p = _malloc( n );
|
||||
stringToUTF8( text, p, n );
|
||||
}
|
||||
installingModule._pcbjam_ngspice_event( kind, p, a | 0, b | 0 );
|
||||
|
|
|
|||
Loading…
Reference in a new issue