Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 73 additions & 27 deletions .github/workflows/ost-source-ci.yml

Large diffs are not rendered by default.

19 changes: 13 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# usd-http-resolver
# OpenUSD Http Resolver

[![CI](https://github.com/animu-sphere/usd-http-resolver/actions/workflows/core-ci.yml/badge.svg)](https://github.com/animu-sphere/usd-http-resolver/actions/workflows/core-ci.yml)
[![License](https://img.shields.io/github/license/animu-sphere/usd-http-resolver)](LICENSE)
[![OpenUSD](https://img.shields.io/badge/OpenUSD-26.08-4C78A8)](docs/compatibility/OPENUSD.md)

An OpenUSD asset resolver for `http://` and `https://`, and the I/O substrate
beneath it.
Expand Down Expand Up @@ -29,12 +33,14 @@ index, and the chunks actually in view — not 10 GB.

## Status

**`v0.4.0` is released: a `UsdStage` opens over HTTP, a clustered read of a
**`v0.5.0` is released: a `UsdStage` opens over HTTP, a clustered read of a
remote asset costs three requests where it cost eighteen, and a process that
starts cold pays nothing for a window an earlier one fetched. The read contract,
the local backend, the shared boundary suite, the hostile-server corpus, the
HTTP backend, the `ArResolver` bundle, the block cache, identity exposure, and
the on-disk cache tier are in the tree and passing.**
the on-disk cache tier are in the tree and passing. The aggregate resolver
product's installed-artifact probe opens a remote root layer and its relative
child, and requires a successful byte-range request.**

That ordering is the point. `v0.1.0` shipped a local file reader, which is not
interesting; what was interesting is that it arrived with the harness that makes
Expand Down Expand Up @@ -130,9 +136,10 @@ the per-format compatibility matrix, are in §4 of

## First consumer

`usd-pointcloud-plugins` reads COPC over this resolver in `v0.5.0` — with no
HTTP code of its own, no build dependency, and no change to its COPC reader. If
it needs one, the abstraction leaked and the fix belongs here.
`usd-pointcloud-plugins` is the first planned consumer integration in
`v0.6.0`. It should read COPC over this resolver with no HTTP code of its own,
no build dependency, and no change to its COPC reader. If it needs one, the
abstraction leaked and the fix belongs here.

## Building

Expand Down
8 changes: 4 additions & 4 deletions docs/architecture/WORKSPACE.md
Original file line number Diff line number Diff line change
Expand Up @@ -357,14 +357,14 @@ member descriptor exists.
11. A directory is created when its first tested capability exists.
12. A release that changes I/O behavior records a metrics baseline.

## Composed-runtime packaging (OST v0.22.8 dogfood)
## Composed-runtime packaging (OST v0.22.10)

The aggregate membership is explicitly pinned by `workspace.release_members` in
`openstrata.toml`. Component-owned acceptance probes are installed under
`share/usd-http-resolver/probes` through file-specific `workspace.install_data` mappings.
They exercise the packaged payload and are not runtime dependencies. Probe output
is caller-owned evidence and must not modify the immutable composed prefix.

Package producers need the aggregate payload projection correction found during
OST v0.22.8 dogfooding; stock ost 0.22.7 products advertise install sources absent
from their archive inventory. CI source builds remain pinned to released 0.22.7.
Package producers need the aggregate payload projection correction first found
during OST v0.22.8 dogfooding. Current source builds are pinned to released
OST v0.22.10.
2 changes: 1 addition & 1 deletion docs/compatibility/OPENUSD.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ runtime:
| --- | --- |
| Target OpenUSD version | 26.08 |
| Accepted range | `>=26.08,<27.0` |
| OpenStrata CLI | 0.22.7 |
| OpenStrata CLI | 0.22.10 |
| OpenStrata platform / profile | `cy2026` / `usd` |
| C++ standard | C++17 |
| CMake | 3.23 or newer |
Expand Down
13 changes: 7 additions & 6 deletions docs/guides/BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ This repository is an OpenStrata project. It builds either through `ost`, which
resolves and composes a certified OpenUSD runtime, or through plain CMake — and,
for everything under `libs/`, with no OpenUSD at all.

Status: `libs/usd-asset-io`, `libs/usd-asset-local`, and the shared boundary
suite in `tests/` build and test today. No bundle exists yet, so the `ost
plugin` steps below are the workflow the first bundle lands into rather than
something you can run.
Status: `libs/usd-asset-io`, `libs/usd-asset-local`, the shared boundary suite
in `tests/`, and the `plugins/http-resolver` bundle build and test today. The
v0.5.0 aggregate product and its packaged probe are covered by the release
workflow; the `ost plugin` commands below cover bundle and workspace
verification.

## Requirements

| Tool | Version |
| --- | --- |
| `ost` | 0.22.7 or newer |
| `ost` | 0.22.10 or newer |
| CMake | 3.23 or newer |
| Ninja | any recent |
| A C++17 compiler | MSVC 143, Clang, or GCC |
Expand All @@ -29,7 +30,7 @@ ost doctor
ost library build libs/usd-asset-io # one descriptor-owned library
ost library test libs/usd-asset-io

ost plugin build http-resolver # once the bundle exists
ost plugin build http-resolver
ost plugin test http-resolver
ost plugin test --workspace --up-to 4
```
Expand Down
2 changes: 1 addition & 1 deletion docs/roadmap/implementation-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ therefore ship unexercised.
| Component-owned acceptance probe, installed with the product | Done — `share/usd-http-resolver/probes/packaged_probe.py`, mapped in as product data so acceptance runs from the artifact |
| Probe proves registration *and* transport, not just loading | Done — a remote root layer, a relative child layer followed to a second remote layer, and a byte-range request that must succeed |
| No producer build directory on any path the probe uses | Done — that separation is the reason the probe exists rather than reusing `httpResolver_stage` |
| OpenStrata 0.22.8 release pins, generated CI refreshed | Done — canonical OpenUSD 26.08 pins regenerated on the v0.22.8 line |
| OpenStrata 0.22.10 release pin, generated CI refreshed | Done — current CI and canonical OpenUSD 26.08 pins use the v0.22.10 line |
| Reproducibility: two identical package operations, same SHA-256 inventory | Done — a release gate, walked; platform digests live in the generated release evidence rather than in the source record |
| Behavior unchanged from `v0.4.0` | Asserted — transport, validator, cache, diagnostics, and configuration contracts all carried forward; the I/O baseline is `v0.4.0`'s, because the reader and cache algorithms did not move |
| OpenStrata formation composition | Deferred to `v0.7.0` — a product exists; a formation pinning this resolver and a consumer bundle by digest against one certified runtime does not |
Expand Down
8 changes: 5 additions & 3 deletions libs/usd-asset-cache/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,10 @@ nothing.

- `v0.4.0`: persistence, admitted per asset by validator strength, and the
identity exposure that goes with it (CACHE.md §8).
- `v0.5.0`: the first measurement over real distance. The block size chosen
- `v0.5.0`: the packaged resolver product and artifact-owned acceptance probe;
the cache algorithms and their defaults do not change.
- `v0.6.0`: the first measurement over real distance. The block size chosen
here is chosen on request counts under a stated premise about round-trip cost
that loopback cannot price; `v0.5.0` is where the premise gets tested.
- `v0.6.0`: cache configuration through `ArResolverContext`, so that two stages
that loopback cannot price; this is where the premise gets tested.
- `v0.7.0`: cache configuration through `ArResolverContext`, so that two stages
in one process can have two policies.
12 changes: 10 additions & 2 deletions openstrata.ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ schema: 1
bootstrap:
ost:
# Canonical OpenUSD 26.08 SDK leaves, produced with ost 0.22.3.
# ost 0.22.8 consumes their current manifest and supports locked composition.
# ost 0.22.10 consumes their current manifest and supports locked composition.
# Windows/Linux use gl; macOS arm64 uses metal. Archive and OCI identities
# are separate pins. This replaces the retired pre-canonical artifacts and
# the 0.21.0 schema-compatibility workaround (historical OST report 03).
version: "0.22.8"
version: "0.22.10"
repository: animu-sphere/open-strata

runners:
Expand Down Expand Up @@ -148,6 +148,8 @@ cells:
expected_oci_digest: sha256:8d2d599489ee623044f4360ad3a2b979e2966e6ad2f949e5aa9083570e59cc4f
platform: cy2026
profile: usd
require_openusd: cy2026/linux/x86_64/gl
require_openusd_version: "26.08"
host_python: "3.13"
host_packages:
apt: [libx11-dev, libxt-dev, libxext-dev, libgl1-mesa-dev, libcurl4-openssl-dev]
Expand All @@ -163,6 +165,8 @@ cells:
expected_oci_digest: sha256:8486d94286b60cc20b53c926757f1802442569f9d9a7eecdadf2c9895b2efeb6
platform: cy2026
profile: usd
require_openusd: cy2026/macos/arm64/metal
require_openusd_version: "26.08"
host_python: "3.13"
verify: test

Expand Down Expand Up @@ -201,6 +205,8 @@ cells:
bundle: plugins/http-resolver
platform: cy2026
profile: usd
require_openusd: cy2026/linux/x86_64/gl
require_openusd_version: "26.08"
host_packages:
apt: [libx11-dev, libxt-dev, libxext-dev, libgl1-mesa-dev, libcurl4-openssl-dev]
up_to: 1
Expand All @@ -215,4 +221,6 @@ cells:
bundle: plugins/http-resolver
platform: cy2026
profile: usd
require_openusd: cy2026/macos/arm64/metal
require_openusd_version: "26.08"
up_to: 1
2 changes: 1 addition & 1 deletion tests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Nothing in it chooses a default from wall clock. Loopback has no round-trip time
worth the name, and the whole argument for merging small reads is about a
round-trip time this harness cannot produce; the defaults come from the request
counts and the byte counts, under a premise about round-trip cost that the
record states outright and `v0.5.0` is where it gets tested.
record states outright and `v0.6.0` is where it gets tested.

## The baseline

Expand Down
Loading