Skip to main content

Rendering

Rendering is the process of transforming canonical package assets into provider-specific files. It is the core mechanism that makes Workloom provider-agnostic.

The rendering pipeline

Canonical package assets

Workspace revision (selected packages + targets + providers)

Render plan (deterministic, reviewable)

Provider-specific projected files

Local apply with ownership tracking

Render plans

A render plan is a deterministic description of what files should exist. Given the same workspace revision and package versions, the same render plan is always produced.

The plan includes:

  • File path — workspace-relative, forward-slash normalized
  • Content hash — SHA-256 of the rendered content
  • Ownership — which package owns this file
  • Projection policy — how this file should be managed locally
  • Write modecreate, replace-owned, or manual-review

Dry-run

wl render --dry-run

Produces a render plan without writing files. Use this to preview what wl sync would do.

Ownership headers

Every generated file includes an ownership header:

<!--
Generated by wl.
Workspace: wksp_platform_api_01
Package: @acme/security-review@1.4.2
Object: sha256:abc123...
Do not edit directly unless you intend to create a local override.
-->

For files that cannot include comments (e.g., JSON), ownership metadata is stored in .loom/state.json.

Merging shared files

Some providers use shared config files. For example, multiple packages may contribute entries to .claude/settings.json. Workloom merges these deterministically:

  1. Collect all assets targeting the same output file
  2. Sort by package name for stable ordering
  3. Deep-merge objects (settings) or concatenate arrays (hooks)
  4. Write the merged result with combined ownership metadata

Projection policies

PolicyBehavior
generated_localGenerated locally, typically gitignored
committed_projectionMust be committed to the repo (e.g., Copilot instructions)
user_localWritten to user home dir (deferred to later phases)
manual_reviewRequires human review before apply
approval_requiredRequires explicit approval in the approval ledger
forbiddenBlocked entirely by policy