Pre-flight checklist
Problem or use case
concurrency is Experimental and carries hard documented constraints that block real adoption: handlers must be standalone serializable functions (no closures); the module is browser-only ("Node / Deno / Bun adapters: not adopted"); it requires a relaxed CSP ('unsafe-eval' plus worker-src blob:) because worker bodies are revived via new Function(...); and createSharedBuffer() needs crossOriginIsolated with COOP/COEP headers. The 'unsafe-eval' requirement in particular directly contradicts bQuery's secure-by-default posture. There is no published path out of Experimental.
Proposed solution
Publish exit criteria and resolve the two adoption-blocking constraints tracked in #134 (CSP-safe execution) and, where appropriate, document the closure limitation as a permanent, clearly-explained design boundary rather than a bug. Criteria: (a) a default execution mode that needs no 'unsafe-eval' (#134); (b) documented, enforced guidance for the serializable-handler constraint with good error messages; (c) test coverage for pools, RPC, and shared buffers; (d) an explicit statement of the runtime boundary (browser-focused) consistent with the module's stated non-goals.
Possible API or UX shape
## Stability: targeting Stable in 1.15.0
Exit criteria:
- [ ] CSP-safe default worker mode, no 'unsafe-eval' (#134)
- [ ] Serializable-handler constraint documented + enforced with clear errors
- [ ] Coverage: task/pool/RPC/sharedBuffer
- [ ] Runtime boundary stated (browser-focused, per non-goals)
Alternatives considered
Keeping concurrency Experimental because it is browser-only — the browser focus is a legitimate scoping decision and need not block stability; what blocks it is the eval-dependent default and undocumented constraints, both addressable. Adding Node/Deno/Bun worker adapters — explicitly out of scope per the module's non-goals, so not proposed here.
Relevant area
concurrency
Additional context
The module's ThreadTS parity matrix marks pools/collection helpers as "Adapted" and decorators/runtime adapters as "Not adopted," which is fine to keep. The 'unsafe-eval' requirement is the item most at odds with the framework's security identity and should be treated as the primary blocker.
Pre-flight checklist
Problem or use case
concurrencyis Experimental and carries hard documented constraints that block real adoption: handlers must be standalone serializable functions (no closures); the module is browser-only ("Node / Deno / Bun adapters: not adopted"); it requires a relaxed CSP ('unsafe-eval'plusworker-src blob:) because worker bodies are revived vianew Function(...); andcreateSharedBuffer()needscrossOriginIsolatedwith COOP/COEP headers. The'unsafe-eval'requirement in particular directly contradicts bQuery's secure-by-default posture. There is no published path out of Experimental.Proposed solution
Publish exit criteria and resolve the two adoption-blocking constraints tracked in #134 (CSP-safe execution) and, where appropriate, document the closure limitation as a permanent, clearly-explained design boundary rather than a bug. Criteria: (a) a default execution mode that needs no
'unsafe-eval'(#134); (b) documented, enforced guidance for the serializable-handler constraint with good error messages; (c) test coverage for pools, RPC, and shared buffers; (d) an explicit statement of the runtime boundary (browser-focused) consistent with the module's stated non-goals.Possible API or UX shape
Alternatives considered
Keeping
concurrencyExperimental because it is browser-only — the browser focus is a legitimate scoping decision and need not block stability; what blocks it is theeval-dependent default and undocumented constraints, both addressable. Adding Node/Deno/Bun worker adapters — explicitly out of scope per the module's non-goals, so not proposed here.Relevant area
concurrencyAdditional context
The module's ThreadTS parity matrix marks pools/collection helpers as "Adapted" and decorators/runtime adapters as "Not adopted," which is fine to keep. The
'unsafe-eval'requirement is the item most at odds with the framework's security identity and should be treated as the primary blocker.