goosedump 0.6.2

Coding agent context data browser
# Data-driven goosedump cases. One case per line, fields joined by " | ".
#
#   name=  test label
#   args=  goosedump arguments (quote a token to keep embedded spaces)
#   cwd    run in the fixture root (needed for crush config discovery)
#   status exit code: 0 (default), !0 (any failure), or an exact integer
#   out=   substring that must appear in stdout (repeatable)
#   out!=  substring that must not appear in stdout (repeatable)
#
# The fixture tree (tests/data.rs) stages one store per provider, so every
# case shares the same data. Blank lines and lines starting with # are ignored.

# opencode
name=opencode: list contexts | args=list opencode:* | out=opencode:sesh-alpha | out=opencode:sesh-bravo
name=opencode: display messages | args=show opencode:sesh-alpha | out="entryId": "entry-alpha" | out="role": "user" | out=STARTREK-DISCO | out="entryId": "entry-bravo" | out="kind": "assistant"
name=opencode: IR assistant parts | args=show opencode:sesh-alpha | out="thinking" | out=need to read a file | out="text" | out=found STARTREK-DISCO in source | out="toolCalls" | out="name": "read" | out="filePath": "src/main.rs"
name=opencode: grep literal match | args=grep opencode:sesh-alpha STARTREK-DISCO | out=STARTREK-DISCO
name=opencode: grep glob match | args=grep opencode:sesh-alpha START*DISCO | out=STARTREK-DISCO
name=opencode: grep no match | args=grep opencode:sesh-alpha NONEXISTENT-ZZ | out="hits": []
name=opencode: ranked search | args=search opencode:sesh-alpha STARTREK-DISCO | out="score" | out="entryId" | out="totalPages" | out="total" | out=STARTREK-DISCO
name=opencode: ID filter | args=show opencode:sesh-alpha --ids entry-alpha | out="entryId": "entry-alpha"
name=opencode: ID filter excludes other | args=show opencode:sesh-alpha --ids entry-alpha | out!=entry-bravo
name=opencode: lineage scope | args=show opencode:sesh-alpha --scope lineage | out="entryId": "entry-alpha" | out="entryId": "entry-bravo"

# crush
name=crush: list contexts | cwd=yes | args=list crush:* | out=crush:sesh-crush
name=crush: display messages | cwd=yes | args=show crush:sesh-crush | out="entryId": "crush-0" | out=ZULU-NOVEMBER | out="entryId": "crush-1" | out=code pattern
name=crush: IR tool result | cwd=yes | args=show crush:sesh-crush | out="toolCalls" | out="name": "grep" | out="filePath": "lib.rs" | out="entryId": "crush-1-tr0" | out="toolName": "grep" | out=lib.rs:9: ZULU-NOVEMBER

