=== gpt_full_selftest ===
Booting GPTClient …
One-off chat() sanity …
One-off reply len=2 => OK
Token param heuristic used: max_tokens
Parent session: 7edba6295650c74e82f8a4fc
Add initial session embeddings to parent …
Parent vectors now: 2
Search parent for 'alpha' …
Search hit text: alpha
Create checkpoint CP1 (manual summary) …
Checkpoint id: 64c45e8657b039d1
Create checkpoint CP2 with 1-based message id (should clamp properly) …
CP2 message_id (0-based, clamped): 2
Fork child with inherit_vectors=true, keep_last=2, label='Exploration' …
Child-inherit: 0489065578493ff290a22417
Child vectors (init): 2 => inheritedEqual=true
Child search for 'alpha' …
Child search hit: alpha
Add child-only vector …
Child vectors after add: 3 => childGainedOne=true
Initial system rows in child: 2 (no dups=true)
Child label: Exploration
Parent/child relation ok=true; children=[0489065578493ff290a22417]
Fork graph nodes: parents=1, children=2
Fork child2 with inherit_vectors=false …
Child-fresh vectors: 0 (expected 0)
RAG chat on child …
RAG retrieved=3 ; assistant appended=true
Sticky-system trim test …
Sticky-system present after trim=true
Layout embeddings …
Layout added=2; search hit=foo layout
Persist parent & child to $_SESSION …
Hydrate into a fresh GPTClient …
Hydrated vecs — parent=2, child=3
Hydrated child label: Exploration
Hydrated relations ok=true
Remove hydrated child from $_SESSION + client …
Children left under parent (after remove): [6344e2eb20c3950db5c7c49b]
Result: PASS ✅
===============================