Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cross-industry patterns: evidence, adoption and rejection

Document status: draft. Canonical source.

This document synthesizes 52 research records added on 2026-08-29 from visual-effects interchange, game-engine asset systems, programming-language research on bidirectional transformation and layout verification, distributed-systems testing, and 2D-rendering conformance practice. Each pattern below is classified as borrowed (adopted as is), adapted (adopted with a stated change) or rejected (ruled out with the reason). Record identifiers (nuif:research:*) carry the locators; this document does not repeat them.

Method

The 52 records synthesized here were reviewed from primary sources (specifications, source code at a named commit and papers with DOI). reviewed does not mean every material claim has completed locator-level verification; research/AUDIT.md defines the stricter verified state. Claims resting on one record inherit its evidence status as well as its confidence. Source conflicts remain explicit until an RFC or experiment resolves them.

Patterns

Document model and composition

PatternSourceDecisionNUIF artifact
Opinion strength ordering over composition arcs (LIVERPS)openusd-composition-and-crateAdapt: NUIF needs a total, documented resolution order for library, theme, variant and instance-override opinions; six arc kinds are more than a UI document needsspec/03-components-and-composition.md, question composition-strength
Flatten as an explicit, named lowering that discards compositionopenusd-composition-and-crate, alembicBorrow: flattening is a lowering with a fidelity record, never the save formatspec/00-conformance.md, docs/whitepaper/01-architecture.md
Authored network versus cooked output with pull-based, memoized evaluation and push-based dirtyinghoudini-pdg-and-hda, hydra-render-delegateBorrow for the evaluator: resolved snapshots are pull-evaluated per context and invalidated by hierarchical locator sets rather than global dirty bitscrates/nuif-layout, ADR 0002
Prefab override as a sparse modification set against a source definitionunity-prefabs-and-yaml-mergeBorrow: instance overrides are sparse property sets keyed by stable identity and property pathspec/03-components-and-composition.md
Resolved-only interchange (baked samples)alembicReject as a canonical form; accept as an explicit cache profilespec/08-serialization.md

Identity and ordering

PatternSourceDecisionNUIF artifact
File-local numeric identity with global identity through a second keyunity-prefabs-and-yaml-merge, godot-tscn-scene-formatReject: file-local identities orphan cross-file references on replacement; NUIF identities are global from creationspec/02-identity-and-properties.md
Path-based addressing in patchesjson-patch-rfc6902-and-merge-patchReject for entities; retain for property paths inside an identity-addressed operationspec/06-operations-and-patches.md
Parent link and fractional position as one atomic propertyfigma-multiplayer-and-rendering-engineeringAdapt: parent and anchor move together; collaboration profiles may use list identifiers internally, while canonical operations use Start/After(id) anchorsRFC 0006, crates/nuif-protocol
Tree move with undo/redo of concurrent operations and cycle rejection, mechanized proofcrdt-tree-move-operationAdapt for the collaboration profile; the canonical document keeps a totally ordered log and needs no replica metadataspec/10-collaboration-profile.md
Random resource identifiers with path fallback and warningsgodot-tscn-scene-formatBorrow the fallback discipline for asset references; a resolved-by-path reference must be diagnosedspec/09-provenance-and-fidelity.md

Unknown data preservation and schema evolution

