Skip to content

perf: reuse bounded Git object sessions#91

Merged
flyingrobots merged 17 commits into
mainfrom
perf/persistent-git-sessions
Jul 19, 2026
Merged

perf: reuse bounded Git object sessions#91
flyingrobots merged 17 commits into
mainfrom
perf/persistent-git-sessions

Conversation

@flyingrobots

Copy link
Copy Markdown
Member

Linked Issue

Design / Proof

What Changed

  • Reuse lazy, serialized, bounded cat-file and mktree sessions behind GitPersistenceAdapter.
  • Batch scoped page/blob writes through one checkpointed fast-import session.
  • Keep individual blob writes one-shot so a pruned object is recreated correctly.
  • Add count-and-byte-bounded immutable metadata/tree caches.
  • Add deterministic, idempotent adapter/store shutdown with operation, stream, idle-retirement, and failed-termination handling.
  • Bound PageService.putBatch() by page count and aggregate bytes before persistence.
  • Preserve legacy structural adapters through optional bulk-write and lifecycle capabilities.

Performance Evidence

Controlled Docker benchmark: Node 22.23.1, Git 2.43.0, Linux arm64, 32 operations x 4096 bytes, median of 3 samples.

Workload Baseline Session/batch Process reduction Wall-time reduction
Repeated reads 225 processes / 288.647 ms 1 process / 50.366 ms 99.6% 82.6%
Blob writes 32 processes / 68.658 ms 1 process / 33.490 ms 96.9% 51.2%

Both paths produced identical object digests. CPU/RSS fields in the witness measure the Node worker only; downstream git-warp gates must add process-tree CPU and larger-than-memory RSS evidence.

Validation

pnpm run release:verify
14/14 gates passed
6,814 tests observed

Node unit: 2,079 passed, 2 skipped
Bun unit: 2,078 passed, 3 skipped
Deno unit: 2,069 passed, 12 skipped
Node/Bun/Deno integration: 196 passed on each runtime
Public type compatibility: passed
Examples: passed
npm pack --dry-run: passed
JSR publish --dry-run: passed

The three contention-sensitive suites were additionally run together five times: 575/575 assertions passed.

Self-Review

  • Graft structural review: 34 changed files; no removed exports or breaking signature changes.
  • Export review: additive/optional surface only; internal session and tree-codec classes are not package root exports.
  • Strict manual lifecycle/error-path review completed; recovery generations, teardown barriers, aggregate failures, idle retirement, stream completion, and process poisoning are covered by focused tests.
  • git diff --check origin/main...HEAD: passed.
  • Current finding count: 0 critical, 0 high, 0 medium, 0 low.

Release Impact

  • Changelog updated.
  • Public docs updated.
  • Issue labels and v6.5.2 milestone reflect the intended release.
  • Publish v6.5.2 after this PR merges.

@coderabbitai

coderabbitai Bot commented Jul 19, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 31 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9ff0842e-847e-4592-9967-0ba3af3bfa56

📥 Commits

Reviewing files that changed from the base of the PR and between fa61b19 and efce787.

📒 Files selected for processing (9)
  • BEARING.md
  • README.md
  • ROADMAP.md
  • STATUS.md
  • docs/API.md
  • docs/design/0052-persistent-git-object-sessions/persistent-git-object-sessions.md
  • scripts/diagnostics/createCountingGitPlumbing.js
  • scripts/diagnostics/measure-git-object-sessions.js
  • test/integration/bundle-reference-performance.test.js
📝 Walkthrough

Walkthrough

The PR adds bounded page batching, persistent Git object sessions, typed tree decoding, and explicit asynchronous resource closure. It updates public contracts, adapter lifecycle handling, diagnostics, integration coverage, API documentation, design records, and release-state documentation.

Changes

Persistent Git sessions and bounded storage

