Skip to content
SlashClone

A session log that parallel agents never conflict on

@slashclone/parallel-session-log

Keep a project log that several Claude Code sessions can write at once without merge conflicts. Each session writes its own dated file, an index is generated instead of hand edited, and a small CI check makes sure every entry carries the line your team requires. Writes the files for you to review; never commits or pushes.

SkillDevOpsv0.1.0 (latest)
Activity
New: be the first to try it
  1. 1---
  2. 2name: parallel-session-log
  3. 3description: "Turn a single shared progress log (one PROGRESS.md that every session appends to) into one file per session plus a generated index, so parallel Claude Code sessions and their pull requests stop conflicting on it. Adds a CI check that every new entry has a required line. Use when several agents or people work in one repository at once, when pull requests keep conflicting on a log or changelog file, or when someone asks for a session log, work log, or progress log that scales."
  4. 4---
  5. 5
  6. 6# Parallel session log
  7. 7
  8. 8Goal: every session leaves a record, and two sessions running at once never touch the same file.
  9. 9
  10. 10## Why a single log breaks
  11. 12Every session adds its entry at the same place in one file. Two pull requests open at the same time both edit those lines, so the second one conflicts, and a careless resolution drops an entry. More parallel sessions means more conflicts.
  12. 14## The shape
  13. 16- `docs/progress/YYYY-MM-DD-slug.md`: one file per session, named by its date and a short slug (lowercase words joined by hyphens). Names sort by date.
  14. 17- `docs/progress/_TEMPLATE.md`: the entry template. The underscore keeps it out of the index.
  15. 18- `docs/PROGRESS.md`: the old log, kept as history, plus an index of the session files between two markers. Sessions never edit it.
  16. 19- `.github/scripts/session-log-index.mjs`: rebuilds the index from the folder. Run it now and then (a housekeeping pull request, or before a release), never in every session's pull request, or the index becomes the new conflict.
  17. 20- `.github/scripts/check-session-log.mjs`: a CI check. Every file added or changed in `docs/progress/` must have a valid name and the required line. Entries still added to the old log are checked too, so pull requests opened before the switch keep passing.
  18. 22## Steps
  19. 241. **Ask** what each entry must contain that CI should enforce (for example a `**Harvest:**`, `**Risk:**`, or `**Tests:**` line), and where the log lives today. Use their answer as the required line.
  20. 252. **Read** the current log. Note its template and the order entries were added in (newest first, appended at the end, or mixed). Do not reorder history.
  21. 263. **Create** `docs/progress/_TEMPLATE.md` from the existing template, with a short comment on top saying how to name the file and that the old log is not edited.
  22. 274. **Rewrite only the top** of the old log: say where entries go now, add a "Sessions" heading with the two index markers, and a "History" heading above the old entries. Leave every old entry as it is. Keeping the change at the top avoids conflicts with sessions that are still appending.
  23. 285. **Add the two scripts** from `scripts/` to `.github/scripts/` (Node standard library only, no dependencies). The index is rebuilt with `node .github/scripts/session-log-index.mjs`; offer to add a package script for it, and let the person add it.
  24. 296. **Wire the check** into the CI that runs on documentation changes, on pull requests, with full history (`fetch-depth: 0`), passing the base branch: `node .github/scripts/check-session-log.mjs "origin/$BASE_REF"`.
  25. 307. **Update every instruction** that says where to log: the project's CLAUDE.md, the pull request template, contributor and deploy docs. Search for the old file name. Leave published or released material as it is.
  26. 318. **Test** the check before opening the pull request: a new file without the line fails, a badly named file fails, a good one passes, and the new headings in the old log do not count as entries.
  27. 329. **Merge it last** if other sessions are writing to the old log right now: rebase on the main branch first so their entries survive, and tell them about the new convention.
  28. 34## Rules
  29. 36- One file per session. A long session adds sections to its own file, never a second file for the same work.
  30. 37- Sessions never edit the index or the history. The folder is the record; the index may lag behind it.
  31. 38- The required-line check is a nudge, not a gate on content: "none, because ..." passes.
  32. 40## Safety
  33. 42This kit writes only the files listed in its permissions, and only after you see the change. It runs nothing on its own and never commits, pushes, or opens pull requests. The scripts read files in the repository and call `git diff` and `git ls-files`; they make no network calls.

Cookies that keep you signed in and remember these choices are always on. Everything else is off until you turn it on.