# pi
name=pi: list contexts | args=list pi:* | out=pi:sesh-pi
name=pi: display messages | args=show pi:sesh-pi | out="entryId": "pi-entry-1" | out=TRIPLA-ESPRESSO | out="entryId": "pi-entry-2" | out="entryId": "pi-entry-3" | out="kind": "bash" | out=grep TRIPLA src/*.rs
name=pi: filtered grep no match | args=grep pi:sesh-pi found --ids pi-entry-1 | out="hits": []
name=pi: unfiltered grep match | args=grep pi:sesh-pi found | out=found TRIPLA-ESPRESSO in file
name=pi: ranked search | args=search pi:sesh-pi TRIPLA-ESPRESSO | out="score" | out="entryId" | out=TRIPLA-ESPRESSO
name=pi: compact compaction context | args=compact pi:sesh-pi | out="goals" | out=find TRIPLA-ESPRESSO (#pi-entry-1) | out=[user] | out=[assistant] | out=* bash  | out=$ grep TRIPLA src/*.rs
name=pi: compact from entry | args=compact pi:sesh-pi --from pi-entry-2 | out="goals" | out=Ongoing development work | out=[assistant]
name=pi: compact from excludes earlier entry | args=compact pi:sesh-pi --from pi-entry-2 | out!=find TRIPLA-ESPRESSO
name=pi: compact until excludes later entry | args=compact pi:sesh-pi --from pi-entry-2 --until pi-entry-3 | out!=Recent check passed
name=pi: compact invalid range | args=compact pi:sesh-pi --from pi-entry-4 --until pi-entry-2 | status=!0
name=pi: compact from with ids | args=compact pi:sesh-pi --from pi-entry-2 --ids pi-entry-2 | status=!0
name=pi: compact filters todo noise | args=compact pi:sesh-pi | out!=Created #99
name=pi: compact filters todo tool call | args=compact pi:sesh-pi | out!=* todo
name=pi: compact skips resolved failure | args=compact pi:sesh-pi | out="outstanding": []
name=pi: compact merges prior durable section | args=compact pi:sesh-pi-merge | out=Always run clippy (#prior-pref)
name=pi: compact skips prior transcript | args=compact pi:sesh-pi-merge | out!=old transcript line
name=pi: compact filters hashline noise | args=compact pi:sesh-pi | out!=1:928|//
name=pi: compact filters file-list noise | args=compact pi:sesh-pi | out!=.git/
name=pi: compact keeps brief opening and recent tail | args=compact pi:sesh-pi-long | out=OPENING-ASSISTANT-MARKER | out=earlier lines omitted | out=TAIL-RECENT-MARKER

# codex
name=codex: list contexts | args=list codex:* | out=codex:019eb466-8e72-7dd0-8a10-9c8963f7d86c
name=codex: display messages | args=show codex:019eb466-8e72-7dd0-8a10-9c8963f7d86c | out="entryId": "codex-user-1" | out=DEADBEEF | out="entryId": "codex-assistant-1" | out="entryId": "call-codex-grep" | out="path": "src/main.rs" | out="entryId": "codex-reasoning-1" | out=consider DEADBEEF search plan | out="entryId": "call-codex-custom" | out="query": "DEADBEEF custom" | out="entryId": "call-codex-shell" | out="command": "grep DEADBEEF src/main.rs" | out="entryId": "call-codex-grep-output"
name=codex: grep match | args=grep codex:019eb466-8e72-7dd0-8a10-9c8963f7d86c DEADBEEF | out=DEADBEEF
name=codex: grep command match | args=grep codex:019eb466-8e72-7dd0-8a10-9c8963f7d86c "grep DEADBEEF src/main.rs" | out=grep DEADBEEF src/main.rs

# goose
name=goose: list contexts | args=list goose:* | out=goose:sesh-goose
name=goose: display messages | args=show goose:sesh-goose | out="entryId": "goose-1" | out=YANKEE-ECHO | out="entryId": "goose-2" | out=let me search | out="entryId": "goose-3" | out="pattern": "YANKEE" | out="entryId": "goose-4" | out="toolName": "grep"
name=goose: IR assistant and tool result | args=show goose:sesh-goose | out="thinking" | out=searching for YANKEE-ECHO | out="toolCalls" | out="pattern": "YANKEE" | out="entryId": "goose-4"
name=goose: grep match | args=grep goose:sesh-goose YANKEE-ECHO | out=YANKEE-ECHO
name=goose: lineage scope | args=show goose:sesh-goose --scope lineage | out="entryId": "goose-1" | out="entryId": "goose-4"

# claude
name=claude: list contexts | args=list claude:* | out=claude:sesh-claude
name=claude: display messages | args=show claude:sesh-claude | out="entryId": "claude-user-1" | out=SLOP-STARS | out="entryId": "claude-asst-1" | out="entryId": "claude-tool-1" | out="toolName": "Bash" | out=src/main.rs:7: SLOP-STARS
name=claude: IR assistant parts | args=show claude:sesh-claude | out="thinking" | out=looking for SLOP-STARS | out="text" | out=I found SLOP-STARS in source | out="toolCalls" | out="command": "grep SLOP src/*.rs"
name=claude: tool result error marker | args=show claude:sesh-claude | out="entryId": "claude-tool-2" | out="toolName": "Read" | out="isError": true | out=file not found
name=claude: grep literal match | args=grep claude:sesh-claude SLOP-STARS | out=SLOP-STARS
name=claude: grep glob match | args=grep claude:sesh-claude SLOP*STARS | out=SLOP-STARS
name=claude: ranked search | args=search claude:sesh-claude SLOP-STARS | out="score" | out="entryId" | out=SLOP-STARS
name=claude: prefix id resolution | args=show claude:sesh-cl | out="entryId": "claude-user-1"
name=claude: lineage scope | args=show claude:sesh-claude --scope lineage | out="entryId": "claude-user-1" | out="entryId": "claude-tool-2"

# gemini
name=gemini: list contexts | args=list gemini:* | out=gemini:session-gemini-1
name=gemini: display messages | args=show gemini:session-gemini-1 | out="entryId": "gem-user-1" | out=find SLOP-STARS | out="entryId": "gem-asst-1" | out="entryId": "gem-asst-1-tool-0" | out="toolName": "grep_search" | out=src/main.rs:7: SLOP-STARS
name=gemini: IR assistant parts | args=show gemini:session-gemini-1 | out="thinking" | out=looking for SLOP-STARS | out="text" | out=I found SLOP-STARS in source | out="toolCalls" | out="pattern": "SLOP"
name=gemini: tool result error marker | args=show gemini:session-gemini-1 | out="entryId": "gem-asst-1-tool-1" | out="toolName": "read_file" | out="isError": true | out=file not found
name=gemini: grep glob match | args=grep gemini:session-gemini-1 SLOP*STARS | out=SLOP-STARS
name=gemini: ranked search | args=search gemini:session-gemini-1 SLOP-STARS | out="score" | out="entryId" | out=SLOP-STARS
name=gemini: prefix id resolution | args=show gemini:session-gem | out="entryId": "gem-user-1"

# list aggregation and globbing
name=list: aggregates all providers with tags | args=list | out=opencode:sesh-alpha | out=goose:sesh-goose | out=pi:sesh-pi
name=list: glob scopes to one provider | args=list goose:* | out=goose:sesh-goose
name=list: glob excludes other providers | args=list goose:* | out!=opencode:sesh-alpha
name=list: glob matches id suffix across providers | args=list *sesh-alpha | out=opencode:sesh-alpha
name=list: bare token searched anywhere in tag | args=list goose | out=goose:sesh-goose
name=list: id fragment matched without provider | args=list sesh-cl | out=claude:sesh-claude

# cli errors
name=cli: unknown provider | args=show bogus:abc | status=!0
name=cli: target without provider | args=show sesh-alpha | status=!0
name=cli: no arguments | args= | status=2 | out=Usage: goosedump <command> [<args>]
name=cli: grep without context-id | args=grep opencode:foo | status=!0
name=cli: missing subcommand | args=opencode sesh-alpha | status=!0
name=cli: --page with grep | args=grep opencode:sesh-alpha STARTREK --page 1 | status=!0
name=cli: invalid --scope | args=show opencode:sesh-alpha --scope bogus | status=!0
name=cli: --page zero | args=search opencode:sesh-alpha STARTREK --page 0 | status=!0
name=cli: invalid output-format | args=show claude:sesh-claude --output-format bogus | status=2

# --output-format re-renders into a provider's native shape
name=convert: claude to pi | args=show claude:sesh-claude --output-format pi | out="type":"session" | out="type":"toolCall" | out="role":"toolResult" | out="toolName":"Bash" | out=SLOP-STARS
name=convert: claude to codex | args=show claude:sesh-claude --output-format codex | out="type":"session_meta" | out="type":"function_call" | out="call_id":"toolu_grep" | out="type":"function_call_output" | out=SLOP-STARS
name=convert: claude to goose | args=show claude:sesh-claude --output-format goose | out="content_json" | out="toolRequest" | out="id": "toolu_grep" | out="toolResponse" | out=SLOP-STARS
name=convert: claude to crush | args=show claude:sesh-claude --output-format crush | out="parts" | out="type": "tool_use" | out="type": "tool_result" | out=SLOP-STARS
name=convert: claude to opencode | args=show claude:sesh-claude --output-format opencode | out="parts" | out="type": "tool" | out="type": "reasoning" | out=SLOP-STARS
name=convert: claude to gemini | args=show claude:sesh-claude --output-format gemini | out="toolCalls" | out="thoughts" | out="result" | out=SLOP-STARS
name=convert: goose to crush | args=show goose:sesh-goose --output-format crush | out="type": "tool_use" | out="type": "tool_result" | out=YANKEE-ECHO
name=convert: codex to claude | args=show codex:019eb466-8e72-7dd0-8a10-9c8963f7d86c --output-format claude | out="type":"assistant" | out="type":"tool_use" | out="tool_use_id":"call-codex-grep" | out=DEADBEEF
name=convert: grep then render goose | args=grep claude:sesh-claude SLOP-STARS --output-format goose | out="toolResponse" | out=SLOP-STARS
name=convert: search then render gemini | args=search claude:sesh-claude SLOP-STARS --output-format gemini | out="toolCalls" | out=SLOP-STARS