Add async script-file jobs - #36
Conversation
|
Live acceptance completed on Daz Studio 6.25.2026.14722 / Qt 6.10.3. Verified:
The first worker-thread version exposed a real Qt affinity crash in |
|
Stage 1B is now included in e3e2f7f: async script jobs can name a per-job JSONL report file, which the plug-in incrementally ingests into structured progress, a bounded 100-entry log tail with truncation metadata, and a deduplicated output manifest. The report path is injected as getArguments()[0].__dssReportFile. Validation: compatible DS6 Release build; 700 dazpy tests + 30 subtests; all 78 live HTTP API tests; live progress remained queryable while Daz's main thread was busy. The installed DS6 plug-in is running healthy. |
|
Stage 2 is now in dc9fd6d: dazpy owns registered-script registration/execution, detailed request and render cancellation, long-poll timeout policy, typed generic server errors, and SSE error mapping. Validation: 706 tests plus 30 subtests; compileall clean; live MCP adapter exercised status, registered scene-info, and request listing against Daz Studio. |
|
Stage 6 shared-runtime update: a904671 adds verified four-channel visibility shared by queued DazScript recipes and dazpy; cb8aa16 adds structured progress/log/output reporting shared by recipes and async observation. Live validation against Daz Studio 6.25: 706 server/dazpy unit tests, 27 async-client tests, 81 live HTTP API tests, plus focused runtime contract tests. Afterglow delegates both invariants while retaining Script IDE fallbacks (76a02e3, f5fa30e). |
|
Stage 6 node-resolution slice landed in 95c4a65. DSS.nodes now owns exact label/name/either lookup, missing-node diagnostics with nearby candidates, and duplicate rejection; dazpy discovery and generated node locators delegate to it. Validation: 707 server/dazpy tests, 27 async-client tests, 82 live HTTP tests. Afterglow delegation is pushed as 89267c7 (rebased over concurrent main). |
|
Stage 6 render-settings slice landed in dfa9614. DSS.render now applies and verifies output path, paired dimensions, direct-to-file/software mode, viewport override, camera, and Iray sample/time caps. dazpy setters/render and Afterglow materializer/capsule delegate to it. Validation: 709 unit tests, 27 async-client tests, 83 live HTTP tests. Afterglow delegation is pushed as 54bf3c7 over concurrent main. |
|
Stage 6 gained two more shared-runtime slices:
Current gates: 713 unit, 27 async-client, 85 live API. The compatible DS6 plugin was rebuilt, installed, restarted, and the focused runtime contract passed live. |
|
Hi @abrady It looks like you've added a number of changes onto the PR that seem to be rather large for the narrow issue that you identified. Can you check your code and limit the submission to the specific problem of the async execute not picking up the scriptFile (and maybe the async-queue responsiveness fix) but leave out the broad scene, render, and runtime refactors unless they're directly related to this problem? I'm fine with incorporating the other fixes, but they should be in a separate PR(s). |
9eecdf5 to
b4f746d
Compare
|
I ran Claude 🚫 Blocker:
|
Follow-up review — commit a14f9faGreat progress on the first two blockers:
🚫 New blocker introduced by this update:
|
Summary
scriptFileonPOST /execute/asyncwith the existing file-over-inline precedencegetScriptFileName()under the Studio 6evaluate()result-capture wrapperdazpyclientsArchitecture
Previously, a busy Daz main thread could block or reject an async submission before it entered the queue. Now the HTTP worker enqueues it immediately for later execution, so submitted work is retained and can be monitored or cancelled while Daz finishes the current job.
HTTP worker threads only parse and validate request value data, then submit it to the mutex-protected
AsyncRequestManager. The manager owns queue and lifecycle state. DazScript loading and execution remain on Daz's main thread inprocessNextAsyncRequest().This keeps submission genuinely asynchronous without moving Daz or UI work off the main thread. UI logging from worker paths is posted back through the existing queued
appendLogBytesslot.Verification
Scope
This PR is intentionally limited to async script-file execution and queue responsiveness. Structured job observation, broader
dazpyprotocol changes, and the shared scene/render/runtime work have been removed for focused follow-up PRs.