Observe first. Explain only with enough evidence.

Updated October 15, 2026 · Independent experiment

CarryLab measures seven synthetic values at one origin. It does not label a whole browser “safe”, certify a session, or infer the cause of a missing object.

A completed write is the baseline

Each action writes its own generated value and then reads it back. The all-actions control waits for the seven operations and a fresh observation before announcing completion. IndexedDB waits for its transaction, and the HttpOnly fixture waits for its HTTP response. A click that has returned from automation is not sufficient evidence that an asynchronous action finished.

Observation does not seed the fixtures. The page may issue a same-origin request to read its guest-pass cookie, and it queries browser storage. An absent IndexedDB database is not created just for a read. Cleanup removes only CarryLab's named entries and cookies, then observes again.

Native CLI evidence

Our reference run uses agent-browser 0.39.1 with Chrome for Testing 156.0.8078.4 on macOS. A separate executable, empty explicit config, fixture-owned socket directory and disposable profile avoid borrowing an existing browser session. The downloaded runner exercises the actual website controls and preserves command results.

We compare a plain named session after close, a serialized state restored in a new session, and a reopened dedicated profile. These are three specific operations, not an exhaustive test of every restore option. The public matrix reports those exact conditions.

Lifecycle evidence is external to the page

A blank page or empty fixture cannot identify a daemon restart. We reproduced a configuration-change issue using both the page observation and the CLI's restartedBackground result. The control retained its flags. Without that additional evidence we would report only the observed absence.

An initial immediate close/open experiment returned an uncertain outcome. We preserved it, stopped that sequence, and changed the harness to wait for the owned daemon to exit. No storage conclusion was drawn from the failed sequence.

A browser difference we observed

In our isolated WebKit 26.5 test contexts, the Cache Storage fixture read back after writing but was empty after reload. Chromium 156.0.8078.4 retained it in the same test. We checked the cache directly to confirm the displayed observation. This is a result for those test contexts, not a claim about all Safari installations or the cause of eviction.

What a report contains

The JSON observation includes a schema version, random trial label, origin, observation time and seven outcomes. Only recognized synthetic marker values are exported. Errors are bounded text. The script's richer report also includes native CLI output and paths. You can rerun with another tool version, but that is a new result and should name its own environment.

Boundaries

We do not test third-party partitioning, all origins, real sign-in, device binding, browser crash recovery, private-mode guarantees, eviction pressure or retention over days. Cache presence does not establish offline navigation. Reference results may change with CLI and browser versions. Search interest in agent-browser does not establish demand for every storage workflow or predict traffic to this site.

Primary references: session documentation, 0.39.1 release, reported lifecycle mismatch.