## The continuity ledger

Before choosing an operation\,&#32;name the state you want to change\.

“Reset my session” is too vague\.&#32;It might mean stopping a response\,&#32;dropping conversation context\,&#32;starting a different identity\,&#32;discarding provider\-facing handles\,&#32;or deleting local history\.&#32;Those are different requests\.

### The seven boundaries

| Layer | What it means | What it is not |
| --- | --- | --- |
| **Live and model context** | The messages currently held by the agent\,&#32;plus the transformations used to prepare model context\. | Every entry ever retained in the journal\,&#32;or an exact captured HTTP request\. |
| **Durable journal** | The saved JSONL conversation record\,&#32;including messages and metadata\.&#32;It can retain older and alternative paths\. | A directory snapshot or a complete record of every unfinished streaming token\. |
| **Persistent session identity** | The identity in the session header\,&#32;exposed by&#32;`SessionManager.getSessionId()`\. | Necessarily the same value as a provider\-facing session ID\. |
| **Provider\-facing state** | Request identity\,&#32;local transport\/session handles\,&#32;and possibly a separate prompt\-cache key\. | A guarantee about remote retention\,&#32;remote deletion\,&#32;or cache behavior\. |
| **Cwd and project scope** | The active working directory\,&#32;recorded header cwd\,&#32;and any additional workspace roots\.&#32;These can differ during fallback or failure\. | A copy of the project at the time the conversation began\. |
| **Workspace files** | The files that exist now in the project\. | Files restored merely because an old conversation was reopened\. |
| **Artifacts and outputs** | Session\-adjacent artifacts and nested journals\,&#32;generated HTML\,&#32;temporary dump sidecars\,&#32;and copied text\. | One automatically synchronized\,&#32;automatically deleted privacy boundary\. |

The rendered transcript is another&#32;**view**&#32;of these layers\.&#32;It may collapse older context or hide some content\.&#32;A shorter display does not establish a shorter journal\.

A journal’s entries have their own IDs and parent relationships\.&#32;The active leaf selects a conversation path for context rebuilding\.&#32;You do not need to learn the entire tree implementation here\;&#32;you do need to remember that&#32;**all stored entries**&#32;and&#32;**the active conversation path**&#32;are not the same thing\.

### Milestone\:&#32;Identify yesterday before opening anything

**Need\.**&#32;Maya wants yesterday’s Lantern Board discussion\.

**Obstacle\.**&#32;Yesterday’s conversation says “Ready for pickup\,” but today’s workspace file says “Packed and waiting\.” Both statements can be present without OMP having lost anything\.

Read the public fixtures first\:

- [Yesterday’s journal](<https://present-sketch-tp94.here.now/examples/return-desk/yesterday.jsonl>)
- [Today’s workspace text](<https://present-sketch-tp94.here.now/examples/return-desk/today.txt>)
- [Return Desk exercise inventory](<https://present-sketch-tp94.here.now/examples/return-desk/exercise.json>)

**Terminal shell — read\-only inspection\,&#32;from extracted&#32;`examples/`\:**

~~~sh
jq -s 'map(select(.type == "session") | {id, cwd, title})' return-desk/yesterday.jsonl
jq -s 'map(select(.type == "message" and .message.role == "user") | .message.content)' return-desk/yesterday.jsonl
cat return-desk/today.txt
~~~

**Structured example output — derived from the public header\,&#32;not a new terminal capture\:**

~~~json
[
  {
    "id": "11111111-1111-4111-8111-111111111111",
    "cwd": "/fictional/lantern-board",
    "title": "Lantern Board: yesterday's labels"
  }
]
~~~

The fixture’s user message is\:

> For our fictional Lantern Board\,&#32;use the label Ready for pickup\.&#32;We will revisit it tomorrow\.

The workspace file identifies its current label as\:

> Current label\:&#32;Packed and waiting

**What changes\?**&#32;These inspection commands change neither the fixture nor an OMP session\.

**What stays separate\?**&#32;The full session identity\,&#32;the header’s recorded cwd\,&#32;the conversation text\,&#32;and today’s file contents are four different observations\.&#32;The short entry ID of a message is not the persistent session identity\.

**Recorded check\.**&#32;`identity-journal-cwd-workspace`&#32;reopened a real&#32;`SessionManager`&#32;journal and retained its identity\,&#32;location\,&#32;entries\,&#32;and cwd while the fictional workspace bytes remained unchanged\.

**Failure and recovery\.**&#32;If&#32;`jq`&#32;cannot read or parse the fixture\,&#32;fix the working directory or restore a clean downloaded copy\.&#32;Do not substitute a personal journal\.&#32;The&#32;`/fictional/lantern-board`&#32;path and&#32;`fictional-offline-model`&#32;label are fixture data\,&#32;not a project or provider to configure\.

**Self\-check\.**&#32;After resuming yesterday\,&#32;which label should&#32;`today.txt`&#32;contain\?

**Answer\:**&#32;“Packed and waiting\.” Resuming history does not reverse the file change represented by the fixture\.

### A path is not proof of persistence

The current manager can allocate a session ID and transcript path before materializing the file\.&#32;New\-session persistence is lazy until assistant output or another explicit persistence reason makes the file necessary\.

That means\:

- An assigned filename does not prove that a resumable file exists\.
- An empty new conversation can still have model or thinking metadata in memory\.
- A session created with&#32;`--no-session`&#32;normally has no journal file\,&#32;but a dump can still create a temporary sidecar\.
- Completed entries and in\-flight streaming text have different durability boundaries\.

The supplied&#32;`SessionManager`&#32;comments describe completed\-entry writes reaching the operating system without&#32;`fsync`\:&#32;software\-crash durability is not a power\-loss backup guarantee\.

**Source anchors\:**&#32;`packages/coding-agent/src/session/session-manager.ts`&#32;—&#32;`SessionManager`\,&#32;`getSessionId`\,&#32;`getSessionFile`\,&#32;`isSessionOnDisk`\,&#32;`buildSessionContext`\;&#32;`packages/coding-agent/src/session/session-context.ts`&#32;—&#32;`buildSessionContext`\;&#32;`packages/coding-agent/src/session/session-entries.ts`&#32;—&#32;`SessionHeader`\,&#32;`ResetBoundaryEntry`\.
