Hi folks — I took OpenResearch for a full spin tonight (a real research campaign: a cross-tier model comparison study with ~15 nodes and real runs on a local backend) and the experiment-tree model held up beautifully. One structural gap surfaced, though, and it's the only thing that hurt.
What happened
Following the "vary config, not the command" rule, I branched a set of cross-model replications as children of the experiment node whose protocol they inherit (same 74-prompt run command, only config.json differs per branch — model + lens paths). Semantically these four nodes form a comparison grid, not variants of that one 2B experiment, so the natural home for them was a dedicated second baseline root. That's when I found:
- No re-parent.
orx exp has status/run/cancel/wait/wake/desc; the dashboard protocol-2 API has no PATCH on parentExperimentId (/api/experiments/:id → route not found), and the dashboard has no affordance for it either. The only path was to recreate the four nodes under a new --baseline root and re-run all four experiments so they'd carry honest run records. That was cheap for us (~20–40s per readout run), but for anything with multi-hour runs this workaround is prohibitive — the run history is stranded on the old nodes.
- No delete/archive. The replaced nodes can't be removed: no CLI command, no API route, no dashboard action. They now linger under the old parent as tombstones with a "migrated, see family-grid subtree" note in their description. The tree view will show them forever.
Concrete asks
orx exp move <expId> --parent <newParentId> # or --baseline to make it a new root
orx exp delete <expId> # refuse while runs exist, --force to override; flag for branch handling
orx exp archive <expId> # softer alternative: hide from default tree view, keep runs/evidence
Notes on semantics that might make this easy:
move only touches tree linkage in the store — git branches can stay exactly where they are. Branch parentage already diverges from node parentage the moment you create a child, so there's no git-side consistency to maintain.
archive alone would solve 80% of the tombstone problem for us.
Why it matters
Research is a DAG (question lineage × comparison grids), and the tree + multiple-baselines design is a good projection of it. But trees grow organically: nodes end up under the wrong root, or a restructuring reveals that a subtree is really its own family. Light pruning is what keeps a long-lived project legible in the dashboard six months in. Right now the model is append-only in practice.
Happy to test any of this on our (now two-rooted, slightly haunted) project tree 🙂
Hi folks — I took OpenResearch for a full spin tonight (a real research campaign: a cross-tier model comparison study with ~15 nodes and real runs on a local backend) and the experiment-tree model held up beautifully. One structural gap surfaced, though, and it's the only thing that hurt.
What happened
Following the "vary config, not the command" rule, I branched a set of cross-model replications as children of the experiment node whose protocol they inherit (same 74-prompt run command, only
config.jsondiffers per branch — model + lens paths). Semantically these four nodes form a comparison grid, not variants of that one 2B experiment, so the natural home for them was a dedicated second baseline root. That's when I found:orx exphas status/run/cancel/wait/wake/desc; the dashboard protocol-2 API has no PATCH onparentExperimentId(/api/experiments/:id→ route not found), and the dashboard has no affordance for it either. The only path was to recreate the four nodes under a new--baselineroot and re-run all four experiments so they'd carry honest run records. That was cheap for us (~20–40s per readout run), but for anything with multi-hour runs this workaround is prohibitive — the run history is stranded on the old nodes.Concrete asks
Notes on semantics that might make this easy:
moveonly touches tree linkage in the store — git branches can stay exactly where they are. Branch parentage already diverges from node parentage the moment you create a child, so there's no git-side consistency to maintain.archivealone would solve 80% of the tombstone problem for us.Why it matters
Research is a DAG (question lineage × comparison grids), and the tree + multiple-baselines design is a good projection of it. But trees grow organically: nodes end up under the wrong root, or a restructuring reveals that a subtree is really its own family. Light pruning is what keeps a long-lived project legible in the dashboard six months in. Right now the model is append-only in practice.
Happy to test any of this on our (now two-rooted, slightly haunted) project tree 🙂