@Test
	public void testIsCanonical() {
		try (Transaction tx = b.startTransaction()) {
			TraceObjectValue rootVal =
				manager.createRootObject(ctx.getSchema(new SchemaName("Session")));
			root = rootVal.getChild();

			assertTrue(rootVal.isCanonical());

			TraceObjectValue primVal = root.setValue(Lifespan.ALL, "primitive", "A string");
			assertFalse(primVal.isCanonical());

			TraceObject child = manager.createObject(KeyPath.parse("child"));

			TraceObjectValue objVal = root.setValue(Lifespan.ALL, "child", child);
			assertTrue(objVal.isCanonical());

			TraceObjectValue linkVal = root.setValue(Lifespan.ALL, "link", child);
			assertFalse(linkVal.isCanonical());
		}
	}
Fails because you cannot create a second root object.
Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/target/DBTraceObjectManagerTest.java