Skip to content

Unify checkpoints with retained materializations - #780

Merged
flyingrobots merged 8 commits into
mainfrom
v19/materialization-checkpoints
Jul 25, 2026
Merged

Unify checkpoints with retained materializations#780
flyingrobots merged 8 commits into
mainfrom
v19/materialization-checkpoints

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Jul 25, 2026

Copy link
Copy Markdown
Member

Summary

  • retain bounded page-backed logical and property indexes as exact git-cas roots on materializations
  • publish current schema-5 checkpoint commits directly from the already-retained materialization bundle instead of constructing a duplicate checkpoint artifact tree
  • load checkpoint state, provenance, and bounded index roots from that canonical materialization while preserving the released legacy Git-tree reader
  • remove upgrade support for checkpoint schemas 2 and 3; keep the schema-4 and released schema-5 compatibility bridge and rebuild derived indexes from authoritative state

Why

Checkpoint creation still duplicated whole-state and index assembly after materialization. That increased CPU, memory residency, object writes, and the number of storage representations that had to remain mutually consistent. The v19 path now gives runtime reads, checkpoint recovery, provenance, and bounded logical/property reads one retained git-cas representation with explicit integrity checks.

User impact

Current checkpoints are cheaper to create and reopen, and their bounded-read roots are exact page-backed references rather than copied checkpoint assets. Old released Git-tree checkpoints remain readable. Very old schema-2/schema-3 checkpoint migration is intentionally no longer supported in v19.

Validation

  • repository pre-push firewall: all static, documentation, publication-surface, TypeScript, consumer, and CAS-ownership gates passed
  • stable suite: 592 files, 7,140 tests total (7,138 passed, 2 skipped)
  • coverage suite: 614 files, 7,318 tests total (7,316 passed, 2 skipped), 92.95% line coverage
  • GitHub Node, Bun, Deno, release preflight, Semgrep, quarantine, and coverage checks passed
  • CodeRabbit approved with zero unresolved review threads
  • git diff --check

Part of #739.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This change replaces new legacy checkpoint index-tree publication with exact retained Git-CAS materializations, adds bundle-backed index reads, stores replay and provenance roots, updates schema migration to v19 materializations, and preserves legacy checkpoint loading through compatibility paths.

Changes

Checkpoint materialization lifecycle

