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

Serialization versus runtime validity

A successful save, conversion, or archive build is an intermediate result. The game can receive a readable CR2W whose graph is smaller than the authored graph, whose nested values are stale, or whose external references cannot resolve.

Recognize the misleading success

SymptomLikely boundaryDecisive test
Converter exits zero but nodes are missingCR2W object-graph/topology writeSerialize the produced binary back and compare semantic node counts and edges
Graph shape matches but a path is still a template tokenNested scalar writeSearch the round trip for unexpected placeholders and compare decisive properties
Archive packs but root never startsRegistration or depot pathList/extract the archive, then inspect ArchiveXL registration logs
ArchiveXL registers everything but load crashesNative resource content or runtime lookupReduce to the earliest activation boundary; inspect scene/world/resource cardinalities
Behavior differs after reinstalling identical bytesSave-backed stateCompare a pre-install original with a completed or contaminated save

Do not diagnose from the last visible symptom alone. A journal objective that never appears can be caused by an omitted node, a stale journal path, failed registration, or a saved branch that already passed the activation node.

Compare meaning, not bytes

An intentional CR2W edit can legitimately change handle allocation, import order, or other serialization details. A useful round-trip comparison freezes the semantic contract instead:

  • root type and version;
  • graph node types and graph-local IDs;
  • input/output/cut socket names and roles;
  • every source-socket to destination-socket edge;
  • decisive nested conditions, operations, paths, names, and numeric IDs;
  • resource-reference array lengths and every referenced index;
  • world registries, NodeRefs, placements, and typed buffer rows;
  • journal paths and fileEntryIndex values;
  • absence of unrequested placeholder strings.

For a nine-node authored graph, a readable six-node round trip is a failed write. It must not be packaged merely because both files begin with a CR2W header.

Run the boundary test

  1. Save the resource in WolvenKit and close its editor tab so the binary on disk is final.
  2. Convert or serialize that binary to an isolated review directory.
  3. Compare it with the authored inventory. Start with counts, type sets, sockets, edges, and decisive values rather than a full textual diff.
  4. Reopen the binary in WolvenKit and inspect the same nodes and nested properties.
  5. Pack only after the focused comparison passes.
  6. List and extract the candidate archive to a new directory.
  7. Hash each extracted payload against the project output and record the candidate archive hash.
  8. Install that exact candidate and confirm the installed hash still matches.

If a tool cannot represent an edit, the safe result is a clear failure. Do not keep an output that silently retained a template’s smaller array or older scalar.

Narrow the fix

When the round trip is wrong:

  1. Return to the last structurally correct resource.
  2. Recreate only the first missing object or value in WolvenKit.
  3. Save and round-trip immediately.
  4. Verify all existing topology as well as the new edit.
  5. Delete the rejected candidate from install staging so it cannot be mounted accidentally.

When the round trip is correct but runtime still fails, stop editing the serializer boundary. Move to registration, references, lifecycle ordering, or save state according to the earliest observed failure.

Claims after a correction

ResultSupported label
Binary round trip and semantic checks passStructurally validated
Same shape exists in a cited vanilla resourceObserved in vanilla
Exact unchanged candidate passes the defined game routeRuntime-proven
Candidate is unplayed, reload cases are incomplete, or several variables changedExperimental for those runtime claims

A non-crashing load alone does not prove journal presentation, cleanup, reload, or replay. Promote only the cases actually exercised.

Previous: Troubleshooting. Next: Registration and depot paths.