Repository navigation
Run workspace CTest in CI; read the SOG primary asset through ArAsset - #45
Merged
Merged
Conversation
The bundle cells run OST's verification pyramid, which never reaches the repository's own CTest suites: the gaussianCore and gaussianUsd unit tests, each bundle's reader and decoder tests, the Python smoke and asset-resolver tests, and the cross-format equivalence tests that exist only in the composed root build. Those ran only in the local gate, so the Windows run of the non-ASCII path tests stayed owed. Add three `kind: workspace`, `verify: test` cells on the same digest-pinned runtimes. Each runs `ost build` on the root tree and `ost test` on it. Regenerate ost-source-ci.yml with ost 0.23.19 (regenerating from the unchanged manifest reproduces the checked-in workflow byte for byte, so the diff is only the new job). scripts/release.py skips workspace cells: they name no bundle and ship nothing; the derived release matrix is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQZ6z9zq89LhUuzXXQXUq7
GaussianSogFileFormat read its resolved path straight from the filesystem, so a SOG inside a `.usdz` (`scene.usdz[cloud/meta.json]`, `scene.usdz[cloud.sog]`) or behind a URI-serving resolver could not open. SogReader gains a primary-asset seam (SogPrimaryLoader) beside the companion seam: the loader reports the asset's size and serves its first `limit` bytes. The reader still probes the layout and refuses an oversized asset before the bulk read, and holds an injected loader to that contract. The USD-free default keeps reading the filesystem. The plugin injects LoadPrimaryThroughResolver, which reads through ArResolver::OpenAsset, for reads and routing alike. Companions of a packaged meta.json are anchored by the plugin. Ar anchors a package-relative anchor on its outer package path, so `./scales.webp` would name a file beside the `.usdz`, the same other-asset import the `./` prefix exists to prevent. The plugin joins the innermost packaged directory with the bare plane name instead. Tests: reader TestInjectedPrimaryLoader (in-memory assets under URI-like and package-relative names, the probe-then-bulk order, an oversized asset refused from its reported size, loader errors and contract breaches), and case_package_relative in the USD resolver suite (root and subdirectory meta.json, a reference, metadata-only, a missing packaged plane with an impostor beside the package, a packaged `.sog`). The resolver cases are recorded as not yet observed until the workspace CTest cells run them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQZ6z9zq89LhUuzXXQXUq7
The new workspace CTest cells failed at configure on Linux and macOS:
CMake Error in libs/gaussian-usd/CMakeLists.txt:
Target "gaussianUsd" INTERFACE_INCLUDE_DIRECTORIES property contains
path: ".../.ost-ci-home/runtimes/openstrata-cy2026-...-usd/include"
which is prefixed in the source directory.
In CI, OST_HOME is the checkout's .ost-ci-home, so the runtime's include
directory sits under the source tree, and CMake refuses to install-export a
source-prefixed path. The bundle cells never hit it because they build the
library standalone, outside the composed root.
Wrap PXR_INCLUDE_DIRS in $<BUILD_INTERFACE:...>. The installed export should
not freeze the build machine's runtime path anyway. Installed consumers get
OpenUSD's headers from the linked pxr targets and their own
find_package(pxr), as every bundle already does. A minimal project with
the same layout reproduces the error unwrapped and configures cleanly
wrapped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQZ6z9zq89LhUuzXXQXUq7
The workspace-ctest-pr-* cells passed 15 of 15 CTest suites on Windows (MSVC), macOS arm64, and Linux on b1ec3ec. That run observed: - the non-ASCII path tests (reader TestNonAsciiPath, gaussianCore_file_io, and the PLY and SPZ decoder cases) on Windows, so the row moves from "Linux only" to verified; - case_package_relative in gaussianSog_python_resolver on all three platforms, so the two package-relative rows move from "not yet observed" to verified. The roadmap item keeps one remaining step: a test resolver plugin for URI-style identifiers and resolver-served companions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQZ6z9zq89LhUuzXXQXUq7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
kind: workspace,verify: testcells:workspace-ctest-pr-windows,workspace-ctest-pr-macos-arm64andworkspace-ctest-pr-linux. They use the same digest-pinned runtimes as the bundle cells, runost buildon the composed root tree, thenost teston it.ost-source-ci.ymlis regenerated with ost 0.23.19, andscripts/release.pyskips workspace cells.PXR_INCLUDE_DIRSis now$<BUILD_INTERFACE:...>, so the installed export no longer freezes the build machine's runtime path. This also fixed the first CI run, where CMake refused to export the CI runtime path (.ost-ci-home) because it is "prefixed in the source directory"..sog/meta.json) throughArResolver::OpenAssetinstead of the filesystem, so a SOG inside a.usdzopens:scene.usdz[cloud/meta.json],scene.usdz[cloud.sog].SogPrimaryLoaderseam. It probes first, refuses an oversized asset from its reported size, then does the bulk read. The reader holds an injected loader to that contract.meta.jsonitself. Ar anchors a package-relative anchor on the outer package path, so./scales.webpwould name a file beside the.usdz. The plugin instead joins the innermost packaged directory with the plane name.Why?
This is the 🚧 asset-resolver matrix item in
docs/roadmap/current.md. Package-relative and URI-style primary identifiers failed because the primary was read from the filesystem. The CTest suites, including the Windows run of the non-ASCII path tests, ran only in the local gate.Validation
b1ec3ec: all 13 checks green. Theworkspace-ctest-pr-*cells passed 15/15 CTest suites on Windows (MSVC), macOS arm64, and Linux, includinggaussianSog_python_resolver(with the newcase_package_relative),gaussianSog_reader_unit(withTestInjectedPrimaryLoaderand the non-ASCII path tests),gaussianCore_file_io, and both equivalence tests. RESOLVER_MATRIX records these as observed (673088b).ost ci validatereports 12 cells, structure OK. Regenerating from the unchanged manifest reproduces the checked-in workflow byte for byte.scripts/release.py matrixoutput is byte-identical before and after this change,release.py guardpasses, andcheck_clang_format.py --changedis clean.Checklist
Reviewer notes
gaussianUsdexport no longer carries OpenUSD's include directory. Installed consumers get it from the linked pxr targets and their ownfind_package(pxr), which every bundle already does; the bundle cells are green with this change.🤖 Generated with Claude Code
https://claude.ai/code/session_01JQZ6z9zq89LhUuzXXQXUq7