Layer / File(s) Summary
Materialization contracts and checkpoint envelopes
src/ports/*, src/domain/materialization/*, src/domain/services/state/*
Checkpoint records and bases now carry materialization and bundle-root handles; shard limits and unavailable-root helpers are added.
Runtime retention and index-root production
src/domain/RuntimeHost.ts, src/domain/services/controllers/*
Checkpoint and session flows retain exact materializations, prepare property and roaring-index roots, and propagate retained roots through resume paths.
Git-CAS snapshot and checkpoint persistence
src/infrastructure/adapters/*
Git-CAS adapters publish and load exact materialization bundles, including replay, provenance, state, and retained index roots.
Bounded materialized index reads
src/domain/services/index/*, src/domain/services/optic/*
Readers support bundle-root shard references and bounded exact-path reads while retaining legacy asset handling.
Schema migration and lifecycle validation
scripts/migrations/*, test/unit/scripts/*, test/unit/infrastructure/*
Schema upgrades retain migrated materializations, require crypto for writes, and validate materialization publication, loading, and mismatch behavior.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related issues

Possibly related PRs

Poem

A rabbit pins a bundle tight,
With roots that glow in CAS moonlight.
Old tree paths still know the way,
New shards stream through night and day.
Replay and provenance hop in line—
Checkpoints bloom, precise and fine.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.90% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning Missing the required Issue section and the ADR checks checklist from the repository template. Add an Issue section linking a same-repo issue (e.g. Fixes #739) and include the ADR checks checklist with the required confirmations.
✅ Passed checks (3 passed)
Check name Status Explanation
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.
Title check ✅ Passed The title is concise and accurately summarizes the main checkpoint/materialization unification change.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@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: 10

Caution

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

⚠️ Outside diff range comments (2)
scripts/migrations/v17.0.0/checkpoint-schema-upgrade.ts (1)

152-172: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Redundant full-state hash computation during migration.

computeStateHash(payload.state, ...) is computed here to build the retained materialization, but createCheckpointEnvelope (via checkpointCreate.ts) recomputes the same hash internally since no stateHashService is passed through. For large migrated states this hashes the full state twice per checkpoint.

♻️ Proposed fix: pass the already-computed hash through `stateHashService`
   const upgradedCheckpointSha = await createCheckpointEnvelope({
     checkpointStore,
     graphName: options.graphName,
     state: payload.state,
     frontier: payload.frontier,
     parents: (await options.persistence.getNodeInfo(previousCheckpointSha)).parents,
     expectedCheckpointSha: previousCheckpointSha,
     codec,
     crypto,
     materialization,
+    stateHashService: { compute: async () => stateHash },
     ...(payload.provenanceIndex === undefined ? {} : { provenanceIndex: payload.provenanceIndex }),
   });
🤖 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 `@scripts/migrations/v17.0.0/checkpoint-schema-upgrade.ts` around lines 152 -
172, Update the migration flow around retainMigratedCheckpoint and
createCheckpointEnvelope to pass the already-computed stateHash through the
stateHashService option, ensuring checkpointCreate.ts reuses it instead of
recomputing the payload.state hash. Preserve the existing
retained-materialization behavior and hash value.
src/infrastructure/adapters/GitCasMaterializationWorkspace.ts (1)

161-181: 🗄️ Data Integrity & Integration | 🔵 Trivial | 🏗️ Heavy lift

Derive workspace root members from canonical root metadata.

These stages write retained roots as roots/<name>, while MaterializationRoots and the bundle decoder both derive members from the domain-owned MATERIALIZATION_ROOT_NAMES. The current list can miss a newly retained root or retain a stale literal again.

🤖 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 `@src/infrastructure/adapters/GitCasMaterializationWorkspace.ts` around lines
161 - 181, Update workspaceMembers and appendWorkspaceRoot to derive root paths
from the canonical MATERIALIZATION_ROOT_NAMES metadata instead of hardcoding
individual root names. Map each canonical root name to the corresponding
MaterializationWorkspaceRoots value, preserving requireRoots validation and
parseRoot handling while ensuring newly added or removed retained roots stay
synchronized.
🤖 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 `@src/domain/services/controllers/CheckpointController.ts`:
- Around line 217-238: Update the _indexStore workspace flow in
CheckpointController so a successful workspace.promote call is followed by
workspace.release before returning. Preserve the existing
releaseWorkspaceAfterFailure cleanup in the catch path and return the promotion
result after successful cleanup.

In `@src/infrastructure/adapters/CborCheckpointStoreAdapter.ts`:
- Around line 300-325: Update _readBundleLayout to use the shared
materializationMismatch(...) helper for both state-hash and live-coordinate
validation failures, removing its duplicated PersistenceError construction.
Relocate or export the helper from the shared publication module so the publish
and load paths use the same error construction and messages.

In `@src/infrastructure/adapters/CheckpointMaterializationPublication.ts`:
- Around line 16-25: Update the validation in
CheckpointMaterializationPublication to compare
materialization.coordinate.frontier() with record.frontier as order-independent
maps, and throw materializationMismatch when they differ. Preserve the existing
stateHash and live-coordinate ceiling checks.

In `@src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts`:
- Around line 63-78: Update the MaterializationRoots domain object to expose a
withRoot(name, root) method that returns a copy with only the named root
replaced while preserving all other roots. Refactor replaceProvenanceSupportRoot
and the analogous replaceReplayBasisRoot implementation to delegate to this
method instead of rebuilding MaterializationRoots with every field.

In `@src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts`:
- Line 26: Extract the shared 1024 * 1024 descriptor size bound into a common
exported constant, then update GitCasMaterializationStoreAdapter,
GitCasMaterializationSnapshotReader, and
GitCasMaterializationCacheDiagnosticsAdapter to import and use it for their
descriptor maxBytes values. Remove the duplicated local definitions while
preserving the existing limit.

In `@test/helpers/MemoryRuntimeStorageAdapter.ts`:
- Around line 153-178: Extract the repeated candidate-normalization logic from
commitNodeWithTree, writeBlob, and writeTree into a shared helper that accepts
the history result and corresponding fallback operation, returning the candidate
when it is a Git object ID and otherwise invoking the fallback. Update all three
wrappers to use this helper while preserving commit publication behavior.

In `@test/unit/domain/services/controllers/CheckpointController.test.ts`:
- Around line 247-277: Extend the checkpoint test around createCheckpoint to
initialize host['_indexStore'] and mock the workspace lifecycle used by
_retainCheckpointMaterialization, including openWorkspace,
prepareMaterializationIndexRoots, promote, and release. Assert the index-store
branch is selected, the retained materialization is published, and
workspace.release() is called; keep the existing no-rebuild assertions where
applicable.

In `@test/unit/infrastructure/adapters/CborCheckpointStoreAdapter.test.ts`:
- Around line 263-290: Add a load-path test alongside the existing publish
mismatch cases that commits checkpoint metadata with a state-hash or
live-coordinate mismatch over an otherwise valid bundle, then loads it through
the checkpoint store and asserts rejection with code
E_CHECKPOINT_MATERIALIZATION_MISMATCH. Exercise the _readBundleLayout validation
rather than publishCheckpoint’s requireCheckpointMaterialization guard.
- Around line 219-230: Update the test around record() and loadBasis() so
record() exposes the logical and property root handles it writes, then assert
basis.indexRoot and basis.propertyRoot equal those exact handle strings rather
than only checking non-null values. Preserve the existing empty
indexShardHandles and frontier assertions.

In `@test/unit/scripts/checkpoint-schema-upgrade.test.ts`:
- Around line 401-437: The unavailable-roots materialization setup is duplicated
across the tests. In test/unit/scripts/checkpoint-schema-upgrade.test.ts lines
401-437, extract the MaterializationCoordinate, all-unavailable
MaterializationRoots, and materializationStore.retain logic from
createCurrentCheckpoint into a shared test/helpers factory accepting the store,
frontier, state, crypto, and codec; in
test/unit/scripts/v16-to-v17-upgrade.test.ts lines 82-109, replace the inline
setup with that helper and preserve the existing checkpoint behavior.

---

Outside diff comments:
In `@scripts/migrations/v17.0.0/checkpoint-schema-upgrade.ts`:
- Around line 152-172: Update the migration flow around retainMigratedCheckpoint
and createCheckpointEnvelope to pass the already-computed stateHash through the
stateHashService option, ensuring checkpointCreate.ts reuses it instead of
recomputing the payload.state hash. Preserve the existing
retained-materialization behavior and hash value.

In `@src/infrastructure/adapters/GitCasMaterializationWorkspace.ts`:
- Around line 161-181: Update workspaceMembers and appendWorkspaceRoot to derive
root paths from the canonical MATERIALIZATION_ROOT_NAMES metadata instead of
hardcoding individual root names. Map each canonical root name to the
corresponding MaterializationWorkspaceRoots value, preserving requireRoots
validation and parseRoot handling while ensuring newly added or removed retained
roots stay synchronized.
🪄 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 Plus

Run ID: a0911340-dff4-46f7-9240-3f9d57a186a6

📥 Commits

Reviewing files that changed from the base of the PR and between 9d43af2 and 8d2ab28.

📒 Files selected for processing (53)
  • CHANGELOG.md
  • scripts/migrations/v17.0.0/CheckpointMaterializationMigration.ts
  • scripts/migrations/v17.0.0/checkpoint-schema-upgrade.ts
  • scripts/migrations/v17.0.0/openCheckpointMigrationStore.ts
  • src/domain/RuntimeHost.ts
  • src/domain/materialization/MaterializationIndexProfile.ts
  • src/domain/materialization/UnavailableMaterializationRoots.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/controllers/MaterializationIndexRoots.ts
  • src/domain/services/controllers/MaterializationRetention.ts
  • src/domain/services/controllers/MaterializeController.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
  • src/domain/services/index/LogicalIndexReader.ts
  • src/domain/services/index/PropertyIndexReader.ts
  • src/domain/services/optic/CheckpointShardFactReader.ts
  • src/domain/services/optic/CheckpointTailBasisLoader.ts
  • src/domain/services/optic/CheckpointTailBasisVerifier.ts
  • src/domain/services/state/checkpointCreate.ts
  • src/domain/services/state/checkpointLoad.ts
  • src/infrastructure/adapters/CborCheckpointStoreAdapter.ts
  • src/infrastructure/adapters/CborIndexStoreAdapter.ts
  • src/infrastructure/adapters/CheckpointMaterializationPublication.ts
  • src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts
  • src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts
  • src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreValidation.ts
  • src/infrastructure/adapters/GitCasMaterializationWorkspace.ts
  • src/infrastructure/adapters/GitCasRepositoryAdapter.ts
  • src/ports/CheckpointStorePort.ts
  • src/ports/IndexStorePort.ts
  • src/ports/MaterializationWorkspacePort.ts
  • test/helpers/InMemoryCheckpointStore.ts
  • test/helpers/MemoryRuntimeStorageAdapter.ts
  • test/helpers/MockIndexStorage.ts
  • test/helpers/WarpGraphMockPersistence.ts
  • test/unit/domain/RuntimeHost.snapshotCache.test.ts
  • test/unit/domain/WarpGraph.checkpoint.test.ts
  • test/unit/domain/materialization/MaterializationIndexProfile.test.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • test/unit/domain/services/controllers/MaterializeController.propertyRootRetention.test.ts
  • test/unit/domain/services/controllers/MaterializeController.stateSession.test.ts
  • test/unit/domain/services/controllers/MaterializeController.test.ts
  • test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts
  • test/unit/domain/services/optic/CheckpointTailBasisVerifier.test.ts
  • test/unit/domain/services/optic/CheckpointTailReadIdentityBuilder.test.ts
  • test/unit/domain/warp/hydrateCheckpointIndex.regression.test.ts
  • test/unit/infrastructure/CborIndexStoreAdapter.test.ts
  • test/unit/infrastructure/adapters/CborCheckpointStoreAdapter.test.ts
  • test/unit/ports/CheckpointStorePort.test.ts
  • test/unit/ports/IndexStorePort.test.ts
  • test/unit/scripts/checkpoint-schema-upgrade.test.ts
  • test/unit/scripts/v16-to-v17-upgrade.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: test-node (22)
  • GitHub Check: coverage-threshold
  • GitHub Check: preflight
🧰 Additional context used
📓 Path-based instructions (5)
src/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

src/**/*.{ts,tsx,js,jsx}: Do not introduce any, as any, as unknown as, unknown (outside adapters), Record<string, unknown> (outside adapters), *Like placeholder types, JSON.parse/JSON.stringify (outside adapters), fetch (outside adapters), process.env (outside adapters), @ts-ignore, or z.any() in core code; use validated boundary models and ports instead.
Use constructor-injected ports for external capabilities; do not rely on ambient dependencies for I/O, clocks, persistence, or entropy.
Do not create utils.ts, helpers.ts, misc.ts, or common.ts; name files after the actual concept they model.
Prefer one file per class, type, or object; if a file accumulates peer concepts, split it.
Keep helper corridors, fake shape trust, transitional duplication, and compile-time theater out of the codebase; runtime-honest TypeScript must reflect actual behavior.
No enum usage; prefer runtime-backed domain forms and unions.
Do not use boolean trap parameters; prefer named option objects or separate methods.
Avoid magic strings or numbers when a named constant should exist.
Keep domain bytes as Uint8Array; Buffer belongs in infrastructure adapters.

