# `kcode-k1-web-code-runtime`
`K1WebCodeRuntime` owns lazily opened K1 web-coding instances, one for each 12-byte user identifier.
Construct a `RuntimeConfig` with the cache root, projection root, revisions, and Podman configuration, then create the runtime with a shared `K1WebProjection`. Call `with_user` to run an operation against that user's mutable `K1WebCoding`.
Each user identifier is represented in the cache root by exactly 24 lowercase hexadecimal characters. Before opening a user's coding instance, the runtime accepts an existing real per-user directory or creates exactly that directory when it is missing. It rejects a per-user path that is a symlink or not a directory and does not create a missing cache-root hierarchy. The runtime holds its slot-map lock only while locating or creating a per-user slot. Lazy opening and the supplied operation execute under that user's slot lock, so separate users do not block one another while opening or operating. The mutable coding reference is scoped to the operation closure and cannot escape the lock.
Errors returned by preparing or opening the user cache, or by the operation, are preserved as `RuntimeError::Coding`; poisoned runtime locks are reported as `RuntimeError::LockPoisoned`.