PatternSourceDecisionNUIF artifact
UnknownSchema keeps name, version and raw payload and re-emits it verbatim; round trip asserted by a testopentimelineioBorrow verbatim: this is the executable form of nuif:claim:opaque-preservationrfcs/0002-extension-preservation.md, experiment unknown-extension-roundtrip
Unknown node class preserved as a placeholder that records its original class and properties, written back on savegodot-tscn-scene-formatBorrow: entities of unknown kind are preserved, not dropped, and their original kind is restored on exportspec/07-extensions-and-dialects.md
Unknown data ignored and not re-savedblender-dna-rna-and-headlessReject: this is the failure mode NUIF exists to preventrisk register
Per-schema version numbers with gap-tolerant upgrade functions and a generated version manifestopentimelineio, unreal-asset-versioning-and-automationAdapt: each core record kind carries a version; migrations are pure functions registered per kind; reading a newer version than known is an error, not silent lossspec/08-serialization.md, migrate command
Self-describing struct layout embedded in the fileblender-dna-rna-and-headlessReject: NUIF encodings are schema-versioned, not struct-layout-described; the deterministic CBOR profile already carries structureADR 0004
Extension prefix registry with a status ladder that requires validator support before releasegltf-validator-and-sample-assetsBorrow: EXT namespaces are promoted only with a conformance fixture and validator rulequestion extension-governance

Operations, undo and merge

PatternSourceDecisionNUIF artifact
Every editor action is an operator with typed parameters, invocable from scriptsblender-dna-rna-and-headlessBorrow: every editor gesture lowers to a protocol operation that a script can invokeRFC 0004
Memento-based transaction snapshotsunreal-asset-versioning-and-automation, blender-dna-rna-and-headlessReject for the canonical log; inverse operations are recorded instead, because snapshots do not commute and cannot be mergedspec/06-operations-and-patches.md
Undo restores expected user state under concurrent edits; undo rewrites redo historyfigma-multiplayer-and-rendering-engineering, command-pattern-undo-and-event-sourcingAdapt: the invariant “undo, copy, redo leaves the document unchanged” becomes a metamorphic relation in the operations suiteconformance/HARNESS.md
Structural three-way merge keyed by class and identity with declared set-valued fields and float epsilonsunity-prefabs-and-yaml-mergeBorrow: a merge-rules declaration per property kind (ordered list, identity set, scalar with tolerance)spec/06-operations-and-patches.md
Tree matching becomes the identity map when stable identifiers exist; the residual problem is move and order conflictsast-diff-gumtree-and-structural-mergeBorrow: no heuristic matching in NUIF-native merges; GumTree-style matching is reserved for adapters without identitydocs/whitepaper/03-protocol-and-portability.md
Conflicts as first-class states rather than failurespatch-theory-darcs-pijulBorrow: typed conflict objects are document state until resolvedspec/06-operations-and-patches.md
Operational transformation with server serializationoperational-transformation-vs-crdtReject as a canonical model; permissible as a collaboration profileADR 0005

Canonical encoding

PatternSourceDecisionNUIF artifact
RFC 8949 §4.2 core deterministic encoding rulescanonicalization-rfc8785-and-cbor-deterministicBorrownuif-cbor-0
Float handling: CDE keeps numeric kinds while dCBOR reduces integral floats and zerosame, cbor-data-model-and-key-order-correctionPreserve NUIF’s declared integer/real kinds; canonicalize both real zeros to positive floating zeroRFC 0008
RFC 8785 number serialization via shortest round-trip and -0 to 0sameAdapt for nuif-text-0spec/08-serialization.md
Content-addressed deduplication of array valuesopenusd-composition-and-crate, alembicBorrow for the package asset store; reject for editable entitiesADR 0004

Layout

PatternSourceDecisionNUIF artifact
Fixture tests generated from browser layout through WebDriver, compared at < 0.1 px, with structural (not numeric) handling of known divergencestaffy-and-yoga-browser-generated-tests, differential-testingBorrow: the layout differential suite is generated, never edited by hand; divergences are classified per caseexperiment layout-differential
Layout as SMT-solvable constraints with a visual assertion logiccassius-web-layout-verificationAdapt: the assertion vocabulary (no overlap, containment, alignment, text fits) becomes a fixture-level oracle; the SMT encoding itself is out of scope because no formalization covers flex or gridconformance/HARNESS.md
Relational constraint synthesis from multi-device examplesinferui-and-layout-synthesisAdapt for import inference only; results are marked inferred with confidenceexperiment layout-inference
Flexbox §9.9.1.2 placeholder and grid intrinsic-sizing divergencescss-flexbox-grid-algorithm-specsRecord: NUIF conformance cannot claim exact agreement where the CSS specification is implementation-defined; such cases are tolerance-tieredspec/04-layout.md

