Layer PRs: Version Control for Building Models¶
Spec set: Draft v0.1, target ifc-lite 4.0. Owner: Louis Trümpler (LT+).
North star¶
Every change to a building model, whether made by a human in a viewer, a script in CI, or an AI agent in an MCP session, lands as an immutable, provenance-stamped IFCX overlay layer. Integrating a layer into the shared model is a review workflow: semantic diff, required checks, per-entity accept/reject, full audit trail.
No agent writes to main. Agents propose. Humans merge.
The endgame is bigger than a feature: a content-addressed, federated change graph for the built environment. Git gave software branching, review, CI, and an ecosystem (forges, registries, bots). Buildings get the same, but the unit of change is semantic (entity, component, opinion) instead of textual (line), and non-human authors are first-class from day one. Whoever defines this layer (format, provenance, merge semantics) defines how AI enters AEC. This spec set is that definition, built openly on IFCX so it can become a buildingSMART standard rather than a vendor moat.
Why IFClite is the place this happens¶
The repo already converged on the primitives without naming the product:
@ifc-lite/ifcxcomposes USD-style layer stacks (layer-stack.ts,composition.ts)@ifc-lite/diffships a store-agnostic, fingerprint-based entity diff engine@ifc-lite/collabships CRDT sessions, branching starters, conflict detection, andextractMinimalLayer(a differential layer composer, additive-only)@ifc-lite/mutationsships change sets;@ifc-lite/idsships validation;@ifc-lite/bcfships the review-comment substrate@ifc-lite/extensionsships a capability grammar with risk tiers, audit, and dry-run: the security model for non-human authors already exists@ifc-lite/mcpships the agent surface
branch.ts and minimal-layer.ts both carry docstrings deferring exactly the pieces specified here (differential composer, deletion overlays). This spec set closes those deferrals and composes everything into one product.
Reading map¶
| Doc | Contents |
|---|---|
| 01-concepts | Glossary, the two-tier change model, everything-is-a-layer |
| 02-layer-format | Op model, tombstones, canonical serialization, content addressing |
| 03-provenance | Manifest schema, signatures, trust model |
| 04-identity | Entity identity across layers, identity_map, fallbacks |
| 05-merge | Three-way merge, conflict taxonomy, rebase, derived data and geometry tiers |
| 06-agents | MCP draft-layer lifecycle and tool family |
| 07-security | Capability scoping, enforcement points, threat model, audit |
| 08-review | Review workflow, viewer UI, BCF, required checks, Time Machine DAG |
| 09-cli | ifc layer command reference, GitHub Action |
| 10-registry | Hosted layer registry, federation, policies, product tiers |
| 11-standards-ecosystem | IFCX panel strategy, ecosystem integrations, competitive positioning |
| 12-roadmap | Implementation plan and task tracker (collab-plan.md format) |
Working agreements (inherited from AGENTS.md / collab-plan.md)¶
- Strict IFC nomenclature in user-facing APIs; Pset and property names in PascalCase
- Federation-aware IDs: never bypass
FederationRegistryfor cross-model lookups - MPL-2.0 license headers on every new
.ts/.rsfile; changesets for published packages - File size cap ~400 LOC; no
as any; tests required for every new package and feature - Every phase ships behind a feature flag (
layers.enabled) and lands onmainonly with green exit criteria