---
name: explicit-identity
description: Explicit Identity Across Boundaries
user-invocable: false
---
# Explicit Identity Across Boundaries
Never rely on "latest" or "current" when crossing process or async boundaries.
## Pattern
Pass explicit identifiers through the entire pipeline. "Most recent" is a race condition.
## DO
- Pass `--session-id $ID` when spawning processes
- Store IDs in state files for later correlation
- Use full UUIDs, not partial matches
- Keep different ID types separate (don't collapse concepts)
## DON'T
- Query for "most recent session" at execution time
- Assume the current context will still be current after await/spawn
- Collapse different ID types:
- `session_id` = Claude Code session (human-facing)
- `root_span_id` = Braintrust trace (query key)
- `turn_span_id` = Braintrust turn within session
## Example
```typescript
// BAD: race condition at session boundaries
spawn('analyzer', ['--learn']) // defaults to "most recent"
// GOOD: explicit identity
spawn('analyzer', ['--learn', '--session-id', input.session_id])
```
## Source Sessions
- 1c21e6c8: Defined session_id vs root_span_id distinction
- 6a9f2d7a: Fixed wrong-session attribution via explicit passing
- a541f08a: Confirmed pattern prevents race at session boundaries