Rendering determinism

PatternSourceDecisionNUIF artifact
Renderer as a pluggable backend behind a stable scene abstractionhydra-render-delegateBorrow (already ADR 0003)crates/nuif-render
GPU shaders as ground truth compared by a perceptual meanvello-testing-and-cpu-referenceReject as the conformance oracle; borrow the threshold values for the interactive backendconformance/HARNESS.md
CPU f32 pipeline with tolerance 0 inside Vello’s own harnessvello-testing-and-cpu-reference, resvg-test-suiteTreat as candidate evidence, not proof of cross-platform identity; calibrate NUIF’s path with pinned assets and a CI matrixrender-tolerance experiment, ADR 0003
Per-test numeric and perceptual thresholds (idiff, oiiotool, WPT fuzzy, WebRender fuzzy(max,count))hydra-render-delegate, blender-dna-rna-and-headless, skia-gold-and-gm-tests, webrender-reftestsAdapt into three declared tiers: exact, bounded per-channel delta with pixel count, perceptual (ꟻLIP mean)conformance/HARNESS.md
Reftests (two documents that must render identically) over pixel baselinesskia-gold-and-gm-testsBorrow for equivalence-preserving rewritesmetamorphic relation class 1
Scene capture to a text serialization for deterministic replaywebrender-reftestsBorrow: render scenes are serializable fixturescrates/nuif-render
WGSL and WebGPU leave rounding, reassociation, sample locations and edge inclusion implementation-definedgpu-rendering-nondeterminismRecord: GPU output is never normativespec/05-geometry-paint-text.md

Text

PatternSourceDecisionNUIF artifact
Shaping fixtures as glyph strings with font hash, options and expected glyph=cluster@dx,dy+adv outputtext-rendering-reproducibilityBorrow the format for the text suiteexperiment text-pinning
Hinting off, grayscale coverage, declared subpixel quantum, font SHA-256, Unicode and shaper versions pinnedsameBorrowspec/05-geometry-paint-text.md

Testing methodology

PatternSourceDecisionNUIF artifact
Deterministic simulation: single-threaded scheduler, seeded PRNG, all nondeterminism behind injectable interfaces, reproduction by seeddeterministic-simulation-testingBorrow: the trial loop is seed-driven and prints the seed on failureconformance/HARNESS.md
Swarm testing (random feature subsets per run)sameBorrow for operation generatorssame
Metamorphic relations with tolerant equality; reduction by reversing recorded transformationsmetamorphic-testing-graphicsBorrow: nine relation classes are defined in the recordsame
ddmin over operation sequences, hierarchical reduction over the document, choice-sequence shrinking over generated valuesdelta-debugging-and-test-case-reductionBorrow: three-level reducerQA contract item 9
Model-based testing with a small reference model and precondition-preserving shrinkingproperty-based-testing-state-machinesBorrow: proptest-state-machine over an ordered-forest modelsame
Structure-aware fuzzing with explicit depth and allocation budgetsfuzzing-structured-inputsBorrow: arbitrary does not bound value depth; NUIF bounds depth and node count explicitlyspec/11-security.md
Snapshot testing with redactions, sorted output and a single update variablegolden-master-and-snapshot-testing, libtest-mimic-and-data-driven-fixturesBorrow: NUIF_UPDATE_EXPECT is the only regeneration switchconformance/HARNESS.md
Machine-readable validation report with severity codes, pointers and per-code policygltf-validator-and-sample-assetsBorrow as the report schema for validate, import, exportspec/12-cli-api-and-automation.md
Sample-asset corpus with per-asset metadata, tags and CI validationsameBorrow for conformance/fixturesconformance/HARNESS.md

