Repository navigation
Releases: andyed/session-cartographer
Release list
v0.8.3: release: prepare 0.8.3
Session Cartographer 0.8.3
This release is about time spent for nothing. A performance review on
2026-10-07 read the recall telemetry, timed every hook, and profiled the
semantic leg: recall over Turbo was fast, but a filtered Qdrant search was
scanning payloads, the hooks were paying for process starts rather than work,
and the catch-up at session start was inspecting transcripts it had already
indexed. Each is fixed here, and each fix is held by a test that reproduces
the measurement.
0.8.2 was tagged first and never published: its release gate failed on Linux,
where the hook-rows fixture had built its workspace under /tmp (a path the
hooks drop as scratch) and retro-index.sh's mtime helper returned GNU stat's
filesystem block instead of a number. Both are fixed here, so 0.8.3 is the
same change set as a release that actually passes its gate on both platforms.
Filtered semantic search is indexed
The session-cartographer collection had no payload indexes. Every recall
filters on project and timestamp, and Qdrant evaluated both by scanning:
on 157k points a project-filtered search cost 200-420 ms of server time and a
timestamp range 100-170 ms, against 3-6 ms unfiltered. That was the dominant
cost in the semantic stage and why some recalls blew the 4000 ms Turbo budget
and fell back to the portable CLI.
scripts/qdrant-collection.jsowns collection bootstrap: the collection
plus akeywordindex onprojectand adatetimeindex ontimestamp.embed-events.jscreates both with the collection.index-event.sh, the
Explorer's/api/healthand Turbo at boot readpayload_schemaand create
whatever is missing, so an upgraded install is indexed from its first hook
event with no reindex.- The same filtered searches now cost 4-16 ms with identical top-50 results.
Hooks start fewer processes
The two hot hooks spent their time starting processes. log-tool-use.sh
spawned 64 for a plain npm test (19 jq, 12 awk, 8 head, 5 tr, 5 grep); the
per-turn Stop hook spawned 24, including a python3 interpreter to URL-encode
one path, and then logged nothing.
- Each hook reads its payload with one
jq | @sh, reads the command text in
one awk pass, resolves the project only when it writes, and builds both rows
of a pair with one jq. The transcript path is encoded with jq's@uri, so
python is no longer a hook dependency. - Measured: a plain command 64 processes to 7, the Claude Stop no-op 24 to 2,
an Edit 37 to 6, a SessionEnd 38 to 11. - The rows do not change.
tests/fixtures/hook-rows/expected.txtis what the
pre-rewrite hooks wrote for a fixed set of payloads, and
hook-rows-golden.test.jsholds the live hooks to it byte for byte.
Catch-up skips before it reads
The background Codex catch-up at session start took 26 s median even with
nothing to index, because retro-index.sh ran two transcript-wide jq passes
and a node project-inference process on every transcript before reading the
checkpoint that said to skip it. A Codex rollout file carries its session id
in its name, so a prefix match against the progress file now skips a
checkpointed session without opening it. Anything that does not match falls
through to the full derivation and full key check, unchanged.
Standup: SILENT and UNCLAIMED
/standup now reports two things the event log never saw: Codex transcripts
written in the window with no logged events, and tracked files changed in the
window that no logged session claims.
Upgrading
Live hooks run from the plugin cache, so the hook and catch-up changes apply
after claude plugin update session-cartographer@session-cartographer and a
restart. The payload indexes are created by the first hook event, health
poll or Turbo start on the new version; node scripts/qdrant-collection.js ensure-indexes --json does it by hand.
v0.8.1
Session Cartographer 0.8.1
This release is about commits the log never recorded. On 2026-09-26, 43 of
the 125 commits that landed in git had no git_commit event. The commit hook
now records every commit a Bash call makes, and a new day digest checks the log
against git, so a gap like that shows up instead of reading as a quiet day.
Every commit a call makes is logged
- A Bash call that committed more than once logged only its last commit: a fix
committed with its audit doc lost the fix, and acdinto a second
repository to commit there lost the commits made before it. The hook now reads
the reflog of every repository the command commits in and writes one row per
commit, oldest first. Each row has a newcommit_actionfield:commit,
amend,merge,cherry-pick,revertoram. - Merges and cherry-picks were never detected; they are now logged, as are
reverts andgit am. - In Claude Code, a commit in a call that exited non-zero (
git commit … && npm testwith a failing test) is logged. git commitinside quotes or a comment, such as a grep pattern or a list a
loop iterates over, no longer produces a commit row for a commit that never
happened.- A commit made as
cd <repo> && git commitis filed under that repository,
not the directory the shell ended in. - A repository's first commit lists its files and diff shape.
Replayed on the 38 calls behind the 46 unlogged commits of 2026-09-26 and
2026-09-27, the new hook logs all 46 and no commit the call did not make.
Codex keeps logging one commit per call: its hook payloads carry no call
duration, which the new path needs to tell this call's commits from another
session's. Codex now loads hooks/codex-hooks.json, which leaves out the one
Claude-only event this release registers.
Day digest
One local calendar day across every session, by project, with each commit
checked against git:
node plugins/session-cartographer/scripts/session-digest.js --day yesterday
node plugins/session-cartographer/scripts/session-digest.js --day 2026-09-26 --md # paste-ready receipt
node plugins/session-cartographer/scripts/session-digest.js --day today --json # carto.day-digest/1- Each project shows its commits, sessions, active time, diagnoses, most-edited
files and the repository's current state. Active time is wall clock: the
five-minute periods with any logged event, with every session merged, so three
sessions in one hour count as one hour. - A logged commit is marked landed, moved (landed under a new sha after an
amend, rebase or cherry-pick), rewritten away, not in git, or unchecked. Your
commits that no session logged are listed as git-only. The receipt lists only
commits git has. cartographer-pulse.sh --day-digest yesterdayadds the receipt to a scheduled
pulse, scoped by the pulse's own allowlist. Work outside the allowlist is
reported as a count, never by name.- The Memory Desk has a Day view with a date picker, Today and Yesterday.
Each commit links to the session that made it, and Copy receipt copies the
Markdown. The view runs the same script as the command line, so the two show
the same numbers.
Explorer
- Closing a file review returns focus to that file's row, including rows past
the eighth, and a second Escape closes the task as it should. - The session digest prints paths under your home directory as
~/…, and
counts a file edited in an agent worktree and in the main checkout as one
file.
After updating
-
Restart long-running Claude Code sessions. A session keeps the hooks it
started with. On 2026-09-26, 23 commits went unlogged in sessions still
running the previous version hours after the update was installed. Codex
reads its hooks on every call, but from its own copy of the plugin, which
can update later than Claude Code's. -
Restart Turbo to get the Day view. A Turbo started before the update keeps
serving the old API, and the view says so:node plugins/session-cartographer/scripts/cartographer-turbo.js stop
Then run
/carto, or open the desk and press Start Turbo.
v0.8.0
Session Cartographer 0.8.0
This release retires /focus, whose orientation moves into /remember. It
brings Hermes Agent into the corpus, warns before two sessions edit the same
file, and makes Turbo both easier to turn on and slower to give up. Most of the
remaining changes fix places where events went missing, carried the wrong type,
or were credited to the wrong session, without anything reporting an error.
/focus is now /remember --project (breaking)
-
Claude Code 2.1.269 ships a built-in
/focusview, which shadows this
plugin's skill of the same name. Orient on a project by giving/remembera
project and no question:/remember --project <name>It runs the same recency search plus the related-threads and recurring-maneuvers
lenses/focusdid. -
skills/focusstays as a pointer for this release, so older instructions and
other agents are redirected rather than broken. Update any custom instructions
that still say/focus. -
CARTOGRAPHER_FOCUS_ON_STARTkeeps its name.
Hermes Agent
-
Hermes sessions and configured workspace notes can now enter the corpus, where
search, facts and/standupsee them and the Explorer marks them with a
hermesbadge. The adapter reads every Hermes profile'sstate.dbread-only and does
nothing until you write a policy file:node plugins/session-cartographer/scripts/hermes-source.js --print-config-path node plugins/session-cartographer/scripts/hermes-source.js # dry run: counts only node plugins/session-cartographer/scripts/hermes-source.js --writeThe policy can drop whole sessions by project or path and redact matching
lines. Cron prompts and tool results are never indexed. Once a policy exists,
the session-start catch-up runs the adapter for you.--show <session>
prints one session's turns, since Hermes keeps no transcript file. -
Recall calls made from Hermes now say they came from Hermes. To record which
Hermes session made them, have the wrapper Hermes runs export the session
itself. See "Recall telemetry from Hermes" in SETUP.md.
Turbo
-
/cartonow turns Turbo on for you on machines with 16 GB or more of RAM,
when Turbo's estimated memory use is within 8% of it. Elsewhere it reports the
estimate and changes nothing. Below 16 GB, a running service exits after 30 idle minutes
(turbo.idle_minutesoverrides this).statusshows the memory plan. -
A slow recall now falls back to the portable search once, instead of being
run a second time first. The default wait before falling back rises from
1.5 s to 4 s, which covers the slowest searches measured. Configs written by
an earlier/turbo enablekeep 1.5 s until you raise it:node plugins/session-cartographer/scripts/cartographer-turbo.js enable --timeout 4000 --no-start -
A running service now answers the same as a freshly restarted one. It no
longer misses events written while it was starting or written in two parts,
and it merges an event logged twice instead of keeping only the first copy. -
statuschecks that the service is still following your logs, not just that
it is running. It reportsindex_freshnessaslive,staleor
unverified, with details for each log. -
When Turbo fails to start,
server.lognow says whether it was stopped at
the start deadline or exited first.CARTOGRAPHER_TURBO_READY_TIMEOUT_MS
changes the deadline.
Collision warning before an edit
- Before Claude Code or Codex edits a file, a new hook checks whether another
session edited or committed that file in the last 45 minutes. If so, it tells
the agent whether the other session is in the same checkout (a commit here
could sweep up its uncommitted changes) or a separate worktree (the conflict
arrives at merge). It never blocks, and stays silent otherwise. Turn it off
withCARTOGRAPHER_COLLISION_CHECK=0.
Memory Desk (alpha)
- A new Recall view lists every
/remembercall in the window, grouped by
session, with each call's ranked results. Results an agent marked with
--touchshow as "marked used" at the rank where they were served. Calls with
no session are grouped as Unattributed rather than hidden. /wrapupnotes and Hermes runs are now typed as what they are, not as generic
milestones, so a session's wrapup appears among its outcomes and the type
filter lists each kind.- In the full-size Activity view, the Field readout no longer hides its first
line under the header or covers the point it describes.
Event capture
-
Commits are recorded when made with
git -C <repo>orgit -c, when
git commitcomes after the first 500 characters of the command (for example
after a long message written withcat > file <<EOF), and when the command
starts withcat. Before, these were logged as ordinary commands or dropped,
and/wrapupshowed no commits. -
A command line is no longer dropped as noise because its first command is
catorecho: each part is judged on its own. Expect up to about 22% more
command rows intool-use-log.jsonl. -
Commits by other people in repositories you cloned no longer count as your
session's work in search, digests,/standupor the profile. To fix rows
written before this release (a dry run unless you pass--apply, which keeps
a backup):node plugins/session-cartographer/scripts/repair-foreign-commit-sessions.js node plugins/session-cartographer/scripts/repair-foreign-commit-sessions.js --apply
Search
- The portable search now reads text after an escaped quote in a log entry.
More than a quarter of summaries, mostly commands with quoted arguments, were
partly invisible to/rememberwith Turbo off. - The portable search honours
CARTOGRAPHER_SEMANTIC=0. - The Explorer's search returns no results instead of an error for a query with
no searchable words, such as punctuation only. - The facts
deltaverb describes an event the same waycensusdoes.
Recall telemetry
- Every served, search-call and access row now records where its session came
from (session_source). Served and search-call rows sayno_sessionwhen
there was none, instead of leaving the field empty. A session value of
unknownis treated as no session rather than as an identity.
Explorer readability
- Text across the Timeline, Sessions, Search, the search box and the Transcript
viewer now meets an 8:1 contrast floor. Badges and filter pills are outlined
in a single set of hues, and in the search suggestions the completed part of
each option is set in bold.
Upgrading
Update the plugin in every agent you use, then start a new session:
claude plugin update session-cartographer@session-cartographer --scope user
codex plugin add session-cartographer@session-cartographerThen, if they apply to you:
- Replace
/focusin any custom instructions with/remember --project <name>. - Raise a Turbo config written before this release to the 4 s wait (see Turbo
above). - Codex will ask you to review the changed hooks in
/hooks. This release adds
the pre-edit hook. - Run the foreign-commit repair once if you import git history from repositories
other people commit to.
Update Claude Code and Codex together if you use Turbo. They share one
background server, and the first recall after an update replaces a server from
a different version, so two versions would keep replacing each other. Paths
above are relative to the extracted release archive or a source checkout.
v0.7.9
Session Cartographer 0.7.9
This release brings Codex's own memory into /remember, sharpens /standup,
and rebuilds /investigate around recall. It includes everything from 0.7.8,
so if you are upgrading from 0.7.7, these notes cover both.
Codex memory in recall
-
/remembercan now search what Codex has saved in its native memory, next to
your Claude Code and Codex session history. Import it once, and again whenever
Codex's memory changes:node plugins/session-cartographer/scripts/backfill-codex-memories.js
Add
--dry-runto preview, or--indexto include the entries in semantic
search when Qdrant and the embedding server are running. The import never
writes to Codex's files. -
When a Codex memory entry changes or is removed, recall shows only the current
version. Earlier versions stay in the log as history. -
Current Codex preferences feed the standing profile (
.carto/profile.md). -
See the Codex memory migration guide if you are
upgrading an existing install.
/investigate remembers past diagnoses
- Before you diagnose a bug,
/investigatenow searches earlier investigations
of similar symptoms and files, and shows whether each was confirmed or
refuted. A hypothesis that was already ruled out is the most useful thing it
can surface. - It records your hypothesis, and once the fix is verified, the outcome, so the
next session starts from what was learned. - It no longer imposes a debugging procedure; how to debug is left to you and
your agent.
/standup
- Edits to the same file from a Codex worktree and its main checkout now count
as a collision, as Claude Code worktrees already did. --projectmatches files by the repository they belong to, not by any folder
that happens to share the project's name.--commitrespects--since.- Session labels stay distinct when two session ids share a prefix.
Project registry
-
The plugin now ships without project aliases. Build yours from your own
history, and refresh it later without losing your edits:node plugins/session-cartographer/scripts/bootstrap-project-registry.js --dry-run node plugins/session-cartographer/scripts/bootstrap-project-registry.js node plugins/session-cartographer/scripts/bootstrap-project-registry.js --update --dry-run
--projectsubstring matching works without a registry, so most scoped
searches need no setup.
Turbo
- The README now leads with measured recall speed: about 0.3 s with Turbo
against about 12 s without, on a 150,000-event corpus. Reproduce it on your own
history withbash plugins/session-cartographer/scripts/bench-grep-vs-turbo.sh. - Turbo no longer leaves a stray background server behind when its state
directory is reset.
Upgrading
Update the plugin in every agent you use, then start a new session:
claude plugin update session-cartographer@session-cartographer --scope user
codex plugin add session-cartographer@session-cartographerUpdate Claude Code and Codex together if you use Turbo. They share one
background server, and the first recall after an update replaces a server from
a different version, so two versions would keep replacing each other. Codex may
ask you to review changed hooks in /hooks. Paths above are relative to the
extracted release archive or a source checkout.
v0.7.8
Session Cartographer 0.7.8
This release brings Codex's curated memory into Cartographer recall and improves
the evidence behind /standup. It also includes the managed Turbo server lease
fix recorded in the changelog. The previous public release was 0.7.7.
The related-project survey now includes Michael
Albers's claude-memory-context
as a complementary write-forward memory practice.
Codex memory
- Import the native Codex memory registry, overview, and rollout summaries as
versioned events. Source files are read only. A repeat import appends only
changed or removed entries. - CLI and Explorer/Turbo search suppress superseded events before ranking.
Current Codex user preferences can contribute to the standing profile. - Keyword recall needs no service. Semantic recall is refreshed explicitly with
--indexwhen Qdrant and the embedding server are available. Import remains
on demand; it does not watch Codex memory files. - Existing users should follow the migration guide
after updating their installed plugin copy. Refresh a running Turbo process
separately from restarting the client.
Standup
--commitapplies its requested time window.--projectretains file edits
recorded under the workspace-root project label.- Verified Codex worktrees and their main checkout now resolve to the same file
for contention. An unverifiable worktree is counted as unmapped instead of
being paired by a similar directory name. - Display labels expand when session IDs share an eight-character prefix.
Activity markers reflect event recency, not process liveness. Shared-goal
coordination is documented as a future design, not a shipped feature.
Turbo and installation
The managed Turbo server now exits when its ready-file lease disappears, and
the controller reaps a child that fails to become ready. The unified archive
installs for Claude Code and Codex. Follow the archive README for installation,
fresh-session and hook-review steps. Publication and managed-install verification
are separate from building the archive.
v0.7.7
Session Cartographer 0.7.7
This release adds the peer view, bounds file review to the session that did the
work, and closes three ways a real commit or edit could vanish from the corpus
without an error. The previous public release was 0.7.6.
Peer view: /standup
/focusanswers what has happened in a project./standupanswers who else
is in it right now: every session active in the window with its provider,
projects, idle time, span, and commits, followed by CONTENTION — the files two
sessions are both editing. Read that section first; the roster is ambient.--commit <sha>names the session behind a commit that landed underneath
you.--projectscopes the roster and the contention list alike.- A worktree edit and a main-checkout edit of one repository file count as one
file. Workspace-root and worktree directory names are filtered from project
labels but never from file paths. Unresolved edit candidates are reported in a
NOT COUNTEDfooter rather than dropped, since a silent miss and a clean
workspace otherwise print the same thing. - Reads the session-attributed events the hooks already write. Captures nothing
new, writes nothing.
Working memory
- File review diffs are bounded by the session: base is the last commit at or
before the session's first event, head is the last commit within two minutes
of its last event, falling back to the working tree while a session is in
flight or committed nothing for that file. Both ends are named, and the review
lists the ways the range can mislead. Split is the default layout, with the
dependency-free unified table behinddiff=unified. - Artifacts group by document: one row per path, documents ahead of code,
newest edit first, each carrying the threads that touched it.kind=mdis a
permalinked documents-only toggle. - Windows run from 1 hour through 90 days. Search, filters, catch-up state,
paging, sort, brushing, camera, and comparison axes are canonical browser
history, so Back, Forward, reload, and Copy link restore the same desk. - Every Explorer view names the agent that produced the row. Claude and Codex
sessions keep their identities through transcript enrichment, and the facet
bar can narrow to one agent. - Heavyweight routes each have a recovery boundary, so a render failure no
longer blanks the Explorer shell. Transcript text loads independently of its
optional analysis, with typed missing, blocked, empty, and unreadable states.
Hooks and recall
- Commits made after a
cdon its own line, or after a;, are recorded. The
hook previously stripped only the&&form and dropped the whole command as
noise. The commit hash and subject are now read from the repository rather
than scraped from stdout, sogit commit -qno longer produces a commit with
no row. backfill-git-history.shrecognises commits the hook already logged and no
longer duplicates them on a recovery run. Existing duplicates are not
rewritten.- Variable-bound python writes (
p='file'…open(p,'w')) are recorded as
edits even when the compound command carries an incidental>such as
2>/dev/null. Before this, the edit logged as a plain command and the Memory
Desk reported the file as never edited by that session. - Memory and the session digest resolve edited files through one parser, so
loose shell-detector candidates are counted as unresolved instead of becoming
fabricated hottest-file entries.
Pre-fix history under-counts commits and edits for sessions that used these
command shapes. scripts/backfill-git-history.sh --project <name> --limit N
recovers the commits; edits are not recoverable retroactively.
Agent documentation
- The
/cartoskill documents the Memory Desk permalink grammar in full,
transcribed from the route parser, with recipes for an agent's own thread, a
bounded file review, a compare view, and a replayed window. Agents can hand an
operator a URL instead of a description. /standupis listed everywhere the other skills are listed, and its reporting
guidance says to hand over a peer session's permalink rather than a bare id.
Installation and verification
The archive is one local marketplace for Claude Code and Codex. Follow its
README for installation and restart the agent client afterward. If a detached
Turbo service is already running, refresh it through the managed controller or
the memory page; restarting the client alone does not refresh that process.
Release metadata, including the root lockfile, is checked before packaging.
Publication requires Node 22 unit tests, the Explorer build and Chromium flow,
and the package smoke test. Managed CLI install checks run when those CLIs are
available; hosted CI does not establish a local managed-install result.
Turbo remains optional and experimental.
v0.7.6
Session Cartographer 0.7.6
This release combines the local 0.7.5 development work with the working-memory
Explorer and release-readiness fixes. The previous public release was 0.7.4.
Working memory
- Open
/memoryfor Field, Wake, and Compare views of recorded sessions across
projects. Compare duration, activity, generated or processed tokens, edits,
research, and commits. - Select a session to inspect activity and token traces, observations, and
recently edited files. File review shows the current file and Git diff from
HEAD; it is not a historical file snapshot. - Session and file links preserve the view, axes, review mode, and replay
window. Reload and browser history restore the selection, and older sessions
reopen their last recorded window. - Start the UI with
npm run memoryfrom Explorer. The page can enable, start,
or refresh the shared managed Turbo service. Opening it alone changes no
preference and starts no backend. Internals remains available on the UI host
while Turbo is stopped. - Both UI launch commands keep timeline, search, sessions, transcripts, and live
streaming available whether Turbo is off or running. The UI serves those
canonical Explorer APIs itself, avoiding 404s from the narrower Turbo backend.
A compact work desk
- Memory now prioritizes tasks across projects, with return-point catch-up,
observed activity filters, and direct task handoffs. A saved return point
stays fixed while you catch up; it does not move with polling. - The overview pages tasks to fit the window. Phone layouts switch between
Overview and Charts; laptop and desktop layouts keep the task index beside
the charts. Field takes the remaining height while Wake and Compare stay
compact. Full task, transcript, document and diff views retain reading scroll. - Brushing or keyboard pinning links the charts and task list. Projects,
Threads and Artifacts provide semantic depth. Text find and a brushed cohort
can be cleared independently. - Markdown has safe rendered/source views; unified diffs include old and new
line numbers. Reviews show current workspace state, including possible edits
from other sessions, rather than claiming a historical reconstruction. - The overview keeps task order stable during live polling. Latest first
explicitly refreshes that order. Readable text and keyboard/touch targets
retain their size as the window changes; page capacity changes instead.
Recall and ownership
- The warm backend now separates ranked recall from counted facts: census,
tempo, and log-position delta queries carry supporting event IDs. - Recall applies time windows before truncation and uses consistent project
scope across keyword and semantic sources. The pulse uses counted facts above
its relevance feed. - Git backfill imports configured owners by default. Full names remain one
author pattern; empty explicit overrides are rejected.--all-authorsremains
an explicit option. Existing imported history is not rewritten by this update. - Project aliases can live in a user-owned registry that replaces the shipped
defaults. Adoption instructions now describe the actual lookup order.
Installation and verification
The archive is one local marketplace for Claude Code and Codex. Follow its
README for installation and restart the agent client afterward. If a detached
Turbo service is already running, refresh it through the managed controller or
the memory page; restarting the client alone does not refresh that process.
Release metadata, including the root lockfile, is checked before packaging.
Explorer's locked dependencies include security fixes within their existing
version ranges, including Vite, PostCSS, and shell-quote.
Publication requires Node 22 unit tests, the Explorer build and Chromium flow,
and the package smoke test. Managed CLI install checks run when those CLIs are
available; hosted CI does not establish a local managed-install result.
Turbo remains optional and experimental. Missing or partial transcript usage is
labelled, and the utility canary has not established better recall than the
portable backend.
v0.7.4
v0.7.2
Session Cartographer 0.7.1
Session Cartographer 0.7.1
A follow-up to 0.7.0. The attribution migration under-repaired: events recorded from
a subdirectory of a worktree were skipped.
Who needs this
Anyone who ran the 0.7.0 migration. Re-run it — the pass is idempotent and picks up
only what was missed:
node scripts/migrate-project-attribution.js # dry run
node scripts/migrate-project-attribution.js --applyIf the dry run reports 0 event(s) would be repointed, you were unaffected and there
is nothing to do.
What was wrong
The migration repointed a record only when its project equalled basename(cwd). The
hook it repairs, though, derived the project from git rev-parse --show-toplevel, which
returns the worktree root no matter how deep the working directory was. An event
recorded in …/worktrees/confident-yalow-e1cdc6/apps/capacitor/android therefore carried
confident-yalow-e1cdc6 as its project alongside a much deeper cwd, and the check
skipped it.
The signature now also accepts a project matching the basename of the cwd's own
toplevel. On the development corpus that recovered 18 further events across 2 phantom
projects.
Nothing else changed, and the 0.7.0 write-time fix was never affected — new events were
always attributed correctly regardless of directory depth.
Full detail in CHANGELOG.md.