Projects
25 projectsThings I've built or experimented with: what I tried, what I found, what surprised me.
A delegated distribution-centre build passed every check derived from its brief. Its only automated rejection came from a delivery policy the brief never stated, and separate review found a route indicator in the wrong state between two timed events. A smaller dairy build shows the plain case: broken bindings and a local repair.
A JPEG label passed its pattern check because the comparison measured quadrant interiors and excluded the boundaries. The pass was correct, but a summary that dropped the word “interior” was not. A later detailed-brief study found wrong source pixels despite passing geometry and motion checks.
A connection check caught deliberately broken motion, while three supplied mechanisms passed its samples. Two sampling schedules each missed a defect the other caught, so the report names its sample times. A valid speed change also exposed an extra requirement in the evaluator.
A low-friction block slid 664 mm, far past a 10 mm comparison, and the delivery was still correct because the brief asked for that variant. Under the original stay-put contract, the same kind of measurement was a rejection. The harness worker first ties the result to the scene; then the brief decides what it means.
A press-shop arm changed length during its animation, making me question which production choices I was accepting. I built a harness that checks a saved delivery against its intended use and keeps failed measurements, missing evidence and pending decisions separate.
Astra built an animated crank-slider from one brief, then found the rod leaving its pin by about 70 mm between saved frames because exported angles wrapped near 180 degrees. Our planned review sampled only authored frames and would have missed it. Here is the recorded task, the fix and what I would change in the review.
My checker's dependency reader missed a texture path authored on a shader and falsely accepted three cases. That failure is why I want a missing-file control beside the correct bundle and a wrong binding, and why I treat binding, file presence, decoding and appearance as separate checks.
Changing only the USD clock rate passed a contract that checked time codes. A timing pack that checks duration and positions in elapsed seconds rejects that change and accepts a correctly rescaled animation. What happens between samples still needs its own check.
Two ramp scenes pass the selected NVIDIA USD physics-configuration rules, but only one keeps its block within a 10 mm limit. A press-cell demo passed 24 general rules while its PhysX run missed a 10 mm tracking requirement. The walkthrough shows the inputs, traces, solver sensitivity and the friction that stayed assumed.
Four controlled cases expose an incompatible pallet-move request and a checker that never tested the destination. A feasible layout can pass while leaving the original request unresolved; the code and saved scenes are available to reproduce.
SurrogateLab is the executable workbench behind the SurrogateGate decision framework. It compares classical reduced models, neural methods and PhysicsNeMo implementations across contrasting 2D and 3D problems. Part 2 of a five-part series.
FNO led three 2D tests; POD-NN led two and shared one top score. The useful result was what projection error, regression capacity and data support changed in the next experiment. Part 3 of a five-part series.
A 16-case test made POD+GP look better than a PhysicsNeMo FNO. A common 200-case test put POD-NN first and left FNO and GP 0.03 points apart. The evaluation design changed the conclusion. Part 4 of a five-part series.
A 2D room surrogate answers repeated field queries quickly, but the whole-field winner is not the winner on every comfort quantity. This is the gap between a fast model and a decision-ready building loop. Part 5 of a five-part series.
Anchor stopped my agent from skipping declared steps. Ratchet came from the next question: after an interrupted or overlapping run, could I prove what happened and restart without making it worse?
A technical look at the small execution runtime I built for overlapping and interrupted agent workflows: ownership, effect recovery, verified completion and the limits of a local alpha.
A Gaussian splat can reproduce a place convincingly while knowing almost nothing about its identity, scale or behavior. This article separates reconstruction, visual readiness, operational readiness and simulation readiness—and defines the boundary SplatStage is designed to cross.
The editor showed a cleaned scene while the exporter still read the original checkpoint. SplatStage makes the selected edit version the export input and checks it again through OpenUSD readback. The build choices behind that handoff.
One Garden scene made the promises and gaps in SplatStage measurable: 2.07 million Gaussians removed, an edited OpenUSD particle field, three composed assets, a dependency-complete stage—and no measured scale, colliders or external runtime proof.
A finished reconstruction can still be hard to diagnose. ReconStudio keeps camera-solve evidence, run settings and exported artifacts in one job record, so a user can inspect what happened before trusting the result. Part 2 of a three-part series.
I built ReconStudio, then used 24 job records across six scenes to test its evidence. Metric bugs, repeated runs and paired-frame comparisons changed what I could claim about training, capture and GPU capacity. Part 3 of a three-part series.
A repeatable agent workflow kept skipping different steps on different runs. The fix wasn't a stronger prompt; it was moving the plan into a DAG and letting deterministic code control sequence and verification.
A month ago I drew a five-stage loop for a robot training center and admitted most of it was an educated guess I hadn't tested. So I built the loop as a real, orchestrated pipeline on one GPU and carried two tasks around it — a pole that balances by trial and error, and a Franka arm that learns to stack cubes by copying demonstrations. This is the environment, the stack, the architecture, and what actually ran. Part 1 of two.
Running the training loop for real surfaced one concept the diagram doesn't capture: the same five stages take two different shapes depending on how the robot learns — by trial and error (reinforcement learning) or by copying demonstrations (imitation). This part is the mechanism behind that fork, grounded in the two tasks I ran, plus the open questions the build left unproven. Part 2 of two.
Rendering a USD scene in the browser worked. Keeping edits and rendered state together was harder: separate stages forced reloads and left some session changes invisible to inspection. What I would check before choosing the same architecture.