Scope stays explicit.
Container, run, snapshot, lock, queue payload, Insight, and Skill paths carry Organization, Project, and Container identity.
Architecture
The Runtime assigns a Thread before its run. IntelligenceAgentRunner writes the AG-UI event stream. Learning derives bounded snapshots from those events after the exact run ends.
Runtime path
learning.containerId resolves once to a stable ID or no assignment.Learning path
Hard boundaries
Container, run, snapshot, lock, queue payload, Insight, and Skill paths carry Organization, Project, and Container identity.
The API and database accept the first valid assignment, allow the same ID again, and reject a change.
The first attempt chooses at most 500 unconsumed snapshots, stores a manifest plus digest, and reuses it on retry.
A scoped database lock remains held until the Kubernetes Job ends, including across reconciler replicas.
Each queue callback settles one job. Local worker concurrency keeps unrelated Containers moving.
A failed lazy connection clears its cache before any run is created. If queue send rejects, only the creator’s exact queued run fails, so a later request can create a new run.