Angular in generic execution cells
The installed angular-ssr-component-v1 profile implements the public async
latent:web/application@0.1.0.handle contract using the ordinary Wasmtime
backend. ADR-0040
defines its integration and compatibility boundary. The fixed
adapter is composed with the
closed JavaScript engine before publication. The private synchronous engine
interface is not a node import or an SDK API.
Configuration and identity
Set rendererProfile: "angular-ssr-component-v1" on the node. The supported
profiles are explicitly controlled local-experimental-v1 execution and
protected external-capsule-v1 execution with signed application packages and
isolated native preparation. The T1 workflow
describes the latter's configuration and admission requirements.
Reserve the workload's source, memory and CPU
through the normal settings; for the maintained fixture these include a
32 MiB limits.maximumComponentBytes, 2 MiB limits.maximumPayloadBytes,
256 MiB cell memory and 2,000,000,000 execution.maximumCpuFuel. The opt-in
does not increase those budgets. Node allocator/optimization must remain
on-demand/speed. It selects a 2 MiB Wasm stack, 4 MiB async stack and the
bounded composition shape for the shared engine.
A callable capsule declares compatibility.renderer with profile and
profileDigest, obtained from RendererRequirement::angular() or
renderer_profile_digest(AngularSsrComponentV1). Do not hardcode a digest:
it binds the fixed adapter sources and ABI, and changes when those inputs do.
The capsule world remains tenant-owned and exports the shared public web
interface. Require single-threaded stateless execution, disable snapshots and
fusion, and declare at most 256 MiB aggregate linear memory, 2 billion fuel and
5,000 ms wall time. Deployment/caller budgets may be lower.
The runtime rejects an absent or different installed profile and validates the actual composed surface before compiling or loading native code. Exact component/package metadata, native engine/target/CPU settings, security profile and host ABI remain separate preparation inputs. Cached code never carries a publication's authority: the ordinary catalog lifecycle and guarded activation start remain required.
Request ownership and limits
Each invocation receives a new Store, JavaScript heap, module globals, Angular injector, transfer state and callback queues. The adapter gets identity, lineage, trace and deadline from sealed host context. Cookies are opaque request data. The fixture validates hydration data and a module counter across users and after failures. No application-owned instance, event loop or timer remains when the Store is destroyed.
Two component memories share one aggregate memory charge. The adapter limits private JSON input/result frames to 256 KiB/1 MiB and HTML to 128 KiB. The shared public HTTP codec and delivery owner retain their own finite buffers. Timers allow 256 cumulative zero-delay callbacks; explicit microtasks allow 4,096. Positive timers, intervals and mutation of the timer hooks fail. Native Promise chains additionally consume fuel/memory and observe cancellation. Fuel or deadlines may reject work below a byte ceiling.
Preparation uses the existing finite shared job/waiter/cache limits. The HTTP listener preserves the original selected publication and request budget. Disconnect transfers ownership to the normal cleanup supervisor until the actual guest and delivery owners retire; revocation rejects before a fresh Store starts. Store memory accounting does not represent total process RSS.
Validation and support boundary
After installing the pinned npm dependencies without lifecycle scripts, build
the maintained qualification bundle with npm run build in
examples/renderer-profile. Then run python3 tools/build_angular_renderer.py
from the repository root. It composes the public fixture under
examples/renderer-profile/dist/runtime/application.wasm.
The CI gate uses tools/run_angular_renderer_tests.py with the workspace test
manifest and that exact component. It executes real generic-backend and HTTP
node regressions, including failures, concurrent progress, disconnect and
revocation. Missing fixtures fail the gate. No binary or bulk report is checked
in. The original qualification evidence
remains historical; renderer resource measurements
record their own bounded release-build profiles.
The observed application builder,
componentless web deployment management and
browser delivery defenses are implemented.
The complete reference workflow
exercises their integration under external-capsule-v1, including signed
admission, provider calls, hydration, revocation, restart and rollback. T1 still
requires the actual package, build and authority checks; relabeling Angular
output as a Rust or C build cannot authorize execution. This renderer profile
provides neither an ambient Node process nor arbitrary Node package support.