`iter workspace <name> <store> --root <dir>` opens a user's colocated workspace at <root>/<workspace_root>/<store path>/<name> (isolation adr-002). For a constellation member that path loses the tree around the member. The ontoref constellation keeps its spine at the parent: .ontoref/, .claude/CLAUDE.md and .coder/ (where the plans live) are in ontoref/, and code/ is a separate store the spine's .gitignore excludes. The member's tools resolve the spine relative to themselves: code/ontoref sets SPINE_DIR to `$SCRIPT_DIR/../.ontoref`.
Measured on 2026-10-13: the agent's workspace of ontoref/code opened at .iter-ws/ontoref/code/wuji. From there `../.ontoref` named .iter-ws/ontoref/code/.ontoref, which does not exist, so the wrapper had no spine; the spine's CLAUDE.md and .coder were not on the workspace's path; and the spine itself, a plain git repository, had no workspace, so any change the agent made to it would land in the owner's checkout outside accept. The plans worked around it with ONTOREF_PROJECT_ROOT.
A STORE INSIDE ANOTHER REPOSITORY OPENS INSIDE THAT REPOSITORY'S WORKSPACE. When the nearest ancestor of the store under --root is a repository, `iter workspace <name>` places the store's workspace at <the ancestor's workspace <name>>/<store path relative to the ancestor>. The ancestor must be a jj store with a workspace <name> already; otherwise iter refuses before writing anything, naming the ancestor to open first. iter knows nothing of ontoref: the rule is about nesting, and the constellation is one case of it.
THE SPINE IS A STORE TOO. A constellation's spine is colocated like any repository, and its workspace links .claude and .coder to the spine's. The member's workspace, inside it, links only the shared dirs its own store root holds; one it lacks resolves from the spine's workspace above it, and creating it would shadow that.
iter workspace refuses a member before its enclosing repository has the workspace, and opens it inside that workspace once it does
Link the spine's .coder into the flat member workspace
Rejected: Fixes the plans only: the wrapper's ../.ontoref and the spine's CLAUDE.md stay unresolved, and the spine stays outside any workspace.
A spine stand-in: links to .ontoref, .coder and .claude in the flat workspace's parent
Rejected: Resolves the paths, but a change to the spine writes the owner's checkout directly, outside accept.
Teach iter the constellation layout (spine, members, ADR-048)
Rejected: iter would depend on ontoref's vocabulary; nesting is the property that matters and holds without it.