Files:

  • src/infrastructure/adapters/GitCasRepositoryAdapter.ts
  • src/domain/materialization/UnavailableMaterializationRoots.ts
  • src/domain/materialization/MaterializationIndexProfile.ts
  • src/infrastructure/adapters/GitCasMaterializationWorkspace.ts
  • src/domain/services/index/LogicalIndexReader.ts
  • src/ports/MaterializationWorkspacePort.ts
  • src/domain/services/state/checkpointCreate.ts
  • src/infrastructure/adapters/CheckpointMaterializationPublication.ts
  • src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts
  • src/domain/services/state/checkpointLoad.ts
  • src/domain/services/controllers/MaterializationIndexRoots.ts
  • src/ports/IndexStorePort.ts
  • src/domain/services/controllers/MaterializeController.ts
  • src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts
  • src/domain/RuntimeHost.ts
  • src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts
  • src/domain/services/optic/CheckpointTailBasisVerifier.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreValidation.ts
  • src/ports/CheckpointStorePort.ts
  • src/domain/services/controllers/MaterializationRetention.ts
  • src/domain/services/index/PropertyIndexReader.ts
  • src/domain/services/optic/CheckpointTailBasisLoader.ts
  • src/domain/services/optic/CheckpointShardFactReader.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
  • src/infrastructure/adapters/CborIndexStoreAdapter.ts
  • src/infrastructure/adapters/CborCheckpointStoreAdapter.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,js,jsx}: Do not use direct imports from src/infrastructure/** in src/domain/** or src/ports/**; depend on a port instead.
Do not use direct Node built-ins in src/domain/** or src/ports/**; use a port instead.

Files:

  • src/infrastructure/adapters/GitCasRepositoryAdapter.ts
  • src/domain/materialization/UnavailableMaterializationRoots.ts
  • test/unit/domain/services/optic/CheckpointTailReadIdentityBuilder.test.ts
  • scripts/migrations/v17.0.0/CheckpointMaterializationMigration.ts
  • test/unit/domain/materialization/MaterializationIndexProfile.test.ts
  • src/domain/materialization/MaterializationIndexProfile.ts
  • src/infrastructure/adapters/GitCasMaterializationWorkspace.ts
  • test/unit/domain/warp/hydrateCheckpointIndex.regression.test.ts
  • test/helpers/WarpGraphMockPersistence.ts
  • test/unit/domain/RuntimeHost.snapshotCache.test.ts
  • src/domain/services/index/LogicalIndexReader.ts
  • src/ports/MaterializationWorkspacePort.ts
  • src/domain/services/state/checkpointCreate.ts
  • src/infrastructure/adapters/CheckpointMaterializationPublication.ts
  • test/helpers/MockIndexStorage.ts
  • test/unit/ports/IndexStorePort.test.ts
  • test/helpers/InMemoryCheckpointStore.ts
  • test/unit/domain/services/controllers/MaterializeController.propertyRootRetention.test.ts
  • scripts/migrations/v17.0.0/openCheckpointMigrationStore.ts
  • test/unit/scripts/v16-to-v17-upgrade.test.ts
  • test/unit/domain/services/controllers/MaterializeController.test.ts
  • src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts
  • src/domain/services/state/checkpointLoad.ts
  • test/unit/domain/WarpGraph.checkpoint.test.ts
  • src/domain/services/controllers/MaterializationIndexRoots.ts
  • src/ports/IndexStorePort.ts
  • src/domain/services/controllers/MaterializeController.ts
  • src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts
  • test/unit/domain/services/optic/CheckpointTailBasisVerifier.test.ts
  • src/domain/RuntimeHost.ts
  • src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts
  • src/domain/services/optic/CheckpointTailBasisVerifier.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreValidation.ts
  • src/ports/CheckpointStorePort.ts
  • test/unit/ports/CheckpointStorePort.test.ts
  • src/domain/services/controllers/MaterializationRetention.ts
  • test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts
  • test/helpers/MemoryRuntimeStorageAdapter.ts
  • test/unit/infrastructure/CborIndexStoreAdapter.test.ts
  • src/domain/services/index/PropertyIndexReader.ts
  • test/unit/domain/services/controllers/MaterializeController.stateSession.test.ts
  • src/domain/services/optic/CheckpointTailBasisLoader.ts
  • scripts/migrations/v17.0.0/checkpoint-schema-upgrade.ts
  • test/unit/scripts/checkpoint-schema-upgrade.test.ts
  • src/domain/services/optic/CheckpointShardFactReader.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
  • src/infrastructure/adapters/CborIndexStoreAdapter.ts
  • test/unit/infrastructure/adapters/CborCheckpointStoreAdapter.test.ts
  • src/infrastructure/adapters/CborCheckpointStoreAdapter.ts
src/domain/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

src/domain/**/*.{ts,tsx,js,jsx}: In src/domain/**, do not use Date.now(), new Date(), Date(), performance.now(), Math.random(), crypto.randomUUID(), crypto.getRandomValues(), setTimeout, setInterval, raw new Error(...)/new TypeError(...), or direct imports from Node built-ins; time, entropy, and external capabilities must enter through ports or parameters, and domain errors should extend WarpError.
Construct domain objects only in core when doing so establishes validated runtime truth; do not build infrastructure adapters, host APIs, persistence implementations, wall clocks, or entropy sources inside core.
Prefer discriminated unions and explicit result types instead of boolean-flag bags, and model expected failures as return values rather than exceptions.
src/domain/ must not import host APIs or Node-specific globals; hexagonal architecture boundaries are mandatory.
Domain code must not use the wall clock directly; time must enter through a port or parameter.

Files:

  • src/domain/materialization/UnavailableMaterializationRoots.ts
  • src/domain/materialization/MaterializationIndexProfile.ts
  • src/domain/services/index/LogicalIndexReader.ts
  • src/domain/services/state/checkpointCreate.ts
  • src/domain/services/state/checkpointLoad.ts
  • src/domain/services/controllers/MaterializationIndexRoots.ts
  • src/domain/services/controllers/MaterializeController.ts
  • src/domain/RuntimeHost.ts
  • src/domain/services/optic/CheckpointTailBasisVerifier.ts
  • src/domain/services/controllers/MaterializationRetention.ts
  • src/domain/services/index/PropertyIndexReader.ts
  • src/domain/services/optic/CheckpointTailBasisLoader.ts
  • src/domain/services/optic/CheckpointShardFactReader.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
src/domain/**/!(*.test).{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use explicit domain concepts with validated constructors, Object.freeze, and instanceof dispatch; domain objects should be runtime-backed nouns, not ad hoc shape bags.

Files:

  • src/domain/materialization/UnavailableMaterializationRoots.ts
  • src/domain/materialization/MaterializationIndexProfile.ts
  • src/domain/services/index/LogicalIndexReader.ts
  • src/domain/services/state/checkpointCreate.ts
  • src/domain/services/state/checkpointLoad.ts
  • src/domain/services/controllers/MaterializationIndexRoots.ts
  • src/domain/services/controllers/MaterializeController.ts
  • src/domain/RuntimeHost.ts
  • src/domain/services/optic/CheckpointTailBasisVerifier.ts
  • src/domain/services/controllers/MaterializationRetention.ts
  • src/domain/services/index/PropertyIndexReader.ts
  • src/domain/services/optic/CheckpointTailBasisLoader.ts
  • src/domain/services/optic/CheckpointShardFactReader.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
src/ports/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

In src/ports/**, do not import Node built-ins or src/infrastructure/**; ports must stay abstract and depend only on boundary-safe types.

Files:

  • src/ports/MaterializationWorkspacePort.ts
  • src/ports/IndexStorePort.ts
  • src/ports/CheckpointStorePort.ts
🧠 Learnings (1)
📚 Learning: 2026-03-08T19:50:17.519Z
Learnt from: flyingrobots
Repo: git-stunts/git-warp PR: 65
File: CHANGELOG.md:88-88
Timestamp: 2026-03-08T19:50:17.519Z
Learning: Follow the Keep a Changelog convention for CHANGELOG.md. Allow duplicate subheadings across versions (e.g., '### Added', '### Fixed'). Configure markdownlint MD024 with {"siblings_only": true} to avoid cross-version false positives.

Applied to files:

  • CHANGELOG.md
🔇 Additional comments (67)
test/helpers/MockIndexStorage.ts (1)

10-10: LGTM!

Also applies to: 49-62, 85-98

src/domain/materialization/MaterializationIndexProfile.ts (1)

1-36: LGTM!

src/domain/materialization/UnavailableMaterializationRoots.ts (1)

1-18: LGTM!

src/ports/CheckpointStorePort.ts (1)

7-7: LGTM!

Also applies to: 18-18, 39-40, 50-51

src/ports/IndexStorePort.ts (1)

44-47: LGTM!

Also applies to: 106-109, 120-125

src/ports/MaterializationWorkspacePort.ts (1)

6-14: LGTM!

Also applies to: 16-21

src/domain/services/state/checkpointCreate.ts (1)

13-13: LGTM!

Also applies to: 24-24, 49-57, 77-77

src/domain/services/state/checkpointLoad.ts (1)

22-22: LGTM!

Also applies to: 35-36, 65-66

src/infrastructure/adapters/CheckpointMaterializationPublication.ts (1)

1-15: LGTM!

Also applies to: 29-53, 55-57

test/helpers/InMemoryCheckpointStore.ts (1)

48-49: LGTM!

Also applies to: 124-125

test/unit/ports/CheckpointStorePort.test.ts (1)

31-34: LGTM!

Also applies to: 64-67

test/unit/ports/IndexStorePort.test.ts (1)

17-20: LGTM!

Also applies to: 59-75

test/unit/domain/materialization/MaterializationIndexProfile.test.ts (1)

1-22: LGTM!

CHANGELOG.md (1)

44-48: LGTM!

Also applies to: 113-116

scripts/migrations/v17.0.0/CheckpointMaterializationMigration.ts (1)

9-28: LGTM!

scripts/migrations/v17.0.0/checkpoint-schema-upgrade.ts (1)

30-30: LGTM!

Also applies to: 49-49, 191-198

scripts/migrations/v17.0.0/openCheckpointMigrationStore.ts (1)

6-31: LGTM!

test/unit/domain/WarpGraph.checkpoint.test.ts (1)

366-401: LGTM!

test/unit/domain/RuntimeHost.snapshotCache.test.ts (1)

65-93: LGTM!

test/unit/infrastructure/CborIndexStoreAdapter.test.ts (1)

194-210: LGTM!

Also applies to: 268-279

src/infrastructure/adapters/CborCheckpointStoreAdapter.ts (6)

1-6: LGTM!

Also applies to: 43-50, 62-83


96-127: LGTM!


129-158: LGTM!


164-197: LGTM!


218-244: LGTM!


419-421: LGTM!

src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts (2)

24-61: LGTM!


80-85: LGTM!

src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts (1)

77-90: LGTM!

src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts (2)

63-91: LGTM!


94-113: LGTM!

src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts (3)

69-118: LGTM!


191-207: LGTM!


464-476: LGTM!

src/infrastructure/adapters/GitCasMaterializationStoreValidation.ts (1)

11-26: LGTM!

src/infrastructure/adapters/GitCasRepositoryAdapter.ts (1)

192-192: LGTM!

test/unit/infrastructure/adapters/CborCheckpointStoreAdapter.test.ts (3)

2-92: LGTM!


94-159: LGTM!


365-377: LGTM!

src/infrastructure/adapters/CborIndexStoreAdapter.ts (1)

8-8: LGTM!

Also applies to: 194-212, 231-243, 282-326, 427-439

test/helpers/WarpGraphMockPersistence.ts (1)

11-11: LGTM!

Also applies to: 40-49

src/domain/services/index/LogicalIndexReader.ts (1)

22-22: LGTM!

Also applies to: 109-138

src/domain/services/index/PropertyIndexReader.ts (2)

280-311: LGTM!

Also applies to: 340-353


355-372: 🎯 Functional Correctness

No change needed. decodePropertyShard already defaults its key resolver to computeShardKey, so the root path can pass materializationPropertyShardKey without a signature mismatch.

src/domain/services/optic/CheckpointShardFactReader.ts (1)

16-19: LGTM!

Also applies to: 42-45, 63-70, 86-97, 115-120, 145-157, 183-236, 254-268, 277-292

src/domain/services/optic/CheckpointTailBasisLoader.ts (1)

3-5: LGTM!

Also applies to: 28-31, 56-65, 78-128, 233-249

src/domain/services/optic/CheckpointTailBasisVerifier.ts (1)

43-43: LGTM!

Also applies to: 60-62

test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts (1)

5-5: LGTM!

Also applies to: 23-29, 43-88, 413-416

test/unit/domain/services/optic/CheckpointTailBasisVerifier.test.ts (1)

10-10: LGTM!

Also applies to: 137-148, 171-172

test/unit/domain/services/optic/CheckpointTailReadIdentityBuilder.test.ts (1)

67-70: LGTM!

src/domain/services/controllers/CheckpointController.ts (3)

195-216: Reuse-check for cached retained materialization looks correct.

Reusing h._retainedMaterialization only when stateHash/coordinate match and both bounded roots are non-unavailable (permitting empty) matches how resolvePropertyRoot/resolveIndexRoot treat "existing" roots elsewhere. No issue here.


158-172: LGTM!


38-51: LGTM!

Also applies to: 64-65, 83-84, 308-309

src/domain/RuntimeHost.ts (1)

72-72: LGTM!

Also applies to: 185-188, 267-267, 441-441, 565-565, 911-911

src/domain/services/controllers/MaterializationIndexRoots.ts (2)

29-50: LGTM!

Also applies to: 150-160


70-95: 🎯 Functional Correctness

Return an empty materialization root when there are no retained index shards.

LogicalIndexBuildService always emits at least MetaShard(s), LabelShard, edge shards, and ReceiptShard, so zero shard count is not reachable from the current buildShards path.

			> Likely an incorrect or invalid review comment.
src/domain/services/controllers/MaterializationRetention.ts (2)

71-85: 🚀 Performance & Scalability

Confirm the write-amplification impact of always retaining materializations now.

Previously, a live materialize whose reduction produced no roots (non-session-backed reducer) skipped retention entirely. Now the only skip condition is frontier === null; with a non-null frontier and no session roots, roots falls back to unavailableMaterializationRoots() and materializations.retain(request) still runs. That means every live materialize call on this path now performs a CAS write purely to record stateHash/replayBasis, where before it did none. This looks intentional per the PR's stated goal of unifying checkpoint/live materialization, but please confirm this additional per-materialize I/O cost was accounted for (e.g., in the referenced full-suite/perf validation), since it affects the hot materialize path rather than just checkpoint creation.


3-3: LGTM!

src/domain/services/controllers/MaterializeController.ts (1)

317-323: LGTM!

Also applies to: 415-418

src/domain/services/controllers/MaterializeSessionBridge.ts (1)

117-142: LGTM!

Also applies to: 201-240

test/unit/domain/services/controllers/CheckpointController.test.ts (1)

318-332: LGTM!

test/unit/domain/services/controllers/MaterializeController.propertyRootRetention.test.ts (1)

113-113: LGTM!

Also applies to: 132-138

test/unit/domain/services/controllers/MaterializeController.stateSession.test.ts (1)

550-571: LGTM!

Also applies to: 796-797

test/unit/domain/services/controllers/MaterializeController.test.ts (1)

9-9: LGTM!

Also applies to: 166-166

test/unit/domain/warp/hydrateCheckpointIndex.regression.test.ts (1)

9-9: LGTM!

Also applies to: 58-58

test/helpers/MemoryRuntimeStorageAdapter.ts (2)

76-97: LGTM!


144-197: 🩺 Stability & Availability

No action needed.

The fallback helper is not exercised by the test path using it here, and there’s no path reading back content written through the disconnected fallbackObjects instance.

Comment thread src/domain/services/controllers/CheckpointController.ts
Comment thread src/infrastructure/adapters/CborCheckpointStoreAdapter.ts
Comment thread src/infrastructure/adapters/CheckpointMaterializationPublication.ts
Comment thread src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts Outdated
Comment thread test/helpers/MemoryRuntimeStorageAdapter.ts
Comment thread test/unit/domain/services/controllers/CheckpointController.test.ts
Comment thread test/unit/scripts/checkpoint-schema-upgrade.test.ts

@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: 1

🤖 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 `@test/helpers/MemoryRuntimeStorageAdapter.ts`:
- Around line 169-174: Update writeTree and the associated object-type tracking
in MemoryRuntimeStorageAdapter so every normalized tree OID, including
fallbackObjects.writeTree results, is recorded as type tree. Ensure
readObjectType consults this tracking before defaulting non-publication OIDs to
blob, preserving valid tree types for fixture CAS graphs.
🪄 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 Plus

Run ID: ba6001e9-cf0d-434e-ba19-b7d6856467f5

📥 Commits

Reviewing files that changed from the base of the PR and between 8d2ab28 and 51b60c9.

📒 Files selected for processing (25)
  • src/domain/materialization/MaterializationRoots.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/controllers/MaterializeController.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
  • src/infrastructure/adapters/CborCheckpointStoreAdapter.ts
  • src/infrastructure/adapters/CheckpointMaterializationPublication.ts
  • src/infrastructure/adapters/GitCasMaterializationCacheDiagnosticsAdapter.ts
  • src/infrastructure/adapters/GitCasMaterializationDescriptor.ts
  • src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts
  • src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts
  • src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts
  • test/helpers/MemoryRuntimeStorageAdapter.ts
  • test/helpers/retainUnavailableMaterialization.ts
  • test/integration/api/checkpoint.test.ts
  • test/unit/domain/materialization/MaterializationIdentity.test.ts
  • test/unit/domain/services/LogicalIndexReader.test.ts
  • test/unit/domain/services/PropertyIndex.test.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • test/unit/domain/services/controllers/MaterializeController.stateSession.fixtures.ts
  • test/unit/domain/services/controllers/MaterializeController.stateSession.test.ts
  • test/unit/infrastructure/CborIndexStoreAdapter.test.ts
  • test/unit/infrastructure/adapters/CborCheckpointStoreAdapter.test.ts
  • test/unit/scripts/checkpoint-schema-upgrade.test.ts
  • test/unit/scripts/v16-to-v17-upgrade.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: coverage-threshold
  • GitHub Check: test-node (22)
  • GitHub Check: preflight
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,js,jsx}: Do not use direct imports from src/infrastructure/** in src/domain/** or src/ports/**; depend on a port instead.
Do not use direct Node built-ins in src/domain/** or src/ports/**; use a port instead.

Files:

  • test/helpers/retainUnavailableMaterialization.ts
  • test/unit/domain/materialization/MaterializationIdentity.test.ts
  • src/infrastructure/adapters/GitCasMaterializationDescriptor.ts
  • test/unit/domain/services/LogicalIndexReader.test.ts
  • test/unit/domain/services/PropertyIndex.test.ts
  • src/domain/services/controllers/MaterializeController.ts
  • test/unit/domain/services/controllers/MaterializeController.stateSession.fixtures.ts
  • test/unit/scripts/v16-to-v17-upgrade.test.ts
  • src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts
  • src/infrastructure/adapters/CheckpointMaterializationPublication.ts
  • test/helpers/MemoryRuntimeStorageAdapter.ts
  • src/infrastructure/adapters/GitCasMaterializationCacheDiagnosticsAdapter.ts
  • src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts
  • src/domain/services/controllers/CheckpointController.ts
  • test/unit/scripts/checkpoint-schema-upgrade.test.ts
  • src/domain/materialization/MaterializationRoots.ts
  • test/unit/infrastructure/CborIndexStoreAdapter.test.ts
  • test/integration/api/checkpoint.test.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts
  • test/unit/domain/services/controllers/MaterializeController.stateSession.test.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
  • src/infrastructure/adapters/CborCheckpointStoreAdapter.ts
  • test/unit/infrastructure/adapters/CborCheckpointStoreAdapter.test.ts
src/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

src/**/*.{ts,tsx,js,jsx}: Do not introduce any, as any, as unknown as, unknown (outside adapters), Record<string, unknown> (outside adapters), *Like placeholder types, JSON.parse/JSON.stringify (outside adapters), fetch (outside adapters), process.env (outside adapters), @ts-ignore, or z.any() in core code; use validated boundary models and ports instead.
Use constructor-injected ports for external capabilities; do not rely on ambient dependencies for I/O, clocks, persistence, or entropy.
Do not create utils.ts, helpers.ts, misc.ts, or common.ts; name files after the actual concept they model.
Prefer one file per class, type, or object; if a file accumulates peer concepts, split it.
Keep helper corridors, fake shape trust, transitional duplication, and compile-time theater out of the codebase; runtime-honest TypeScript must reflect actual behavior.
No enum usage; prefer runtime-backed domain forms and unions.
Do not use boolean trap parameters; prefer named option objects or separate methods.
Avoid magic strings or numbers when a named constant should exist.
Keep domain bytes as Uint8Array; Buffer belongs in infrastructure adapters.

Files:

  • src/infrastructure/adapters/GitCasMaterializationDescriptor.ts
  • src/domain/services/controllers/MaterializeController.ts
  • src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts
  • src/infrastructure/adapters/CheckpointMaterializationPublication.ts
  • src/infrastructure/adapters/GitCasMaterializationCacheDiagnosticsAdapter.ts
  • src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts
  • src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/materialization/MaterializationRoots.ts
  • src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
  • src/infrastructure/adapters/CborCheckpointStoreAdapter.ts
src/domain/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

src/domain/**/*.{ts,tsx,js,jsx}: In src/domain/**, do not use Date.now(), new Date(), Date(), performance.now(), Math.random(), crypto.randomUUID(), crypto.getRandomValues(), setTimeout, setInterval, raw new Error(...)/new TypeError(...), or direct imports from Node built-ins; time, entropy, and external capabilities must enter through ports or parameters, and domain errors should extend WarpError.
Construct domain objects only in core when doing so establishes validated runtime truth; do not build infrastructure adapters, host APIs, persistence implementations, wall clocks, or entropy sources inside core.
Prefer discriminated unions and explicit result types instead of boolean-flag bags, and model expected failures as return values rather than exceptions.
src/domain/ must not import host APIs or Node-specific globals; hexagonal architecture boundaries are mandatory.
Domain code must not use the wall clock directly; time must enter through a port or parameter.

Files:

  • src/domain/services/controllers/MaterializeController.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/materialization/MaterializationRoots.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
src/domain/**/!(*.test).{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use explicit domain concepts with validated constructors, Object.freeze, and instanceof dispatch; domain objects should be runtime-backed nouns, not ad hoc shape bags.

Files:

  • src/domain/services/controllers/MaterializeController.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/materialization/MaterializationRoots.ts
  • src/domain/services/controllers/MaterializeSessionBridge.ts
🔇 Additional comments (34)
test/unit/domain/materialization/MaterializationIdentity.test.ts (1)

131-142: LGTM!

Also applies to: 144-149

test/unit/domain/services/LogicalIndexReader.test.ts (1)

160-164: LGTM!

Also applies to: 410-418, 420-425

test/unit/domain/services/PropertyIndex.test.ts (1)

11-11: LGTM!

Also applies to: 102-109

test/unit/domain/services/controllers/CheckpointController.test.ts (1)

53-54: LGTM!

Also applies to: 68-69, 112-116, 213-214, 258-326, 367-381

src/domain/materialization/MaterializationRoots.ts (1)

30-44: LGTM!

Also applies to: 55-67, 86-103, 111-117

test/unit/infrastructure/CborIndexStoreAdapter.test.ts (2)

123-134: LGTM!


418-425: LGTM!

test/unit/scripts/checkpoint-schema-upgrade.test.ts (1)

32-32: LGTM!

Also applies to: 399-421

test/unit/scripts/v16-to-v17-upgrade.test.ts (1)

18-18: LGTM!

Also applies to: 82-87

test/unit/infrastructure/adapters/CborCheckpointStoreAdapter.test.ts (6)

104-173: LGTM!


175-198: LGTM!


200-258: LGTM!


320-327: LGTM!


390-443: LGTM!


445-594: LGTM!

src/domain/services/controllers/CheckpointController.ts (3)

217-241: LGTM!


298-324: LGTM!


195-216: 🗄️ Data Integrity & Integration

No change needed

h._retainedMaterialization is populated by RuntimeHost._onMaterialized(result) via retainedMaterializationFrom(result) after materialization, and is cleared during initialization and set-materialized-state.

src/domain/services/controllers/MaterializeController.ts (1)

318-327: LGTM!

Also applies to: 415-422

src/domain/services/controllers/MaterializeSessionBridge.ts (1)

118-150: LGTM!

Also applies to: 209-227

test/unit/domain/services/controllers/MaterializeController.stateSession.fixtures.ts (1)

1-142: LGTM!

test/unit/domain/services/controllers/MaterializeController.stateSession.test.ts (1)

11-26: LGTM!

Also applies to: 404-427, 449-449, 459-467, 692-693

src/infrastructure/adapters/CborCheckpointStoreAdapter.ts (2)

123-159: LGTM!

Also applies to: 301-324


64-69: 🗄️ Data Integrity & Integration

No change needed. CborCheckpointStoreAdapter constructors already supply crypto, and the test/helper facade shape includes getMemberReference, iterateMemberReferences, and putOrdered.

src/infrastructure/adapters/CheckpointMaterializationPublication.ts (1)

6-32: LGTM!

Also applies to: 60-70

src/infrastructure/adapters/GitCasMaterializationCacheDiagnosticsAdapter.ts (1)

26-42: LGTM!

Also applies to: 164-169

test/helpers/MemoryRuntimeStorageAdapter.ts (1)

87-88: LGTM!

Also applies to: 156-168, 195-200

src/infrastructure/adapters/GitCasMaterializationDescriptor.ts (1)

13-13: LGTM!

src/infrastructure/adapters/GitCasMaterializationProvenanceSupport.ts (1)

8-8: LGTM!

Also applies to: 63-68

src/infrastructure/adapters/GitCasMaterializationReplayBasis.ts (1)

9-9: LGTM!

Also applies to: 77-88, 103-107

src/infrastructure/adapters/GitCasMaterializationSnapshotReader.ts (1)

16-16: LGTM!

Also applies to: 62-90

src/infrastructure/adapters/GitCasMaterializationStoreAdapter.ts (1)

49-49: LGTM!

Also applies to: 87-87, 98-118, 167-224, 449-452

test/integration/api/checkpoint.test.ts (1)

32-64: LGTM!

Also applies to: 88-100, 111-124, 142-184

test/helpers/retainUnavailableMaterialization.ts (1)

1-29: LGTM!

Comment thread test/helpers/MemoryRuntimeStorageAdapter.ts Outdated
@github-actions

Copy link
Copy Markdown

Release Preflight

  • package version: 18.2.1
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If this PR is from a release/* branch and merges to main, Main Push Release Branch Check will run final preflight and create v18.2.1. A maintainer who is a JSR @git-stunts scope member must then dispatch the Release workflow manually.

@github-actions

Copy link
Copy Markdown

Release Preflight

  • package version: 18.2.1
  • prerelease: false
  • npm dist-tag on release: latest
  • npm pack dry-run: passed
  • jsr publish dry-run: passed

If this PR is from a release/* branch and merges to main, Main Push Release Branch Check will run final preflight and create v18.2.1. A maintainer who is a JSR @git-stunts scope member must then dispatch the Release workflow manually.

@flyingrobots
flyingrobots merged commit aed1f05 into main Jul 25, 2026
18 checks passed
@flyingrobots
flyingrobots deleted the v19/materialization-checkpoints branch July 25, 2026 22:27
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