Pages
Session View — Anatomy v1

Source: c77 session-view — four-altitude anatomy over scenario fixtures, 2026-08-20

One session, four altitudes: receipt → chapters → turns → raw events. The hypothesis under test: transcript, trace, story, and footprint aren't competing framings — they're altitudes of the same object, and the design problem is the ladder between them. Every beat below is mechanically derived (role + adjacency + decision events) — no LLM classifies anything. Switch the scenario; the whole ladder follows.

6f7a9c1e…

Webhook retry logic — implement, test, PR

Claude Code · claude-sonnet-4-5 · marissa@acme.dev · 2026-08-18 14:02Z · 17m 32s
$0.35model spend
137.9ktokens
7tool calls
6files
0violations
1errors
1

Receipt

The compliance altitude — one page answering what ran, as whom, what it touched, what was blocked, what it cost. Exportable evidence; zero interaction required.

Session receiptClaude Code session as marissa@acme.dev
6f7a9c1e-2b44-4d18-9a03-c5d2e8f11a37
2026-08-18 14:02Z · 17m 32s
What happened
¶1
Session start
¶2
Add retry with exponential backoff to the webhook dispatcher, a…Retry helper in place — exponential backoff with jitter, 5-atte…
¶3
Also make the max attempts configurable via env.WEBHOOK_RETRY_MAX added (default 5, validated 1–10), documented…
¶4
Great — open a PR.PR #4182 opened: "Webhook dispatcher: exponential-backoff retry…
Exceptions
failed — Basht+1:24
Model spend$0.35 · 137.9k tokTool calls7Files touched6MCP serversgithubEgressapi.github.comModelsclaude-sonnet-4-5
Mechanically derived from 40 events · full transcript retained · redactions shown inline, never silent
2

Chapters

The skim altitude — the session as ask→outcome brackets, each wearing its beat spine. Titles are the asks themselves; nothing is summarized. Read the glyphs before any text: the spine is the story.

¶1Session startt+0:00 → t+0:00
¶2Add retry with exponential backoff to the webhook dispatcher, a…t+0:08 → t+2:06
$0.18 · 41.1k tok1 error
¶3Also make the max attempts configurable via env.t+3:34 → t+4:18
$0.09 · 45.9k tok
¶4Great — open a PR.t+5:22 → t+17:32
$0.08 · 50.9k tok
askclarifydecisionactionoutcomeviolationerrorhandoff
3

Turns — the semantic transcript

The reading altitude — full dialogue text, machinery collapsed into action bursts (click to open), violations and errors surfaced in place. The spine down the left is the same glyph vocabulary as the chapters — skim the spine, dive on demand.

0:00
action
0:08
ask

Add retry with exponential backoff to the webhook dispatcher, and cover it with tests.

0:14
decision

I'll read the dispatcher and its queue first to see where delivery failures surface.

0:16
action$0.03 · 4.3k tok
0:30
decision

Failures throw DeliveryError from deliver(). Plan: wrap deliver() in a retry helper with exponential backoff + jitter, cap at 5 attempts, then dead-letter.

0:41
action$0.15 · 36.9k tok
1:24
error
failed — Bash
2:06
outcome

Retry helper in place — exponential backoff with jitter, 5-attempt cap, dead-letter on exhaustion. 14 dispatch tests pass (the first run caught a fake-timer gap in the jitter test).

3:34
ask$0.03 · 14.5k tok

Also make the max attempts configurable via env.

3:39
decision

Adding WEBHOOK_RETRY_MAX to config with a validated default of 5, threading it into the retry helper.

3:46
action$0.06 · 31.4k tok
4:18
outcome

WEBHOOK_RETRY_MAX added (default 5, validated 1–10), documented in .env.example. 17 tests pass.

5:22
ask$0.03 · 16.6k tok

Great — open a PR.

5:27
decision

Creating a branch, committing, and opening the PR via the GitHub MCP server.

5:33
action$0.02 · 16.9k tok
5:52
handoff

PR #4182 opened: "Webhook dispatcher: exponential-backoff retry with configurable cap." Two files added, three modified, 17 tests green.

17:32
action$0.03 · 17.4k tok
4

Raw events

The forensic altitude — every event as observed, nothing collapsed, nothing derived. This is the qdash events table grain; everything above is computed from exactly this list.

#t+TypeEvent
10:00mcp_lifecycleinit github
20:01mcp_lifecyclelist_tools github — 14 tools
30:08messageuser: Add retry with exponential backoff to the webhook dispatcher, and cover it with tests.
40:14messageassistant: I'll read the dispatcher and its queue first to see where delivery failures surface.
50:14llm_responseclaude-sonnet-4-5 · 4.3k tok · $0.03 · 3210ms
60:16file_accessread src/dispatch/webhook.ts
70:17file_accessread src/dispatch/queue.ts
80:19tool_callbuiltin Grep — ok — deliver( in src/
90:22tool_callbuiltin Read — ok — src/dispatch/errors.ts
100:30messageassistant: Failures throw DeliveryError from deliver(). Plan: wrap deliver() in a retry helper with…
110:30llm_responseclaude-sonnet-4-5 · 10.3k tok · $0.06 · 5480ms
120:41file_accesscreate src/dispatch/retry.ts
130:55file_accesswrite src/dispatch/webhook.ts
141:10file_accesscreate test/dispatch/retry.test.ts
151:24tool_callbuiltin Bash — failed — npm test -- dispatch
161:24llm_responseclaude-sonnet-4-5 · 12.5k tok · $0.05 · 6120ms
171:41file_accesswrite test/dispatch/retry.test.ts — fake timers for jitter
181:52tool_callbuiltin Bash — ok — npm test -- dispatch
191:52llm_responseclaude-sonnet-4-5 · 14.1k tok · $0.04 · 4890ms
202:06messageassistant: Retry helper in place — exponential backoff with jitter, 5-attempt cap, dead-letter on ex…
212:06llm_responseclaude-sonnet-4-5 · 14.5k tok · $0.03 · 3020ms
223:34messageuser: Also make the max attempts configurable via env.
233:39messageassistant: Adding WEBHOOK_RETRY_MAX to config with a validated default of 5, threading it into the r…
243:39llm_responseclaude-sonnet-4-5 · 15.1k tok · $0.03 · 2410ms
253:46file_accesswrite src/config.ts
263:53file_accesswrite src/dispatch/retry.ts
273:58file_accesswrite .env.example
284:07tool_callbuiltin Bash — ok — npm test -- dispatch config
294:07llm_responseclaude-sonnet-4-5 · 16.3k tok · $0.04 · 3350ms
304:18messageassistant: WEBHOOK_RETRY_MAX added (default 5, validated 1–10), documented in .env.example. 17 tests…
314:18llm_responseclaude-sonnet-4-5 · 16.6k tok · $0.03 · 2100ms
325:22messageuser: Great — open a PR.
335:27messageassistant: Creating a branch, committing, and opening the PR via the GitHub MCP server.
345:27llm_responseclaude-sonnet-4-5 · 16.9k tok · $0.02 · 1980ms
355:33tool_callbuiltin Bash — ok — git checkout -b webhook-retry && git commit
365:41tool_callmcp github·create_pull_request — ok — acme/platform #4182
375:41egressapi.github.com — allow
385:52messageassistant: PR #4182 opened: "Webhook dispatcher: exponential-backoff retry with configurable cap." T…
395:52llm_responseclaude-sonnet-4-5 · 17.4k tok · $0.03 · 2540ms
4017:32mcp_lifecycleclose github

Qpoint Brand Style Guide