Skip to content

v4.39.0 — merge-scale memory: one Open Thread per file - #28

Merged
acn-ericlaw merged 1 commit into
mainfrom
v4.39.0-merge-scale
Sep 1, 2026
Merged

acn-ericlaw merged 1 commit into
mainfrom
v4.39.0-merge-scale

Conversation

@acn-ericlaw

Copy link
Copy Markdown
Owner

What

v4.39.0 (MINOR) — merge-scale memory: threads as files. Each Open Thread now lives in its own memory/open-threads/thread-<id>.md (filename = the thread's fact id; content = exactly the bullet block that previously sat in continuity; the directory is the index, like sessions/). last_session is dropped from Project State (derived from the newest session log + its **Agent:** header). memory/archive/*.md union-merge via .gitattributes. Reviews run serialized (REVIEW.md). All three built-in script pairs treat thread files as fact surfaces, with new lint checks [thread-file], [duplicate-id], and [duplicate-state-key] (absorbed from #27 — credit: Roland Heusser). tests/test_thread_layout_merge.sh pins the merge contract with real git merges. Full lockstep: DECAY/REVIEW/MERGE/schema/ENABLE/MIGRATE, both PROTOCOL copies + bootstrap notes, templates, MANIFEST (new row + 2 semantic steps incl. the mandated protocol-propagation row), UPGRADE rung, CHANGELOG/README, examples annotated, and this repo's own 35 threads migrated (dogfood). Design record: docs/DESIGN-merge-scale.md.

Why

At team scale, continuity.md merge conflicts became a per-merge tax — concentrated in ## Open Threads (multi-line blocks appended and edited at one anchor) and the last_session scalar (bumped by nearly every session). This removes those conflict surfaces structurally, with no merge-time machinery: parallel work on different threads cannot conflict (different files), while both sides editing the same thread still conflicts per-file — the MERGE.md Tier 2 human gate, preserved by design and pinned by a mutation-checked test. The alternative (#27's merge driver) was verified to silently union Tier 2 clashes and winner-pick dateless scalars; its lint backstop and rehearsal-test pattern are absorbed here with credit, and a scalars-only driver stays the pre-scoped follow-up if scalar-bump conflicts persist in the field.

Verification

  • memory-lint: 0 errors, 0 warnings on the migrated live tree, output byte-identical across python/node
  • Suites: memory-lint 67 ×2, refresh-metadata 6 ×2, archive-fact 9 ×2, reconcile 38 ×2, --check-manifest OK (19 semantic rows ≤ 4.39.0)
  • bash tests/test_thread_layout_merge.sh — 4 real-git-merge cases: different-threads clean · same-thread conflicts (the load-bearing one) · archive union keeps both · mutation check (stripping the attribute restores the conflict)
  • bash tests/test_githook_dispatchers.sh — unchanged, passes
  • The closing refresh-metadata run exercised the new in-place thread-file refresh on real data

Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Co-Authored-By: Roland Heusser skofgar@gmail.com

🤖 Generated with Claude Code

Threads move out of continuity.md into memory/open-threads/thread-<id>.md
(filename = fact id; the directory is the index), last_session is dropped
(derived from the newest session log), archive files union-merge, reviews
run serialized. All three built-in script pairs treat thread files as fact
surfaces; new lint checks [thread-file], [duplicate-id], and
[duplicate-state-key] (absorbed from PR #27). Contract test pins the merge
behavior with real git merges, incl. the preserved same-thread conflict
(the Tier 2 human gate) and a mutation check. Dogfooded: this repo's own
35 threads migrated. Design record: docs/DESIGN-merge-scale.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Roland Heusser <skofgar@gmail.com>
@acn-ericlaw
acn-ericlaw merged commit b8fdecf into main Sep 1, 2026
2 checks passed
@acn-ericlaw
acn-ericlaw deleted the v4.39.0-merge-scale branch September 1, 2026 18:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant