Skip to content

Cover the custom-resolver rows of the SOG resolver matrix with a gstest: URI resolver - #46

Merged
piggy-penguin merged 3 commits into
mainfrom
claude/zen-lovelace-bbimv7
Nov 3, 2026
Merged

piggy-penguin merged 3 commits into
mainfrom
claude/zen-lovelace-bbimv7

Conversation

@piggy-penguin

Copy link
Copy Markdown
Member

Summary

  • Adds a test-only gstest: URI resolver plugin (plugins/gaussian-sog/tests/uri_resolver/GsTestUriResolver.cpp). CTest builds it into its own build directory next to a generated plugInfo.json and registers it through PXR_PLUGINPATH_NAME for one new suite only. It is never installed or packaged.
  • The resolver maps gstest:<path> onto a store directory. It serves every asset as a stream only (GetBuffer() returns null) and logs each OpenAsset/GetBuffer call.
  • Adds a new suite, gaussianSog_python_uri_resolver (test_gaussian_sog_uri_resolver.py), which checks:
    • opening a meta.json and a .sog by URI, directly, by reference from a filesystem layer, and metadata-only;
    • every companion is resolved and served by the URI resolver and read through ArAsset::Read();
    • a plane missing from the store gives GSSOG-E008, even when valid planes with the same name exist elsewhere;
    • a filesystem meta.json never reaches the URI resolver.
  • Docs: the three ⬜ rows of RESOLVER_MATRIX.md become ✅, plus two new rows. Also updates current.md, BUILDING.md (16 suites) and CHANGELOG.md.

Why?

docs/roadmap/current.md lists the remaining work on the resolver test matrix: "a test resolver plugin for URI-style identifiers and resolver-served companions". Three rows were covered only by the injected-loader seams, never by a real resolver plugin: a URI-style primary identifier, companions served by a custom ArResolver, and a stream without GetBuffer().

Validation

  • Local run on Linux: the composed root tree built against the usd-core 26.8 wheel's libusd_ms and the OpenUSD v26.08 headers. All five gaussianSog_* CTest suites pass. (gaussianUsd_tests does not link in that setup because the wheel expects libpython to be loaded already. That is a local artifact, unrelated to this change.)
  • Mutation checks:
    • removing the ArAsset::Read() fallback for companions fails only the new suite;
    • reading the primary asset from the filesystem fails both resolver suites.
  • python scripts/check_clang_format.py is clean.
  • Hosted: the workspace-ctest-pr-* cells in this PR are the Windows/macOS/Linux check.

Checklist

  • I linked related context or explained why there is no issue.
  • I ran the relevant tests and checks, or described what remains.
  • I updated documentation or tests when behavior changed.
  • I did not add private or unlicensed assets.

Reviewer notes

No plugin code changes. Only tests, a test-only plugin, and docs. Windows (MSVC, DLL in a multi-config output dir) has not been built locally, so that first build happens in the hosted cell.


Generated by Claude Code

The resolver matrix still had three rows only the injected-loader seams
covered: a URI-style primary identifier, companions served by a custom
ArResolver, and an asset that serves a stream without GetBuffer(). No
real resolver plugin ever exercised them.

Add a test-only URI resolver for the `gstest:` scheme. CTest builds it
into its own build directory beside a generated plugInfo.json and
registers it through PXR_PLUGINPATH_NAME for one new suite,
gaussianSog_python_uri_resolver; it is never installed or packaged. It
maps `gstest:<path>` onto a store directory, serves every asset as a
stream only, and logs each OpenAsset and GetBuffer call so the suite can
assert what the plugin asked for.

The suite opens an unbundled meta.json and a bundled .sog by URI,
directly, by reference from a filesystem layer, and metadata-only; checks
that every companion was resolved and served under the URI's directory
and decoded through ArAsset::Read() after GetBuffer() returned null; that
a plane missing from the store is GSSOG-E008 even with valid same-named
planes elsewhere in the store and in the current directory; and that a
filesystem meta.json never reaches the URI resolver.

Run locally on Linux against the usd-core 26.8 wheel, all five
gaussian-sog suites pass. Two mutations confirm the new suite bites where
the default-resolver suite does not: dropping the ArAsset::Read() fallback
for companions fails only the new suite, and reading the primary asset
from the filesystem fails both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQZ6z8Eiz2bDo8bofd5xCV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQZ6z8Eiz2bDo8bofd5xCV
gaussianSog_python_uri_resolver passed in all three workspace-ctest-pr-*
cells (Windows MSVC, macOS arm64, Linux; 16 of 16 suites each), so the
resolver-matrix item is done apart from the Windows-only separator row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQZ6z8Eiz2bDo8bofd5xCV
@piggy-penguin
piggy-penguin marked this pull request as ready for review November 3, 2026 09:06
@piggy-penguin
piggy-penguin merged commit 8622fdf into main Nov 3, 2026
13 checks passed
@snkmcb
snkmcb deleted the claude/zen-lovelace-bbimv7 branch November 3, 2026 09:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants