| """ | |
| Assembly subsystem — turn DB rows into a publishable manifest. | |
| Two things live here: | |
| manifest.py build_manifest(experience) → dict — a complete, | |
| self-describing snapshot of an experience: nodes, | |
| edges, actions, rules, asset references. The | |
| publish flow stores a copy on ix_publications. | |
| packager.py package_experience — light wrapper that pairs a | |
| manifest with a deterministic content hash so the | |
| publish step can detect "nothing changed since | |
| last publish" and skip re-emitting. | |
| Nothing here writes back to ix_experiences — assembly is | |
| read-only. Status changes happen one layer up in publish/. | |
| """ | |
| from .manifest import build_manifest | |
| from .packager import PackagedExperience, package_experience | |
| __all__ = [ | |
| "build_manifest", | |
| "PackagedExperience", | |
| "package_experience", | |
| ] | |