@Test
	public void testSetValue_TruncatesOrDeletes() {
		try (Transaction tx = b.startTransaction()) {
			root = manager.createRootObject(ctx.getSchema(new SchemaName("Session"))).getChild();
			TraceObjectValue valA = root.setValue(Lifespan.ALL, "a", 1);
			TraceObjectValue valB = root.setValue(Lifespan.at(0), "b", 2);

			assertEquals(Lifespan.ALL, valA.getLifespan());
			assertEquals("a", valA.getEntryKey());
			assertEquals(1, valA.getValue());

			assertEquals(Lifespan.at(0), valB.getLifespan());
			assertEquals("b", valB.getEntryKey());
			assertEquals(2, valB.getValue());

			TraceObjectValue valA2 = root.setValue(Lifespan.span(0, 10), "a", 2);
			assertEquals(Lifespan.span(0, 10), valA2.getLifespan());

			assertEquals(Lifespan.toNow(-1), valA.getLifespan());
			assertFalse(valB.isDeleted());
			assertEquals(Lifespan.at(0), valB.getLifespan());

			TraceObjectValue valA3 = root.getValue(11, "a");
			assertNotNull(valA3);
			assertEquals(Lifespan.nowOn(11), valA3.getLifespan());
			assertEquals("a", valA3.getEntryKey());
			assertEquals(1, valA3.getValue());

			TraceObjectValue valA4 = root.setValue(Lifespan.span(5, 15), "a", 4);
			assertEquals(Lifespan.toNow(-1), valA.getLifespan());
			assertEquals(Lifespan.span(0, 4), valA2.getLifespan());
			assertEquals(Lifespan.span(5, 15), valA4.getLifespan());

			TraceObjectValue valA5 = root.getValue(16, "a");
			assertEquals(Lifespan.nowOn(16), valA5.getLifespan());

			root.setValue(Lifespan.ALL, "a", "Clobber");
			assertTrue(valA.isDeleted());
			assertTrue(valA2.isDeleted());
			assertTrue(valA3.isDeleted());
			assertTrue(valA4.isDeleted());
			assertTrue(valA5.isDeleted());
		}
	}
Fails because you cannot create a second root object.
Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/target/DBTraceObjectManagerTest.java