Editor automation

PatternSourceDecisionNUIF artifact
Headless execution with a script (--background --python, hython, commandlets, -nullrhi)blender-dna-rna-and-headless, houdini-pdg-and-hda, unreal-asset-versioning-and-automationBorrow: the editor binary runs a session script without a windowapps/editor/UI-SPEC.md
Plugin API as a programmable surface, but no headless mode and read-mostly RESTfigma-plugin-and-rest-api-as-automation-surfaceRecord as the gap NUIF closes; borrow pluginData-style opaque per-entity stores as adapter evidenceadapters/README.md
Accessibility tree as the semantic query and action surface for UI testsaccesskit-semantic-ui-testing, egui-and-egui-kittest, masonry-xilem-and-linebender-test-harnessBorrow: entity identifiers are carried in the accessibility tree; tests query by role and label and dispatch actions without pointer synthesisADR 0006
Same-frame scene and accessibility outputs with virtual time and CPU rasterizationmasonry-xilem-and-linebender-test-harnessBorrowADR 0006
Pixel-based UI screenshot tests with per-OS thresholdsegui-and-egui-kittestReject as the primary editor oracle; permitted only for shell wiringapps/editor/QA.md

Ruled out

The following were examined and excluded from the architecture; the reason is recorded so the question is not reopened without new evidence.

  • A self-describing binary struct layout (Blender DNA): solves version drift for one implementation but does not preserve data it cannot re-save and does not compose with a schema-versioned interchange model.
  • Memento undo as the canonical history: does not commute, cannot be merged, and bloats logs; inverse operations are required by spec/06.
  • Integer child indices in Move and Insert as the only order representation: non-commutative under concurrency; a list identifier is required for the collaboration profile and harmless for the canonical form.
  • GPU rendering as a normative oracle: implementation-defined by the WebGPU and WGSL specifications.
  • Perceptual UI screenshot tests as the primary editor test: platform-dependent text rendering makes them a shell-wiring check only.
  • Heuristic tree matching for NUIF-native merges: unnecessary with stable identity and a source of spurious moves.
  • Whole-project regeneration as the synchronization model: contradicted by the lens and delta-lens laws that NUIF’s patch model must satisfy (lenses-foster-boomerang, bidirectional-evaluation-direct-manipulation).

Consequences for the specification

The records imply the following changes. Items 1–3 were decided by follow-up research on 2026-08-29 and are recorded as accepted RFCs; items 4–6 remain proposals.

  1. Sibling order is a canonical array without keys; Insert and Move use anchors (Start, After(id)); the collaboration profile maps anchors onto a Fugue-family list CRDT (RFC 0006).
  2. nuif-cbor-0 follows deterministic preferred serialization while preserving integer/real data-model identity; real zero is positive floating zero, text and CBOR key orders are distinct, strict decoders reject non-canonical input, text hashes through CBOR and strings remain verbatim (RFCs 0005 and 0008).
  3. Entities of unknown kind load as Unknown with typed core fields and an opaque payload; ignorant implementations preserve bytes, knowing ones may re-encode; validation severities follow the glTF pattern (RFC 0007).
  4. Every serialized record kind carries a schema version; migrations are registered pure functions; newer-than-known versions load as Unknown for entities (RFC 0007) and are diagnosed for other records.
  5. Validation, import and export reports follow one schema with stable codes, severities and pointers.
  6. Layout conformance declares tolerance tiers per case and classifies every divergence from a browser reference as schema loss, evaluator defect or implementation-defined behavior.

Open questions raised by this synthesis

Recorded in research/questions.yaml: cbor-float-zero (decided, RFC 0005), sibling-order-identifier (decided, RFC 0006), unknown-kind-preservation (decided, RFC 0007), editor-toolchain-msrv (ADR 0006), layout-assertion-vocabulary, render-tolerance-tiers.