loginowskid's picture
Sync from simready-oem-library-pm@c858e9dd
cd53438 verified
# Validation reporting β€” staging branch
## Install the Claude Code plugin
The `simready-report` plugin ships as a Claude Code marketplace under
`validation/.claude-plugin/`. From a checkout of this repo, run inside Claude Code:
```
/plugin marketplace add <path-to-repo>/validation
/plugin install simready-report@simready-playbook
```
That registers two slash commands: `/simready-report` and `/simready-package`.
You still need a Python with the SimReady runtime deps and the foundations + sdk
checkouts on disk β€” see [To run the demo as-is](#to-run-the-demo-as-is) below.
> [!IMPORTANT]
> ## Read [`PROBLEMS.md`](PROBLEMS.md) before trusting any report
>
> Reports produced by this prototype lean on a **local patch** for
> [PROBLEMS.md P1](PROBLEMS.md): without it, every Robot-Body profile
> silently drops 4 of its 5 declared features at load time, because
> the foundation `repo usd_profiles_codegen` step doesn't read the
> JSON variant definitions next to each feature's markdown. A
> "passing" report against `Robot-Body-Runnable` would only have
> checked 1 feature out of 5.
>
> The patch lives in
> `plugins/simready-report/skills/simready-report/validate.py` and is
> loud about itself β€” every run prints a `[PATCH P1]` line. With the
> patch active, `Robot-Body-Runnable` resolves to **5/5 features, 41
> requirements** instead of 1/8.
>
> The dashboard's **Caveats** panel still surfaces the gap if anyone
> runs without the patch.
>
> [`PROBLEMS.md`](PROBLEMS.md) **P1** has the full root cause, the
> patch walkthrough, and the upstream fix path. The patch is meant to
> be temporary β€” once foundations codegen is fixed, delete
> `_patch_register_json_variant_features()` and its call site.
---
> **Status: demo / review staging.** Not part of `simready-explorer` proper yet.
>
> This directory is a verbatim copy of the prototype work currently living at
> [`loginowskid/simready-playbook`](https://github.com/loginowskid/simready-playbook),
> dropped here on the `dev/dloginowski/validation-reporting` branch so the
> SimReady team can review the artifact before we refactor it into the repo's
> existing library + skills patterns.
## What this is
A Claude-Code-driven validation reporting pipeline for SimReady customer assets.
On top of the existing `omni.asset_validator` engine and SimReady profile registry,
it adds:
- **HTML dashboard** with summary cards, per-asset feature pass/fail, an
asset filter, and a "Other failed requirements" panel for issues outside the
loaded profile.
- **External-dependencies provenance report** β€” walks USD composition arcs per
asset, classifies each layer as internal/external relative to the target,
records actions taken to obtain each.
- **Foundation doc rendering** β€” renders the markdown source for every
feature/requirement code referenced by the report into HTML inside the output.
- **Auto-packaging convenience** β€” for a raw asset bundle under
`assets_to_validate/<name>/`, runs `simready ingest usd` per interface USD
before validating against the packaged tree.
- **Spec selector** β€” `--list-profiles` enumerates registered profiles so the
user can pick a SimReady profile interactively.
- **Parallel asset validation** β€” `ProcessPoolExecutor` workers, default auto.
Two slash commands ship together as a single Claude Code plugin:
- `/simready-report` β€” validate + dashboard + provenance + docs.
- `/simready-package` β€” standalone packaging (no validation).
## Layout (mirrors the source repo)
```
validation/
β”œβ”€β”€ bootstrap.ps1 # Windows convenience installer
β”œβ”€β”€ marketplace.json # Claude Code marketplace manifest
β”œβ”€β”€ plugins/simready-report/
β”‚ β”œβ”€β”€ plugin.json
β”‚ └── skills/
β”‚ β”œβ”€β”€ simready-report/ # HTML dashboard + validation
β”‚ └── simready-package/ # standalone packaging
└── playbooks/
└── foundations-deviations.md # observed gaps between specs and asset_validator
```
## Why it doesn't fit the repo's existing patterns yet
`simready-explorer` already ships `source/libraries/validate/` with a clean
public API (`validate_asset`, `validate_asset_list`, etc.) and three skills in
the `agentskills.io/specification` format (`validate-asset`, `validate-batch`,
`validate-metadata`). The work in this `validation/` directory:
- Reinvents a thinner version of `simready.validate.validate_asset_list` β€”
this is duplication that should be removed during integration.
- Uses a different skill format (Claude Code marketplace plugin) β€” should be
rewritten as `agentskills.io` skills that call into the library.
- Is a standalone-script architecture (`python validate.py …`) β€” should be
exposed via the existing `repo.bat` / library entry points.
## Proposed integration after review
1. New skill `validate-report` under
`source/libraries/validate/src/validate/skills/validate-report/` β€”
instructional doc that drives a new `simready.validate.report` module.
2. New module `source/libraries/validate/src/validate/report/` containing the
dashboard renderer, doc renderer, external-deps tracker, thumbnail mirrorer
β€” extracted from `report.py` + `external_deps.py` and adapted to consume
`AssetValidationResult` instead of the raw `omni.asset_validator` issue
stream.
3. Optional new skill `validate-package` β€” thin wrapper around
`simready ingest usd` (independent of validation).
4. Drop `bootstrap.ps1` / `marketplace.json` / Claude-Code-plugin layout β€” not
relevant here; the team uses `repo.bat` + `_build/` flow.
## To run the demo as-is
The scripts in this directory are self-contained and need a Python with the
SimReady runtime deps installed plus the foundations + sdk checkouts on disk.
Easiest path on Windows: `& bootstrap.ps1` (creates a venv at
`%LOCALAPPDATA%\simready\` and persists `SIMREADY_PYTHON` /
`SIMREADY_FOUNDATIONS_PATH` / `SIMREADY_SDK_PATH` env vars). On other systems
or custom layouts, install the deps into your Python and set those env vars
manually.
After that:
```
python plugins/simready-report/skills/simready-report/validate.py \
<path-to-asset-bundle> --profile Robot-Body-Isaac --version 1.0.0
```
Output lands at `<bundle>/.reports/<bundle-name>.<profile>/index.html`.