Documentation
Decision records
Every architectural trade-off in Loom is written down — what was decided, why, what evidence backed it, and which alternatives were rejected and on what grounds. Several record a decision not to build something. They are listed newest first.
147 of 147 records
- 0147 onDurableEvent: an observer that only reports what the log holds
- 0146 Reclaimable content ages from the citing execution's end
- 0145 App-owned retention policy: one validated value the existing retention passes consume
- 0144 Sandbox backend SPI: bring your own sandbox, keep loom's guarantees
- 0143 EncryptingContentStore: a subject-aware ContentStore so claim-check works under security.crypto
- 0142 Agent lean tool-call log: agentLoop$({ toolCallLog: "lean" })
- 0141 An opt-in zstd snapshot codec: a format byte, a BYTEA/BLOB frame, compress before sealing
- 0140 Agent claim-check opt-in: execution.claimCheck
- 0139 Reserved streams archive what a trim or a delete removes
- 0138 Compaction archives what it removes, and the fold stops copying settled steps' inputs
- 0137 Agent state growth: an opt-in warning and a built-in compaction summarizer
- 0136 Postgres snapshot state: opt-in lz4 TOAST compression, measured
- 0135 waitForSuspend() rejects when the run terminates before it parks
- 0134 Snapshot pruning: dropping superseded snapshots without losing a checkpoint or a fork point
- 0133 Model reasoning as audit evidence: captured at the provider seam, kept out of the fold
- 0132 Folded-state read models: durable per-execution projections in @loom/plugin-read-model
- 0131 Loom's own evals: quality gates for the first-party agentic layer
- 0130 Refuse to deliver a sealed payload to a flow that cannot open it
- 0129 Close the creationMarker ABA: a store-assigned incarnation, kept out of the envelope
- 0128 Carry decision order through checkpoints: a recorded sequence on each folded decision
- 0127 @loom/plugin-renderer-dom: a framework-free DOM renderer for the Blueprint, in loom
- 0126 Unicode lexical scoring, prompt overrides, and time zones on schedules (R19)
- 0125 Tool search: an opt-in search_tools meta-tool, a recorded search, and a deterministic BM25F ranker
- 0124 The learning lifecycle: a policy registry with shadow/canary/rollback, content-addressed prompt and model versions, doubly-robust evaluation with bootstrap intervals, scoped JSONL export, an embedding SPI and an LLM eval harness
- 0123 Planning depth: plan graphs with bindings, journaled planning, a dependency-aware executor, bounded replanning and a goal store
- 0122 A conversation layer, a streaming transport and token-aware context budgeting
- 0121 One canonical agent loop
- 0120 LLM content parts and real tool-call threading
- 0119 Streaming deltas from a decider's governed call
- 0118 A conditional fence: acquire-if-parked
- 0117 Approvals bound to what the approver saw, a first-party ResumeAuthenticator, and no auto-approve
- 0116 Attaching an outcome to a past decision of a finished execution
- 0115 Open vocabularies: EffectKind, TaskKind, and metering dimensions
- 0114 ctx.ui leaves the kernel
- 0113 A body-aware code fingerprint, replay-divergence detection, and migration of dynamic step ids
- 0112 Structured concurrency: cancellation scopes, a park barrier, and the cancel cascade
- 0111 The execution's principal is durable
- 0110 A durable inbox, ctx.receive and ctx.select, and concurrent waits
- 0109 Bounded history for a long-lived execution: ctx.continueAsNew
- 0108 One order for execution ids, and fail-soft boot migrations
- 0107 Fork points in compacted history, and the blank stream the pre-0106 bug wrote
- 0106 Compaction integrity: identity, re-compaction, and pinned event kinds
- 0105 A caught step failure is not the execution's failure
- 0104 A recovery re-drive never answers a gate
- 0103 A caller-chosen execution id's bootstrap is durable before the body runs
- 0102 Flow-level emit / stream / ui append once per execution (EVENT_SCHEMA 1.19.0)
- 0101 Blueprint IR 2.4.0: layout ids
- 0100 Blueprint IR 2.3.0: the empty binding state
- 0099 Blueprint IR 2.2.0: layout roles
- 0098 Blueprint IR 2.1.0: cell placement and layout titles
- 0097 Blueprint IR 2.0.0: the IR grows instead of being worked around
- 0096 The Blueprint is loom's stable rendering IR
- 0095 Pinning what a binding *means*, not just what it is called
- 0094 Node identity across a structural change
- 0093 Row-granular purge on the read-model SPI
- 0092 Adaptive operator profiles: the journaled value is a decision, not an offset
- 0091 A corpus is mutable: entry identity, and @loom/knowledge
- 0090 Knowledge is retrieval over memory, not a construct
- 0089 @loom/plugin-sandbox: worker-thread evaluation and the hard kill
- 0088 Blueprint conformance: enforcing a catalogue that was already declared
- 0087 The agent loop is a runner body, not a step handler
- 0086 Runner-body reach analysis, and two rules that were wrong once they could fire
- 0085 The integrity axis: taint as a value, enforced at the prompt boundary
- 0084 Effect classes: a static ceiling beside K2's runtime floor
- 0083 The second-consumer rule: an outward gate on first-party surface
- 0082 Substitutive replay deferred; branch-from-prefix must be eliminated first
- 0081 Long-lived suspensions need a benchmark, not a promotion
- 0080 @loom/learning: the substrate, not the learner
- 0079 context and policy on the decision seam (EVENT_SCHEMA 1.18.0)
- 0078 Exploration belongs in the routing seam: the learned router must not collapse
- 0077 Typed resume payloads: per-gate contracts, enforced before the append
- 0076 Array crossings in classification paths: expand late, walk once
- 0075 Shard rebalancing: virtual buckets, lazy drain, no coordinator
- 0074 Storage scale-out as composable decorators, not backend features
- 0073 Effect mode: journaled vs ambient as a declaration + boundary check
- 0072 MCP Apps (SEP-1865): ingress fidelity now, ui:// egress gated on an MCP server
- 0071 Read-only replay inspector (@loom/replay-inspector), IX series
- 0070 A2UI callFunction bidirectional RPC
- 0069 Agent-surface rename + A2UI egress adapter
- 0068 Fine-grained selector-subscription on ProjectionRuntime
- 0067 Reactive-graph resumability rejected; lazy widget hydration is a renderer-plugin concern
- 0066 invokeTransient: a supported façade for non-durable effect invocation
- 0065 Engine-side group-commit batching: deferred behind an evidence gate
- 0064 @loom/plugin-sandbox: hardened eval of LLM-authored reshaping code
- 0063 MCP dynamic dispatch: canonical schema hash, drift channel, principal handling
- 0062 ContentStore.getMany + batch-scoped reference resolution
- 0061 Step identity rule & interpreter-pattern guardrails
- 0060 Typed failure channels: errors: contracts + replay substitution
- 0059 Streaming content ingestion: putStream + stream-typed claim-check results
- 0058 @loom/plugin-read-model: durable, checkpointed cross-execution read models
- 0057 Multi-gate suspend passthrough: the ordered _resumePayloads fold (EVENT_SCHEMA 1.16.0)
- 0056 K11.5: contract-versioned state migration on resumeAs (EVENT_SCHEMA 1.15.0)
- 0055 K10.6: the pin seam — retention pin predicate + pinned mark-and-sweep for content
- 0054 Claim-check middleware: the reference is the recorded value
- 0053 @loom/plugin-durable-state: typed, versioned carry state as recorded effects
- 0052 Run chaining (rotate$) deferred behind an evidence gate; suspension transfer rejected
- 0051 Perpetual-agent workloads: schedule remodel, durable state, claim-check — placement verdicts
- 0050 appgen --model is provider-agnostic (any model, not just local Gemma)
- 0049 Projections fold on demand: event-type-gated lazy handler chunks
- 0048 Declarative policy enforcement (policy$ → the K2 capability ring)
- 0047 First-party dev-tooling lives in tools/*, not a separate repo
- 0046 Content-store seam: a thin, PII-light authoritative log
- 0045 Deferred security hardening (HTTP auth seam, delegation binding, lockfile validation)
- 0044 No compiler plugin API; the manifest is the public build-time contract
- 0043 Plugin packaging: minimal kernel, adapters as plugins, 1P/3P separation
- 0042 AI-native, brownfield-aware loom appgen
- 0041 Saga / Compensation (@loom/saga)
- 0040 Live Query & Child-Workflow Orchestration (@loom/live-query, @loom/orchestration)
- 0039 Execution-Lifecycle Authorization (ExecutionAuthorizer + EXECUTION_DENIED)
- 0038 Per-Tenant Fair Scheduler (@loom/fair-scheduler)
- 0037 Tamper-Evident Audit Chain (@loom/audit-chain)
- 0036 Deterministic Simulation Testing (@loom/dst)
- 0035 Kernel Governance Layer (manifest, maturity, fitness, specification)
- 0034 Advisory Optimization Pipeline
- 0033 SPI consolidation + conformance contracts
- 0032 Resource dimensions + bounded negotiation
- 0031 Runtime Introspection facade
- 0030 Decision materialization (DecisionStore / DecisionGraph)
- 0029 Runtime Observability / profiler
- 0028 Runtime Verification (@loom/verify)
- 0027 Advisory pre-warming at cold-start boundaries
- 0026 T2: wire-level kernel ABI (language neutrality)
- 0025 T1: durable timers & scheduled executions (kernel service)
- 0024 K12: identity, tenancy & delegated authority
- 0023 K11: flow-code versioning for in-flight executions
- 0022 K10: log lifecycle — retention, redaction & encryption
- 0021 K9: effect delivery contract — idempotency & fencing
- 0020 K8: cancellation, deadlines & bounded effects
- 0019 K7: data-plane isolation & egress control
- 0018 The learning seam: closing the decision loop
- 0017 K6: the behavioral-safety ring
- 0016 Loom 2.0: Execution Runtime + the Decision seam
- 0015 Data-structure & algorithm optimizations on the hot paths
- 0014 loom deploy check + the inspector
- 0013 Composable orchestrator primitives (prototype-and-check)
- 0012 Flow-graph validation (loom check + defineConfig({validate}))
- 0011 Folder convention + loom gen/loom new (build-time codegen)
- 0010 the loom CLI (logs / debug / eval)
- 0009 @loom/testing fixtures kit
- 0008 Evals (log-as-fixture) + Deploy-simulation
- 0007 Manifest cross-check, flow registration by shape, and the A2A AgentExecutor
- 0006 loom.config (defineConfig) + effect middleware
- 0005 Distributed Execution Graph (fan-out / join)
- 0004 Failure Recovery (idempotent redispatch)
- 0003 CloudRunWorkerRuntime + Platform SPI
- 0002 Dedicated HTTP Worker + RemoteWorkerRuntime
- 0001 Execution Dispatcher + Worker Runtime SPI