Layer / File(s) Summary
Public contracts and page batching
index.d.ts, index.js, src/domain/services/PageService.js, src/ports/*, src/types/ambient.d.ts, test/unit/*, test/types/*
Adds pages.putBatch(), batch limits, batch blob writes, facade and adapter closure, async disposal, and related type and unit-test coverage.
Session pooling and adapter persistence
src/infrastructure/adapters/GitObjectSessionPool.js, src/infrastructure/adapters/GitPersistenceAdapter.js, test/unit/infrastructure/adapters/*
Adds reusable cat-file, mktree, and fast-import sessions with retries, retirement barriers, idle cleanup, bounded tree caching, streaming preservation, and deterministic shutdown.
Tree decoding and plumbing type support
src/infrastructure/codecs/*, src/types/ambient.d.ts, test/unit/infrastructure/codecs/*
Adds typed decoding for canonical Git tree bytes and mktree entries, including SHA-1/SHA-256 validation and immutable results.
Measurement and integration validation
scripts/diagnostics/*, test/integration/*
Adds session-versus-fallback measurements and integration checks for process reuse, batch writes, pruning behavior, semantic equality, and cleanup.
Design, API, and release records
docs/*, ARCHITECTURE.md, GUIDE.md, README.md, CHANGELOG.md, ROADMAP.md, STATUS.md, BEARING.md
Documents lifecycle semantics, batching, session reuse, tree decoding, verification evidence, release status, and measured results.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related issues

Possibly related PRs

  • git-stunts/git-cas#64 — Earlier changes to the adapter’s object metadata read path connect to the new session-based implementation.
  • git-stunts/git-cas#82 — Shares the adapter’s bounded metadata/object caching area.
  • git-stunts/git-cas#63 — Introduced the structured page storage layer extended here with putBatch().

Suggested reviewers: git-stunts

Poem

A rabbit hops through Git’s session queue,
Batching pages in a bounded crew.
Trees decode, streams close tight,
Old refs sleep through the night.
“No objects harmed!” the rabbit sings,
While cleanup tucks away the strings.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: reusing bounded Git object sessions for performance.
Description check ✅ Passed The description covers linked issue, design/proof, validation evidence, and release impact, with only the exact template commands omitted.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@flyingrobots

Copy link
Copy Markdown
Member Author

Self-Code Review: Code-Lawyer Verdict

Severity Count Disposition
Critical 0 None found
High 0 None found
Medium 0 None found
Low 0 None found
Markdown/style 0 git diff --check, Prettier, link/docs tests, and release verifier passed

Evidence reviewed

  • Compared all 34 changed files against origin/main.
  • Graft structural review found no removed exports or breaking signature changes.
  • Verified the new package surface is additive/optional; session-pool and tree-codec implementation classes are not root exports.
  • Audited process/session ownership, typed recovery, generation-safe invalidation, teardown serialization, failed-termination poisoning, stream completion, idle retirement, cache bounds, and aggregate error preservation.
  • Verified real-Git prune/rewrite behavior and identical object digests.
  • Ran pnpm run release:verify: 14/14 gates passed with 6,814 observed tests.
  • Repeated the three contention-sensitive suites five times: 575/575 assertions passed.
  • Confirmed clean worktree, correct Git identity, and a straight 16-commit history over current origin/main.

Verdict: no unresolved review findings. @codex please independently confirm the lifecycle, compatibility, and bounded-memory conclusions.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
test/integration/bundle-reference-performance.test.js (1)

47-84: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Session-wrapper logic duplicates measure-git-object-sessions.js.

countingReader's execute/executeStream/openCatFileSession/openMktreeSession/openFastImportSession counting wrapper mirrors countedPlumbing/sessionOpener in scripts/diagnostics/measure-git-object-sessions.js. Worth sharing to avoid the two copies drifting apart.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/integration/bundle-reference-performance.test.js` around lines 47 - 84,
Reuse the existing shared counting-wrapper implementation from
measure-git-object-sessions.js in countingReader instead of duplicating the
execute, executeStream, and session-opener instrumentation. Preserve the current
operation and session count keys and snapshot behavior while delegating wrapper
construction to the shared helper.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/API.md`:
- Line 3377: Update the RESOURCE_CLOSED description in the API error table to
state that operations are rejected when closure begins or while closure is in
progress, not only after local resources have finished closing; keep the listed
components unchanged.

In
`@docs/design/0052-persistent-git-object-sessions/persistent-git-object-sessions.md`:
- Around line 241-244: Update the compatibility and lifecycle guidance around
close() so it is required whenever operations may remain active or unconsumed,
including fallback readBlobStream() streams and child processes, rather than
only when session-capable operations are used. Preserve the legacy compatibility
statement while making explicit close the normal cleanup contract for all such
operations.
- Around line 146-150: Update the public putBatch contract to include the
per-page maxBytes?: number option alongside source, matching the behavior
documented in docs/API.md and enforced by PageService.

In `@README.md`:
- Around line 39-42: Update the “Bounded Git Process Reuse” bullet in README.md
to clarify that payload streams are not buffered while batch inputs are
collected and validated within the explicitly bounded page batch envelope. Keep
the existing claims about immutable metadata, tree reads, typed Git sessions,
write amortization, and content identity accurate.

In `@scripts/diagnostics/measure-git-object-sessions.js`:
- Around line 201-230: Reuse the existing countingReader wrapper from the
integration test for countedPlumbing instead of maintaining duplicate execute,
executeStream, and session-opener counting logic in countedPlumbing and
sessionOpener. Preserve the current operation and session count keys, and remove
the redundant local wrapper implementation, including its operationOf dependency
if no longer needed.
- Around line 141-153: Ensure the ContentAddressableStore is always closed when
operations fail in measureReads and the corresponding measureWrites paths. Wrap
the timed operation bodies that call getMemberReference, putBatch, or
putIndividually in try/finally and invoke cas.close() from the finally block,
matching the cleanup pattern used by buildReadFixture.

In `@STATUS.md`:
- Around line 133-134: The documentation currently presents design 0052 as
landed rather than active. Update STATUS.md lines 133-134 to say “latest active
design record,” revise BEARING.md lines 129-138 to describe 0052 as the current
design under review, and change the ROADMAP.md heading at lines 51-55 so it does
not imply completion; keep terminology consistent with an active/current design.

In `@test/integration/bundle-reference-performance.test.js`:
- Around line 190-214: Wrap the CAS usage in both “real-Git persistent object
session process count” and “scoped bulk write process count” tests with
try/finally blocks, placing the existing assertions in the try section and
closing fallback/persistent or individual/batched CAS instances in finally so
cleanup runs when any assertion fails.

---

Outside diff comments:
In `@test/integration/bundle-reference-performance.test.js`:
- Around line 47-84: Reuse the existing shared counting-wrapper implementation
from measure-git-object-sessions.js in countingReader instead of duplicating the
execute, executeStream, and session-opener instrumentation. Preserve the current
operation and session count keys and snapshot behavior while delegating wrapper
construction to the shared helper.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 58d1af8b-77d3-4f09-a73b-abafba6cde16

📥 Commits

Reviewing files that changed from the base of the PR and between 12fd672 and fa61b19.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (33)
  • ARCHITECTURE.md
  • BEARING.md
  • CHANGELOG.md
  • GUIDE.md
  • README.md
  • ROADMAP.md
  • STATUS.md
  • docs/API.md
  • docs/design/0052-persistent-git-object-sessions/persistent-git-object-sessions.md
  • docs/design/0052-persistent-git-object-sessions/witness/git-object-sessions.json
  • docs/design/0052-persistent-git-object-sessions/witness/verification.md
  • docs/design/README.md
  • index.d.ts
  • index.js
  • package.json
  • scripts/diagnostics/measure-git-object-sessions.js
  • src/domain/errors/Codes.js
  • src/domain/services/PageService.js
  • src/infrastructure/adapters/GitObjectSessionPool.js
  • src/infrastructure/adapters/GitPersistenceAdapter.js
  • src/infrastructure/codecs/GitTreeObjectCodec.js
  • src/ports/GitPersistencePort.js
  • src/types/ambient.d.ts
  • test/integration/bundle-reference-performance.test.js
  • test/types/public-api-compatibility.ts
  • test/unit/docs/release-state.test.js
  • test/unit/domain/services/PageService.test.js
  • test/unit/facade/ContentAddressableStore.application-storage.test.js
  • test/unit/facade/ContentAddressableStore.lifecycle.test.js
  • test/unit/infrastructure/adapters/GitPersistenceAdapter.sessions.test.js
  • test/unit/infrastructure/codecs/GitTreeObjectCodec.test.js
  • test/unit/ports/GitPersistencePort.test.js
  • test/unit/types/declaration-accuracy.test.js
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: test-docker (node)
  • GitHub Check: test-docker (deno)
  • GitHub Check: test-docker (bun)
🧰 Additional context used
📓 Path-based instructions (8)
docs/design/**

📄 CodeRabbit inference engine (AGENTS.md)

Use docs/design/ directory for durable design contracts and proof plans

Files:

  • docs/design/README.md
  • docs/design/0052-persistent-git-object-sessions/witness/git-object-sessions.json
  • docs/design/0052-persistent-git-object-sessions/persistent-git-object-sessions.md
  • docs/design/0052-persistent-git-object-sessions/witness/verification.md
CHANGELOG.md

📄 CodeRabbit inference engine (AGENTS.md)

Use CHANGELOG.md to record the historical truth of merged behavior

Files:

  • CHANGELOG.md
ROADMAP.md

📄 CodeRabbit inference engine (AGENTS.md)

Use ROADMAP.md as a signpost to the GitHub release tracker

Files:

  • ROADMAP.md
STATUS.md

📄 CodeRabbit inference engine (AGENTS.md)

Use STATUS.md as a compact snapshot of release and runtime truth

Files:

  • STATUS.md
BEARING.md

📄 CodeRabbit inference engine (AGENTS.md)

Use BEARING.md to document current execution gravity and active tensions

Files:

  • BEARING.md
ARCHITECTURE.md

📄 CodeRabbit inference engine (AGENTS.md)

Use ARCHITECTURE.md as the authoritative structural reference (Facade, Domain, Ports)

Files:

  • ARCHITECTURE.md
README.md

📄 CodeRabbit inference engine (AGENTS.md)

Use README.md as the public front door, core value prop, and quick start documentation

Files:

  • README.md
GUIDE.md

📄 CodeRabbit inference engine (AGENTS.md)

Use GUIDE.md for orientation and productive-fast path documentation

Files:

  • GUIDE.md
🧠 Learnings (3)
📚 Learning: 2026-02-28T19:21:13.982Z
Learnt from: flyingrobots
Repo: git-stunts/git-cas PR: 15
File: test/unit/domain/services/CasService.envelope.test.js:326-330
Timestamp: 2026-02-28T19:21:13.982Z
Learning: In fuzz tests for cryptographic operations, use a seeded PRNG (e.g., xorshift32) for control-flow variables such as plaintext size selection and recipient index selection to ensure reproducibility. Continue to use randomBytes() for cryptographic keys and nonces to preserve realistic randomness and avoid security anti-patterns. This guideline applies to test files that perform fuzz testing of crypto logic; implement a consistent seed setup (e.g., fixed seed in test initialization) and document the rationale to enable deterministic replays across runs.

Applied to files:

  • test/unit/facade/ContentAddressableStore.application-storage.test.js
  • test/unit/ports/GitPersistencePort.test.js
  • test/unit/infrastructure/codecs/GitTreeObjectCodec.test.js
  • test/unit/docs/release-state.test.js
  • test/unit/types/declaration-accuracy.test.js
  • test/unit/domain/services/PageService.test.js
  • test/unit/facade/ContentAddressableStore.lifecycle.test.js
  • test/integration/bundle-reference-performance.test.js
  • test/unit/infrastructure/adapters/GitPersistenceAdapter.sessions.test.js
📚 Learning: 2026-07-13T17:00:46.222Z
Learnt from: flyingrobots
Repo: git-stunts/git-cas PR: 65
File: src/domain/helpers/isCanonicalCollectionKey.js:21-35
Timestamp: 2026-07-13T17:00:46.222Z
Learning: In git-stunts/git-cas, the codebase is intended to run on multiple JavaScript runtimes (Node, Bun, and Deno), not just Node. During code review, don’t suggest replacing existing portable helper logic with newer Node-only built-ins (e.g., Node 20+ APIs like `String.prototype.isWellFormed()`) unless the change preserves Bun/Deno compatibility (via portable/polyfill implementations or safe runtime gating). If a file includes manual implementations (such as `src/domain/helpers/isCanonicalCollectionKey.js`), treat them as intentional to avoid requiring a higher host built-in baseline.

Applied to files:

  • src/domain/errors/Codes.js
  • src/ports/GitPersistencePort.js
  • src/infrastructure/codecs/GitTreeObjectCodec.js
  • src/infrastructure/adapters/GitObjectSessionPool.js
  • src/domain/services/PageService.js
  • src/infrastructure/adapters/GitPersistenceAdapter.js
📚 Learning: 2026-03-30T19:53:48.000Z
Learnt from: flyingrobots
Repo: git-stunts/git-cas PR: 29
File: docs/design/TR-010-planning-index-consistency-review.md:121-131
Timestamp: 2026-03-30T19:53:48.000Z
Learning: In this repo, CHANGELOG.md entries should be user-facing and descriptive (bullet points) rather than cycle-ID headings (e.g., use a phrase like “Planning-index consistency review” instead of a “TR-010 — …” heading). When searching the changelog, don’t rely on grepping for cycle IDs (e.g., “TR-010”) because it may cause false negatives; search for the descriptive keywords/phrases from the bullet entries instead.

Applied to files:

  • CHANGELOG.md
🪛 ast-grep (0.44.1)
scripts/diagnostics/measure-git-object-sessions.js

[warning] 1-1: Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync, fork } from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process)

🪛 LanguageTool
docs/design/0052-persistent-git-object-sessions/persistent-git-object-sessions.md

[style] ~397-~397: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...paths against one generated fixture. 3. Run full unit and integration suites. 4. Ru...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~398-~398: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...un full unit and integration suites. 4. Run Node, Bun, and Deno platform validation...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~399-~399: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ..., Bun, and Deno platform validation. 5. Run ESLint, formatting check, declaration a...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~410-~410: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...e? - Did close release every session? - Did large streaming behavior remain bounded...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

docs/design/0052-persistent-git-object-sessions/witness/verification.md

[grammar] ~93-~93: Ensure spelling is correct
Context: ... Idle retirement is awaited by explicit close and its failures remain visible after f...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🔇 Additional comments (39)
test/unit/docs/release-state.test.js (1)

131-132: LGTM!

ARCHITECTURE.md (1)

150-151: LGTM!

Also applies to: 334-337, 362-363

BEARING.md (1)

17-22: LGTM!

Also applies to: 70-73

CHANGELOG.md (1)

10-26: LGTM!

GUIDE.md (1)

102-108: LGTM!

Also applies to: 145-147, 170-175

README.md (1)

91-97: LGTM!

Also applies to: 147-149

ROADMAP.md (1)

42-42: LGTM!

STATUS.md (1)

124-132: LGTM!

docs/API.md (1)

185-199: LGTM!

Also applies to: 1022-1035, 1054-1061, 3378-3384

docs/design/0052-persistent-git-object-sessions/persistent-git-object-sessions.md (1)

1-145: LGTM!

Also applies to: 151-240, 245-452

docs/design/0052-persistent-git-object-sessions/witness/git-object-sessions.json (1)

1-90: LGTM!

docs/design/0052-persistent-git-object-sessions/witness/verification.md (1)

1-184: LGTM!

docs/design/README.md (1)

14-14: LGTM!

scripts/diagnostics/measure-git-object-sessions.js (1)

1-19: LGTM!

Also applies to: 27-68, 70-139, 180-199, 239-322, 324-342

test/integration/bundle-reference-performance.test.js (1)

121-122: LGTM!

Also applies to: 132-140, 163-163, 185-186, 242-268

src/infrastructure/adapters/GitObjectSessionPool.js (2)

72-158: LGTM!


39-53: 🩺 Stability & Availability

Shared catFile sessions are already serialized.

The pool intentionally reuses one catFile session per protocol, and the session tests cover concurrent bounded reads plus recovery after buffer-limit aborts.

			> Likely an incorrect or invalid review comment.
src/infrastructure/adapters/GitPersistenceAdapter.js (2)

160-178: LGTM!


499-533: LGTM!

test/unit/infrastructure/adapters/GitPersistenceAdapter.sessions.test.js (1)

65-770: LGTM!

src/infrastructure/codecs/GitTreeObjectCodec.js (2)

21-61: LGTM!


79-89: 🎯 Functional Correctness

parseMktreeLines matches the current write-path contract

Every tree producer in the codebase already emits the padded 040000 form; the 40000 cases are read-path fixtures/tests only. This doesn’t introduce a new accepted input regression.

			> Likely an incorrect or invalid review comment.
test/unit/infrastructure/codecs/GitTreeObjectCodec.test.js (1)

8-70: LGTM!

index.d.ts (2)

515-516: LGTM!

Also applies to: 571-581, 1467-1471


533-534: 🎯 Functional Correctness

No compile issue here. The repo has no tsconfig.json or TypeScript dependency, and these Symbol.asyncDispose declarations are intentionally covered by the declaration-accuracy tests. This doesn’t point to a compile break in this codebase.

			> Likely an incorrect or invalid review comment.
index.js (1)

218-218: LGTM!

Also applies to: 265-266, 275-275, 615-645

src/domain/services/PageService.js (2)

12-13: LGTM!

Also applies to: 69-124, 221-268, 277-284, 301-315


277-283: No action needed PAGE_BATCH_LIMIT is already defined in src/domain/errors/Codes.js, so this comment does not apply.

			> Likely an incorrect or invalid review comment.
test/types/public-api-compatibility.ts (1)

2-8: LGTM!

Also applies to: 10-48

test/unit/domain/services/PageService.test.js (2)

83-106: LGTM!

Also applies to: 108-146


86-86: No issue: MemoryPersistenceAdapter inherits writeBlobs from GitPersistencePort, so vi.spyOn(persistence, 'writeBlobs') is valid.

			> Likely an incorrect or invalid review comment.
test/unit/facade/ContentAddressableStore.application-storage.test.js (1)

33-33: LGTM!

package.json (1)

106-106: Confirm @git-stunts/plumbing@^3.2.0 exposes the session methods used here.

src/domain/errors/Codes.js (1)

58-58: LGTM!

Also applies to: 69-69

src/ports/GitPersistencePort.js (1)

15-27: LGTM!

Also applies to: 104-115

src/types/ambient.d.ts (1)

12-59: LGTM!

Also applies to: 74-76

test/unit/facade/ContentAddressableStore.lifecycle.test.js (1)

1-33: LGTM!

test/unit/ports/GitPersistencePort.test.js (1)

11-13: LGTM!

test/unit/types/declaration-accuracy.test.js (1)

92-92: LGTM!

Also applies to: 128-142

Comment thread docs/API.md Outdated
Comment thread docs/design/0052-persistent-git-object-sessions/persistent-git-object-sessions.md Outdated
Comment thread README.md Outdated
Comment thread scripts/diagnostics/measure-git-object-sessions.js
Comment thread scripts/diagnostics/measure-git-object-sessions.js Outdated
Comment thread STATUS.md Outdated
Comment thread test/integration/bundle-reference-performance.test.js
@flyingrobots
flyingrobots merged commit 4ce37ad into main Jul 19, 2026
6 checks passed
@flyingrobots
flyingrobots deleted the perf/persistent-git-sessions branch July 19, 2026 13: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