Skip to content

Enforce the v19 public API contract#733

Merged
flyingrobots merged 13 commits into
mainfrom
v19-public-api-boundary
Jul 13, 2026
Merged

Enforce the v19 public API contract#733
flyingrobots merged 13 commits into
mainfrom
v19-public-api-boundary

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Jul 12, 2026

Copy link
Copy Markdown
Member

Summary

  • reduce the package root to openWarp, intent, and reading, with supported public nouns exported as types
  • remove retired browser, legacy, graph-first, patch, worldline, and infrastructure entry points from first-use package surfaces
  • make intent writes and bounded readings receipt-first on the exact five-value ReceiptOutcome axis
  • expose opaque ticks at root while moving formal coordinate capture to @git-stunts/git-warp/advanced
  • stream deterministic bitmap-backed neighborhood pages and preserve exact opaque traversal continuation
  • reuse one checkpoint basis and one bounded tail scan per traversal request without adding a persistent cache
  • enforce root and subpath contracts with TypeScript AST, runtime, consumer, conformance, and publication tests
  • rewrite first-use, migration, and reference documentation around "Write intents. Read timelines. Keep receipts."

Issue

Closes #712

Public runtime values

@git-stunts/git-warp: openWarp, intent, reading
@git-stunts/git-warp/storage: GitStorageAdapter, MemoryStorageAdapter
@git-stunts/git-warp/advanced: captureCoordinate, Coordinate, Optic
@git-stunts/git-warp/diagnostics: inspectReceipt

Test plan

  • IRONCLAD pre-push: links, lint, type, policy, consumer, declaration-surface, Markdown, docs-topology, source-backed reference, CAS-boundary, and stable-test gates passed
  • stable suite: 575 files passed, 1 skipped; 7,336 tests passed, 2 skipped
  • coverage suite: 585 files passed, 1 skipped; 7,378 tests passed, 2 skipped; 92.64% lines
  • focused API, checkpoint-corruption, traversal-support, package-boundary, and manifest tests: 72 passed
  • npm pack dry run passed, including the complete prepack chain
  • JSR publish dry run passed
  • declaration publication surface: 0 errors, 0 warnings
  • Semgrep, contamination, anti-sludge, source-size, source-backed docs, and CAS-invariant gates passed

ADR checks

  • This PR does not implement ADR 2 without satisfying ADR 3
  • If this PR touches persisted op formats, I linked the ADR 3 readiness issue
  • If this PR touches wire compatibility, I confirmed canonical-only ops are still rejected on the wire pre-cutover
  • If this PR touches schema constants, I confirmed patch and checkpoint namespaces remain distinct

This PR does not change persisted operation formats, wire compatibility, or schema constants. The conditional ADR checks are therefore not applicable; checkpoint changes only make malformed existing refs fail closed.

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7dfd756f-f93e-4cb8-bc45-f2f43d56f94e

📥 Commits

Reviewing files that changed from the base of the PR and between b725e47 and 03f725e.

📒 Files selected for processing (1)
  • src/domain/services/optic/CheckpointTailFactReducer.ts
📜 Recent 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)
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/domain/services/optic/CheckpointTailFactReducer.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/optic/CheckpointTailFactReducer.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/optic/CheckpointTailFactReducer.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/domain/services/optic/CheckpointTailFactReducer.ts
🔇 Additional comments (1)
src/domain/services/optic/CheckpointTailFactReducer.ts (1)

14-17: LGTM!

Also applies to: 50-52, 209-232


📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added bounded neighborhood readings with pagination, cursors, direction, labels, and configurable limits.
    • Added tick-based historical timeline views and convenient value reads.
    • Added structured receipts with outcomes, evidence, repair hints, and receipt inspection.
    • Added focused storage, advanced coordinate/optic, and diagnostics entry points.
  • Breaking Changes

    • Removed browser and legacy package entry points and graph-first compatibility exports.
    • Root API now emphasizes intents, timelines, readings, and receipts.
  • Documentation

    • Updated getting-started, migration, querying, and API guidance for v19.

Walkthrough

This PR establishes the v19 application-oriented API boundary, removes graph-first package entrypoints, adds intent/reading/receipt and tick-based timeline flows, introduces bounded neighborhood pagination, and updates storage, diagnostics, documentation, tooling, and tests.

Changes

v19 public API boundary

Layer / File(s) Summary
Root and subpath export surfaces
index.ts, storage.ts, advanced.ts, diagnostics.ts, package.json, jsr.json
Root exports now center on openWarp, intent, and reading; storage, advanced, and diagnostics capabilities use explicit subpaths, while browser, legacy, and sha1sync entrypoints are removed.
Receipt inspection and generated reference
diagnostics.ts, scripts/check-source-backed-reference.ts, docs/topics/reference.md
inspectReceipt() returns frozen receipt metadata and object identifiers, and reference generation reflects the reduced public surfaces.
Migration and first-use documentation
README.md, docs/migrations/v19/*, docs/topics/*
Documentation adopts intent writes, bounded readings, receipt outcomes, ticks, drafts, and CLI-based operator workflows.
Boundary validation and packaging
test/unit/scripts/*, tsconfig*.json, test/type-check/*
AST-based export audits and type fixtures validate the v19 root and supported subpath contracts.

Timeline and receipt runtime

Layer / File(s) Summary
Intent and receipt contracts
src/domain/api/Intent*.ts, src/domain/api/Receipt*.ts, src/domain/api/*Receipt.ts
Edge-property intents are removed; shared outcome types, repair hints, operation tags, evidence, and outcome-specific receipt validation are added.
Intent writes and drafts
src/domain/api/WriteRuntime.ts, src/domain/api/TimelineRuntime.ts, src/domain/api/DraftTimelineRuntime.ts
Writes and draft writes delegate to executeIntentWrite, returning accepted or structured operational failure receipts.
Readings and timeline views
src/domain/api/Reading*.ts, src/domain/api/Timeline*.ts, src/domain/api/Tick*.ts
Neighborhood readings, bounded read results, tick capture, historical views, coordinate access, and unresolved-read handling are implemented.

Bounded neighborhood reads

Layer / File(s) Summary
Checkpoint paging and cursors
src/domain/services/optic/CheckpointNeighborhood*, src/domain/services/optic/NeighborhoodPageCursor.ts
Checkpoint shard evidence is loaded into deterministic bitmap-backed pages with scoped cursors, limits, labels, directions, and resume positions.
Traversal and witness integration
src/domain/services/optic/CheckpointShardFactReader.ts, src/domain/services/optic/CheckpointTail*.ts
Neighborhood page reads and per-edge resume cursors are propagated through traversal and witnessed read identity construction.
Neighborhood conformance coverage
test/conformance/v19BoundedNeighborhoodReading.test.ts, test/unit/domain/services/optic/CheckpointTailTraversalReader.test.ts
Tests cover bounded page sizes, cursor continuity, direction/label combinations, stale cursors, and traversal resumption.

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

Possibly related PRs

Poem

I’m a rabbit with receipts in my den,
Bounded reads hop page by page again.
Root APIs grow tidy and light,
Ticks chase history through the night.
"Intent!" I thump—"then read what's true!" 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 1.60% 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 is concise and accurately summarizes the PR’s main change to the v19 API boundary.
Description check ✅ Passed The description matches the repository template with Summary, Issue, Test plan, and ADR checks filled in.
Linked Issues check ✅ Passed The changes align with #712 by shrinking root exports, moving adapters and expert APIs to subpaths, removing legacy entrypoints, and updating receipts and docs.
Out of Scope Changes check ✅ Passed No clear unrelated changes stand out; the docs, tests, config, and script edits all support the v19 boundary work.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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

Base automatically changed from v19-closeout-next-five to main July 13, 2026 21:28
@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.

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

🤖 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/topics/getting-started.md`:
- Around line 139-140: Update the getting-started example around
audit.previewJoin and audit.join to call join only when preview.receipt.outcome
indicates acceptance, following the accepted-only branching pattern in the API
README; leave obstructed or conflicted previews without proceeding to join.

In `@docs/topics/querying.md`:
- Around line 88-91: In the unsupported-query list, remove the duplicated
“arbitrary traversal” entry while preserving the remaining entries and guidance
in the surrounding documentation.

In `@README.md`:
- Around line 266-272: Revise the causal-cone paragraph near the definition of
D(v) to remove the claim that well-foundedness alone makes D(v) finite. State
instead that finiteness follows from the runtime’s finite-support or optic-basis
guarantees, and connect that guarantee to why bounded reads can avoid
materializing H \setminus D(v).

In `@src/domain/api/TickRuntime.ts`:
- Around line 19-24: Update requireTickCoordinate to validate that the tick’s
coordinate belongs to the exact runtime instance that created it, not merely a
matching worldlineName. Use the coordinate metadata or runtime binding
established when tickCoordinates entries are created, and preserve the existing
E_TIMELINE_TICK_MISMATCH error for foreign-runtime ticks.

In `@src/domain/api/Timeline.ts`:
- Around line 112-117: Remove the public coordinate() method from the root
Timeline surface, including its WarpWorldlineCoordinate return path. Keep
captureCoordinate internal to Timeline and expose coordinate access only through
the advanced surface, preserving the documented separation between opaque tick
handles and coordinate evidence.

In `@src/domain/services/controllers/CheckpointController.ts`:
- Line 371: Update the checkpoint reference handling in
_hasCurrentCheckpointSchema so an existing ref with empty or non-checkpoint
content throws PersistenceError instead of returning false; reserve false for a
genuinely absent ref. Preserve the existing true result for valid current
checkpoint schemas and ensure _validateMigrationBoundary cannot succeed when a
malformed checkpoint ref is present.

In `@src/domain/services/optic/CheckpointTailWitnessLocator.ts`:
- Around line 199-224: Update the traversal flow around
_readWitnessedNeighborhoodPage and readNeighborhood so a single checkpoint basis
is loaded and reused for the entire traversal, rather than calling
_basisLoader.load() per frontier node. Also avoid repeating
_scanTailForNeighborhood() for each entry by reusing traversal-scoped tail data
or an equivalent cached result while preserving tail stability validation and
witnessed page construction.

In `@test/conformance/v18TraversalOpticReadBasis.test.ts`:
- Line 117: Move the inline regular expression used by the edgeCursor assertion
in the traversal conformance test to a module-level constant, then reuse that
static regex in the expect.stringMatching call. Preserve the existing pattern
and assertion behavior.

In `@test/conformance/v19BoundedNeighborhoodReading.test.ts`:
- Around line 177-183: Update readIdentityShardPaths to validate each shard’s
path before returning it: require the path to be a string and reject missing or
malformed values instead of coercing them with String(). Preserve the existing
checkpointIndexShards array validation and return only validated paths.

In `@test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts`:
- Around line 106-113: Strengthen the assertion in the manifest-page test around
the CheckpointShardFactReader result by replacing toMatchObject with strict
equality for the fields owned by this test, including the edge object. If
metadata is intentionally present, assert it separately without allowing
unrelated extra fields in the core contract.

In `@test/unit/scripts/v19-public-api-boundary.test.ts`:
- Around line 146-148: Update the sorted function to use spread syntax instead
of Array.from for converting values to an array, preserving the existing sorting
behavior.
- Around line 74-90: The export-scanning loop must record namespace re-exports
instead of skipping them. In the branch handling non-named export clauses,
detect ts.isNamespaceExport(statement.exportClause) and add the module specifier
text to starExports, while preserving the existing handling for other
unsupported export clauses.
🪄 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: 1e5a23e0-f2f6-4b0b-b39d-c980e36f4729

📥 Commits

Reviewing files that changed from the base of the PR and between fb2c0c4 and a7fa7d1.

📒 Files selected for processing (118)
  • CHANGELOG.md
  • README.md
  • advanced.ts
  • bin/cli/commands/optic.ts
  • browser.ts
  • diagnostics.ts
  • docs/migrations/v19/README.md
  • docs/topics/api/README.md
  • docs/topics/getting-started.md
  • docs/topics/git-substrate.md
  • docs/topics/observers.md
  • docs/topics/optic-reads.md
  • docs/topics/querying.md
  • docs/topics/reference.md
  • docs/topics/strands.md
  • docs/topics/sync.md
  • eslint.config.ts
  • examples/README.md
  • examples/bounded-reads.ts
  • examples/observers.ts
  • examples/optics.ts
  • index.ts
  • jsr.json
  • legacy.ts
  • package.json
  • rootCompatibility.ts
  • scripts/check-source-backed-reference.ts
  • scripts/direct-export-name.ts
  • scripts/source-size-gate.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/Intent.ts
  • src/domain/api/IntentBuilders.ts
  • src/domain/api/IntentRuntime.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/api/Reading.ts
  • src/domain/api/ReadingBuilders.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/Receipt.ts
  • src/domain/api/ReceiptOutcome.ts
  • src/domain/api/ReceiptSupport.ts
  • src/domain/api/Tick.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/api/Timeline.ts
  • src/domain/api/TimelineRuntime.ts
  • src/domain/api/TimelineView.ts
  • src/domain/api/TimelineViewRuntime.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/WriteRuntime.ts
  • src/domain/api/openWarp.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/optic/CheckpointNeighborhoodBitmapPager.ts
  • src/domain/services/optic/CheckpointNeighborhoodPageReader.ts
  • src/domain/services/optic/CheckpointShardFactReader.ts
  • src/domain/services/optic/CheckpointTailTraversalReader.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/utils/roaring.ts
  • src/infrastructure/adapters/GitGraphAdapter.ts
  • storage.ts
  • test/conformance/btrProvenanceBoundary.test.ts
  • test/conformance/btrSigningBytesOwnership.test.ts
  • test/conformance/immutableSnapshotSurface.test.ts
  • test/conformance/v18BoundedMemoryLargeGraphGate.test.ts
  • test/conformance/v18CoordinateOpticPublicPath.test.ts
  • test/conformance/v18FirstUseOpticsHonesty.test.ts
  • test/conformance/v18NeighborhoodOpticReadBasis.test.ts
  • test/conformance/v18TraversalOpticReadBasis.test.ts
  • test/conformance/v19BoundedNeighborhoodReading.test.ts
  • test/fixtures/mergeConflictCorpus.ts
  • test/type-check/consumer.ts
  • test/type-check/tsconfig.json
  • test/type-check/v19-consumer.ts
  • test/type-check/v19-first-use.ts
  • test/type-check/v19-subpaths.ts
  • test/unit/cli/optic.test.ts
  • test/unit/domain/ReceiptDiagnostics.test.ts
  • test/unit/domain/ReceiptOutcome.test.ts
  • test/unit/domain/WarpApp.facade.test.ts
  • test/unit/domain/WarpCore.apiSurface.test.ts
  • test/unit/domain/WarpCore.effectPipeline.test.ts
  • test/unit/domain/WarpCore.emit.test.ts
  • test/unit/domain/WarpFacade.test.ts
  • test/unit/domain/WarpGraph.public-sync.test.ts
  • test/unit/domain/WarpGraph.strands.compare.test.ts
  • test/unit/domain/WarpWorldline.test.ts
  • test/unit/domain/continuum/GitWarpReceiptEnvelopeBoundary.test.ts
  • test/unit/domain/diagnostics.exports.test.ts
  • test/unit/domain/internalReadingSurface.behavior.test.ts
  • test/unit/domain/legacy.exports.test.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • test/unit/domain/services/merge/TtdMergeInspector.test.ts
  • test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts
  • test/unit/domain/services/optic/CheckpointTailTraversalReader.test.ts
  • test/unit/domain/services/query/BoundedSupportRule.test.ts
  • test/unit/domain/services/query/CausalIndexPlan.test.ts
  • test/unit/domain/services/query/SupportFragmentPlan.test.ts
  • test/unit/domain/strandAndRuntimeSeams.test.ts
  • test/unit/domain/utils/roaring.test.ts
  • test/unit/domain/worldlineExecutableExamples.test.ts
  • test/unit/domain/worldlineReadExecutablePaths.test.ts
  • test/unit/index.exports.test.ts
  • test/unit/infrastructure/adapters/RoaringLoaderAdapter.test.ts
  • test/unit/scripts/jsr-publish-root-graph-shape.test.ts
  • test/unit/scripts/non-ts-tail-shape.test.ts
  • test/unit/scripts/openwarpgraph-composition-root.test.ts
  • test/unit/scripts/public-api-aperture-noun.test.ts
  • test/unit/scripts/public-api-facade-split.test.ts
  • test/unit/scripts/release-artifact-command.test.ts
  • test/unit/scripts/root-export-line-budget.test.ts
  • test/unit/scripts/source-size-inventory-command.test.ts
  • test/unit/scripts/v18-package-surface-audit.test.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
  • test/unit/scripts/worldline-api-deprecation.test.ts
  • test/unit/v7-guards.test.ts
  • tsconfig.publish.json
  • tsconfig.src.json
  • vitest.config.ts
💤 Files with no reviewable changes (26)
  • tsconfig.src.json
  • tsconfig.publish.json
  • test/unit/index.exports.test.ts
  • examples/bounded-reads.ts
  • test/unit/scripts/jsr-publish-root-graph-shape.test.ts
  • examples/README.md
  • examples/observers.ts
  • test/unit/scripts/public-api-aperture-noun.test.ts
  • test/unit/scripts/public-api-facade-split.test.ts
  • docs/topics/optic-reads.md
  • examples/optics.ts
  • test/type-check/tsconfig.json
  • test/unit/scripts/v18-package-surface-audit.test.ts
  • browser.ts
  • test/unit/scripts/worldline-api-deprecation.test.ts
  • docs/topics/observers.md
  • test/unit/domain/diagnostics.exports.test.ts
  • test/unit/domain/legacy.exports.test.ts
  • legacy.ts
  • rootCompatibility.ts
  • src/domain/api/IntentBuilders.ts
  • test/type-check/consumer.ts
  • test/unit/scripts/source-size-inventory-command.test.ts
  • test/unit/scripts/root-export-line-budget.test.ts
  • scripts/source-size-gate.ts
  • eslint.config.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 (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:

  • scripts/direct-export-name.ts
  • test/unit/domain/WarpGraph.public-sync.test.ts
  • src/domain/api/Receipt.ts
  • src/domain/api/ReceiptSupport.ts
  • test/unit/domain/WarpApp.facade.test.ts
  • test/unit/domain/ReceiptOutcome.test.ts
  • bin/cli/commands/optic.ts
  • test/conformance/v18BoundedMemoryLargeGraphGate.test.ts
  • test/unit/domain/WarpCore.apiSurface.test.ts
  • src/domain/api/WriteRuntime.ts
  • src/domain/api/TimelineViewRuntime.ts
  • src/domain/api/Tick.ts
  • src/domain/api/ReceiptOutcome.ts
  • src/infrastructure/adapters/GitGraphAdapter.ts
  • test/fixtures/mergeConflictCorpus.ts
  • test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts
  • vitest.config.ts
  • test/type-check/v19-first-use.ts
  • test/unit/domain/ReceiptDiagnostics.test.ts
  • test/unit/domain/utils/roaring.test.ts
  • src/domain/utils/roaring.ts
  • test/unit/domain/services/merge/TtdMergeInspector.test.ts
  • test/unit/domain/services/query/CausalIndexPlan.test.ts
  • test/unit/domain/worldlineReadExecutablePaths.test.ts
  • src/domain/api/TickRuntime.ts
  • test/unit/domain/continuum/GitWarpReceiptEnvelopeBoundary.test.ts
  • test/type-check/v19-subpaths.ts
  • src/domain/api/TimelineView.ts
  • test/unit/scripts/non-ts-tail-shape.test.ts
  • test/unit/infrastructure/adapters/RoaringLoaderAdapter.test.ts
  • test/conformance/v18NeighborhoodOpticReadBasis.test.ts
  • test/unit/domain/services/query/BoundedSupportRule.test.ts
  • test/unit/domain/WarpCore.effectPipeline.test.ts
  • test/conformance/v18TraversalOpticReadBasis.test.ts
  • test/unit/domain/services/query/SupportFragmentPlan.test.ts
  • test/conformance/immutableSnapshotSurface.test.ts
  • test/conformance/v19BoundedNeighborhoodReading.test.ts
  • advanced.ts
  • diagnostics.ts
  • src/domain/api/TimelineRuntime.ts
  • test/unit/domain/services/optic/CheckpointTailTraversalReader.test.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/api/openWarp.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • test/conformance/v18CoordinateOpticPublicPath.test.ts
  • src/domain/services/controllers/CheckpointController.ts
  • test/conformance/btrProvenanceBoundary.test.ts
  • test/unit/cli/optic.test.ts
  • src/domain/api/ReadingBuilders.ts
  • src/domain/services/optic/CheckpointNeighborhoodPageReader.ts
  • src/domain/api/Reading.ts
  • test/conformance/v18FirstUseOpticsHonesty.test.ts
  • src/domain/api/IntentRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • test/type-check/v19-consumer.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
  • src/domain/api/JoinReceipt.ts
  • test/unit/domain/internalReadingSurface.behavior.test.ts
  • test/conformance/btrSigningBytesOwnership.test.ts
  • scripts/check-source-backed-reference.ts
  • src/domain/services/optic/CheckpointTailTraversalReader.ts
  • index.ts
  • src/domain/api/WriteReceipt.ts
  • test/unit/domain/WarpGraph.strands.compare.test.ts
  • src/domain/api/ReadReceipt.ts
  • test/unit/scripts/release-artifact-command.test.ts
  • test/unit/domain/strandAndRuntimeSeams.test.ts
  • src/domain/services/optic/CheckpointNeighborhoodBitmapPager.ts
  • storage.ts
  • test/unit/v7-guards.test.ts
  • test/unit/domain/worldlineExecutableExamples.test.ts
  • test/unit/domain/WarpCore.emit.test.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • test/unit/domain/WarpWorldline.test.ts
  • src/domain/api/Timeline.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.ts
  • src/domain/api/Intent.ts
  • test/unit/domain/WarpFacade.test.ts
  • test/unit/scripts/openwarpgraph-composition-root.test.ts
  • src/domain/services/optic/CheckpointShardFactReader.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/domain/api/Receipt.ts
  • src/domain/api/ReceiptSupport.ts
  • src/domain/api/WriteRuntime.ts
  • src/domain/api/TimelineViewRuntime.ts
  • src/domain/api/Tick.ts
  • src/domain/api/ReceiptOutcome.ts
  • src/infrastructure/adapters/GitGraphAdapter.ts
  • src/domain/utils/roaring.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/api/TimelineView.ts
  • src/domain/api/TimelineRuntime.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/api/openWarp.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/api/ReadingBuilders.ts
  • src/domain/services/optic/CheckpointNeighborhoodPageReader.ts
  • src/domain/api/Reading.ts
  • src/domain/api/IntentRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/services/optic/CheckpointTailTraversalReader.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/services/optic/CheckpointNeighborhoodBitmapPager.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/Timeline.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.ts
  • src/domain/api/Intent.ts
  • src/domain/services/optic/CheckpointShardFactReader.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/api/Receipt.ts
  • src/domain/api/ReceiptSupport.ts
  • src/domain/api/WriteRuntime.ts
  • src/domain/api/TimelineViewRuntime.ts
  • src/domain/api/Tick.ts
  • src/domain/api/ReceiptOutcome.ts
  • src/domain/utils/roaring.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/api/TimelineView.ts
  • src/domain/api/TimelineRuntime.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/api/openWarp.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/api/ReadingBuilders.ts
  • src/domain/services/optic/CheckpointNeighborhoodPageReader.ts
  • src/domain/api/Reading.ts
  • src/domain/api/IntentRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/services/optic/CheckpointTailTraversalReader.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/services/optic/CheckpointNeighborhoodBitmapPager.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/Timeline.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.ts
  • src/domain/api/Intent.ts
  • src/domain/services/optic/CheckpointShardFactReader.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/api/Receipt.ts
  • src/domain/api/ReceiptSupport.ts
  • src/domain/api/WriteRuntime.ts
  • src/domain/api/TimelineViewRuntime.ts
  • src/domain/api/Tick.ts
  • src/domain/api/ReceiptOutcome.ts
  • src/domain/utils/roaring.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/api/TimelineView.ts
  • src/domain/api/TimelineRuntime.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/api/openWarp.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/api/ReadingBuilders.ts
  • src/domain/services/optic/CheckpointNeighborhoodPageReader.ts
  • src/domain/api/Reading.ts
  • src/domain/api/IntentRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/services/optic/CheckpointTailTraversalReader.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/services/optic/CheckpointNeighborhoodBitmapPager.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/Timeline.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.ts
  • src/domain/api/Intent.ts
  • src/domain/services/optic/CheckpointShardFactReader.ts
🧠 Learnings (2)
📚 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
📚 Learning: 2026-03-04T12:08:30.347Z
Learnt from: flyingrobots
Repo: git-stunts/git-warp PR: 63
File: package.json:126-126
Timestamp: 2026-03-04T12:08:30.347Z
Learning: Vitest 4 removes vite-node as a dependency and rewrites its pool system. Do not flag the absence of vite-node in package.json or lockfiles as an error for Vitest 4 projects. Use this as a general guideline: if a project uses Vitest 4, missing vite-node is expected and correct; only flag issues if there is evidence the project is not using Vitest 4 or if vite-node is explicitly required by the project.

Applied to files:

  • package.json
🪛 ast-grep (0.44.1)
test/unit/scripts/non-ts-tail-shape.test.ts

[warning] 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 } from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)

test/unit/scripts/release-artifact-command.test.ts

[warning] 4: 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 {
spawnSync,
type SpawnSyncOptionsWithStringEncoding,
type SpawnSyncReturns,
} from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)


[warning] 4: 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 {
spawnSync,
type SpawnSyncOptionsWithStringEncoding,
type SpawnSyncReturns,
} from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)


[warning] 4: 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 {
spawnSync,
type SpawnSyncOptionsWithStringEncoding,
type SpawnSyncReturns,
} from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)


[warning] 4: 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 {
spawnSync,
type SpawnSyncOptionsWithStringEncoding,
type SpawnSyncReturns,
} from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)

🪛 ESLint
test/conformance/v18TraversalOpticReadBasis.test.ts

[error] 117-117: Move this regular expression to module scope to avoid re-compilation on every call.

(e18e/prefer-static-regex)

test/unit/scripts/v19-public-api-boundary.test.ts

[error] 147-147: Use spread syntax [...iterable] instead of Array.from(iterable) when no mapper function is provided

(e18e/prefer-spread-syntax)

🪛 OpenGrep (1.25.0)
scripts/direct-export-name.ts

[ERROR] 5-5: Dynamic command passed to child_process.exec/execSync. Use child_process.execFile or spawn with an argument array instead.

(coderabbit.command-injection.exec-js)

🔇 Additional comments (93)
test/conformance/btrProvenanceBoundary.test.ts (1)

3-8: LGTM!

Also applies to: 51-61, 70-73, 82-88, 102-102

test/conformance/v18CoordinateOpticPublicPath.test.ts (1)

2-2: LGTM!

Also applies to: 24-26, 35-37, 191-193

test/conformance/v18FirstUseOpticsHonesty.test.ts (1)

4-5: LGTM!

Also applies to: 33-35, 100-100, 165-173, 183-187

test/conformance/v18NeighborhoodOpticReadBasis.test.ts (1)

54-54: LGTM!

Also applies to: 66-66, 101-120, 174-180

test/conformance/v18TraversalOpticReadBasis.test.ts (1)

40-44: LGTM!

Also applies to: 71-90, 118-129

test/conformance/v19BoundedNeighborhoodReading.test.ts (1)

1-176: LGTM!

test/fixtures/mergeConflictCorpus.ts (1)

99-99: LGTM!

test/type-check/v19-consumer.ts (1)

11-39: LGTM!

Also applies to: 50-91, 107-120

test/conformance/btrSigningBytesOwnership.test.ts (1)

3-9: LGTM!

Also applies to: 30-34, 44-48, 95-95, 109-109, 127-127, 145-163

test/conformance/immutableSnapshotSurface.test.ts (1)

2-7: LGTM!

Also applies to: 38-38

test/unit/domain/services/query/SupportFragmentPlan.test.ts (1)

4-7: LGTM!

Also applies to: 45-45, 55-55, 75-75, 93-105

test/unit/domain/strandAndRuntimeSeams.test.ts (1)

3-8: LGTM!

Also applies to: 34-34, 59-59, 212-212, 234-234, 272-279

test/unit/domain/utils/roaring.test.ts (1)

49-57: LGTM!

test/unit/domain/worldlineExecutableExamples.test.ts (1)

3-10: LGTM!

Also applies to: 50-51, 180-183, 205-205, 214-223

test/unit/domain/worldlineReadExecutablePaths.test.ts (1)

3-3: LGTM!

Also applies to: 7-7, 22-22

test/unit/infrastructure/adapters/RoaringLoaderAdapter.test.ts (1)

51-59: LGTM!

test/conformance/v18BoundedMemoryLargeGraphGate.test.ts (1)

3-3: LGTM!

test/type-check/v19-first-use.ts (1)

5-5: LGTM!

test/type-check/v19-subpaths.ts (1)

4-33: LGTM!

test/unit/cli/optic.test.ts (1)

12-17: LGTM!

Also applies to: 48-52, 129-134, 172-177

test/unit/domain/ReceiptDiagnostics.test.ts (1)

1-39: LGTM!

test/unit/domain/ReceiptOutcome.test.ts (1)

4-6: LGTM!

Also applies to: 23-46

test/unit/domain/WarpApp.facade.test.ts (1)

3-5: LGTM!

Also applies to: 25-25

test/unit/domain/WarpCore.apiSurface.test.ts (1)

2-2: LGTM!

Also applies to: 32-39

test/unit/domain/WarpCore.effectPipeline.test.ts (1)

2-7: LGTM!

Also applies to: 32-32, 57-57, 113-118, 130-130, 145-145

test/unit/domain/WarpCore.emit.test.ts (1)

2-14: LGTM!

Also applies to: 24-24, 38-99, 126-126, 137-137, 163-182, 199-201

test/unit/domain/WarpFacade.test.ts (1)

5-16: LGTM!

Also applies to: 67-67, 94-98, 109-147, 196-209, 220-239, 251-265, 276-285, 304-325, 327-498

test/unit/domain/WarpGraph.public-sync.test.ts (1)

2-2: LGTM!

test/unit/domain/WarpGraph.strands.compare.test.ts (1)

76-81: LGTM!

Also applies to: 92-92, 114-120, 146-157, 254-254, 337-337, 390-392, 418-430, 460-469, 526-527, 561-564, 611-614

test/unit/domain/WarpWorldline.test.ts (1)

3-3: LGTM!

Also applies to: 19-19, 30-41, 57-65, 74-74, 83-83, 93-104, 146-151, 214-260, 335-337

test/unit/domain/continuum/GitWarpReceiptEnvelopeBoundary.test.ts (1)

3-3: LGTM!

Also applies to: 12-29, 65-79

test/unit/domain/internalReadingSurface.behavior.test.ts (1)

3-12: LGTM!

Also applies to: 24-24, 67-67, 79-80

test/unit/domain/services/merge/TtdMergeInspector.test.ts (1)

3-8: LGTM!

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

1-114: LGTM!

test/unit/domain/services/query/BoundedSupportRule.test.ts (1)

4-5: LGTM!

Also applies to: 43-43, 68-68, 89-104

test/unit/domain/services/query/CausalIndexPlan.test.ts (1)

4-5: LGTM!

Also applies to: 53-58

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

137-137: LGTM!

Also applies to: 149-149, 441-442

test/unit/scripts/non-ts-tail-shape.test.ts (1)

44-46: LGTM!

test/unit/scripts/openwarpgraph-composition-root.test.ts (1)

5-5: LGTM!

Also applies to: 37-37, 68-72, 81-82, 100-101, 110-121, 172-174, 208-214

test/unit/scripts/release-artifact-command.test.ts (1)

1-13: LGTM!

Also applies to: 25-31, 105-123, 133-138

test/unit/scripts/v19-public-api-boundary.test.ts (1)

7-53: LGTM!

Also applies to: 99-136, 138-145, 154-212

test/unit/v7-guards.test.ts (1)

2-4: LGTM!

Also applies to: 14-16, 48-50

vitest.config.ts (1)

33-33: LGTM!

CHANGELOG.md (1)

29-33: LGTM!

Also applies to: 46-50, 52-57

README.md (1)

58-59: LGTM!

Also applies to: 61-105, 107-127, 129-149, 194-219, 237-237, 285-299, 326-326, 343-363, 369-373, 442-444

bin/cli/commands/optic.ts (1)

1-1: LGTM!

docs/migrations/v19/README.md (1)

4-6: LGTM!

Also applies to: 21-21, 30-47, 94-94, 108-108, 124-161, 185-185, 209-215, 231-254, 264-270, 306-308, 310-327

docs/topics/api/README.md (1)

3-3: LGTM!

Also applies to: 66-66, 84-85, 105-116, 135-155, 219-224, 306-312, 340-340, 383-418

docs/topics/getting-started.md (1)

1-31: LGTM!

Also applies to: 32-60, 62-110, 111-125, 126-138, 141-148, 149-159, 160-167

src/domain/api/Tick.ts (1)

1-23: LGTM!

src/domain/api/Timeline.ts (1)

2-10: LGTM!

Also applies to: 22-47, 59-90, 119-135, 160-175, 188-191, 211-272, 296-317

advanced.ts (1)

9-24: LGTM!

diagnostics.ts (1)

7-28: LGTM!

Also applies to: 30-44

src/domain/api/ReadReceipt.ts (1)

8-34: LGTM!

Also applies to: 44-118

src/domain/api/Receipt.ts (1)

1-5: LGTM!

src/domain/api/ReceiptSupport.ts (1)

3-16: LGTM!

src/domain/services/optic/CheckpointNeighborhoodBitmapPager.ts (2)

98-112: LGTM!


175-197: 🎯 Functional Correctness

No change needed Roaring rank(x) is inclusive (<= x), so bitmap.rank(after.globalId) and rankBefore(...) already advance past the current edge correctly.

			> Likely an incorrect or invalid review comment.
src/domain/services/optic/CheckpointShardFactReader.ts (1)

40-52: LGTM!

Also applies to: 106-115

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

336-374: LGTM!

docs/topics/git-substrate.md (1)

6-12: LGTM!

docs/topics/querying.md (1)

1-20: LGTM!

Also applies to: 21-55, 57-85, 86-87, 92-107, 108-113, 114-120

docs/topics/reference.md (1)

14-155: LGTM!

Also applies to: 196-196

docs/topics/strands.md (1)

3-23: LGTM!

Also applies to: 37-40

docs/topics/sync.md (1)

25-28: LGTM!

index.ts (1)

7-7: LGTM!

Also applies to: 18-63

src/domain/api/TimelineView.ts (1)

1-48: LGTM!

src/domain/api/TimelineViewRuntime.ts (1)

1-15: LGTM!

jsr.json (1)

9-18: LGTM!

src/domain/api/DraftTimelineRuntime.ts (1)

9-10: LGTM!

Also applies to: 22-26, 65-70, 177-192

src/domain/api/Intent.ts (1)

5-5: LGTM!

Also applies to: 23-28, 60-64, 84-94, 97-121, 145-145

src/domain/api/IntentRuntime.ts (1)

8-14: LGTM!

Also applies to: 50-53

src/domain/api/JoinReceipt.ts (1)

4-8: LGTM!

Also applies to: 26-26, 49-87

src/domain/api/ReceiptOutcome.ts (1)

1-11: LGTM!

src/domain/api/WriteReceipt.ts (1)

4-34: LGTM!

Also applies to: 36-100

src/domain/api/WriteRuntime.ts (1)

1-79: LGTM!

package.json (1)

32-32: LGTM!

Also applies to: 47-47, 63-63

scripts/check-source-backed-reference.ts (1)

3-3: LGTM!

Also applies to: 135-136, 240-248, 267-271, 284-284

scripts/direct-export-name.ts (1)

1-6: LGTM!

src/domain/api/Reading.ts (1)

6-11: LGTM!

Also applies to: 22-42, 60-63, 91-93, 117-182

src/domain/api/ReadingBuilders.ts (1)

2-5: LGTM!

Also applies to: 7-13, 15-17

src/domain/api/ReadingRuntime.ts (1)

3-43: LGTM!

Also applies to: 45-65, 67-73, 75-99, 100-134, 135-150, 152-183, 185-200

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

51-51: LGTM!

storage.ts (1)

4-13: LGTM!

Also applies to: 15-20, 21-21

src/domain/api/TickRuntime.ts (1)

1-17: LGTM!

Also applies to: 27-32

src/domain/api/TimelineRuntime.ts (1)

9-31: LGTM!

src/domain/api/openWarp.ts (1)

10-13: LGTM!

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

11-11: LGTM!

src/domain/services/optic/CheckpointNeighborhoodPageReader.ts (2)

1-122: LGTM!

Also applies to: 124-139, 142-160, 164-348


123-123: 🗄️ Data Integrity & Integration

Validate the shard payloads before decoding them. decode<T>() only provides compile-time shapes; if these persisted shards are not runtime-validated, malformed data can still reach Object.entries, bitmap deserialization, or candidate construction.

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

18-25: LGTM!

Also applies to: 108-108, 122-122, 134-134, 152-160, 202-213

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

1-170: LGTM!

src/domain/utils/roaring.ts (1)

12-13: LGTM!

Comment thread docs/topics/getting-started.md Outdated
Comment thread docs/topics/querying.md Outdated
Comment thread README.md Outdated
Comment thread src/domain/api/TickRuntime.ts Outdated
Comment thread src/domain/api/Timeline.ts Outdated
Comment thread test/conformance/v18TraversalOpticReadBasis.test.ts Outdated
Comment thread test/conformance/v19BoundedNeighborhoodReading.test.ts Outdated
Comment thread test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts Outdated
Comment thread test/unit/scripts/v19-public-api-boundary.test.ts
Comment thread test/unit/scripts/v19-public-api-boundary.test.ts
@flyingrobots

Copy link
Copy Markdown
Member Author

Self-review at 8fa569111ee3553da2c89bcb1cea8c07c1b30f70

Verdict: no open findings.

I reviewed the final diff against main for public-surface leakage, illegal receipt states, caller-owned mutation, runtime composition side effects, bounded traversal continuation, migration completeness, and publication shape.

Findings discovered and fixed before this review:

  • Removed resolved and locked ReceiptOutcome to the approved five-value axis. [cite: src/domain/api/ReceiptOutcome.ts#1-18@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Encoded accepted/failure settlement rules in both discriminated option types and runtime validation for JavaScript callers. [cite: src/domain/api/WriteReceipt.ts#14-26@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/api/ReadReceipt.ts#17-29@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/api/JoinReceipt.ts#17-27@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Detached property intents from recursive caller-owned arrays, objects, and bytes on both ingress and descriptor egress. [cite: src/domain/api/Intent.ts#68-94@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/types/PropValue.ts#96-122@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Removed root-import runtime installation and placed Node defaults at explicit openWarp() and CLI composition roots. [cite: index.ts#13-28@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/api/openWarp.ts#18-35@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: bin/warp-graph.ts#3-9@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Versioned and scoped the opaque neighborhood cursor under the repository source-version policy. [cite: src/domain/services/optic/NeighborhoodPageCursor.ts#7-14@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/services/optic/NeighborhoodPageCursor.ts#81-100@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]

Verification at this head:

  • IRONCLAD pre-push passed every link, static, type, docs, policy, surface, CAS-boundary, and stable-test gate.
  • Stable suite: 575 files passed, 1 skipped; 7,333 tests passed, 2 skipped.
  • Coverage: 585 files passed, 1 skipped; 7,372 tests passed, 2 skipped; 92.62% lines.
  • npm pack dry-run and JSR publish dry-run passed; declaration surface reported 0 errors and 0 warnings.
  • CLI regression Bats: 8/8 passed.

Residual risk is the intentional v19 breaking removal itself; the migration map and compile-time consumer fixture cover the supported replacement surface.

@flyingrobots

Copy link
Copy Markdown
Member Author

Code Lawyer review at 8fa569111ee3553da2c89bcb1cea8c07c1b30f70

Disposition: clean; no blocking contract defect found.

Public-boundary construction

  • The package root has exactly three runtime exports: openWarp, intent, and reading; all companion nouns are type-only. [cite: index.ts#13-28@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Package and JSR subpath allowlists are enforced by an AST-backed test, including the absence of retired browser/legacy entry points. [cite: test/unit/scripts/v19-public-api-boundary.test.ts#230-242@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Importing the root barrel cannot install runtime globals; the AST gate assigns that responsibility to openWarp(). [cite: test/unit/scripts/v19-public-api-boundary.test.ts#245-256@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]

State and outcome law

  • Operation and outcome are orthogonal axes: write/read/join remain operation literals while every receipt uses the exact canonical outcome union. [cite: src/domain/api/ReceiptOutcome.ts#1-18@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/api/WriteReceipt.ts#28-36@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/api/ReadReceipt.ts#49-57@8fa569111ee3553da2c89bcb1cea8c07c1b30f70] [cite: src/domain/api/JoinReceipt.ts#32-40@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Accepted writes require a patch SHA and forbid a reason; non-accepted writes require a reason and forbid a patch SHA. [cite: src/domain/api/WriteReceipt.ts#73-88@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Accepted reads require evidence and forbid a reason; non-accepted reads require a reason. [cite: src/domain/api/ReadReceipt.ts#94-119@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Accepted joins forbid a reason; non-accepted joins require one. [cite: src/domain/api/JoinReceipt.ts#85-97@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Runtime tests exercise impossible settlement objects that can arrive from untyped JavaScript, not only TypeScript compilation. [cite: test/unit/domain/ReceiptOutcome.test.ts#51-82@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]

Ownership and continuation law

  • Intent values cross the public boundary by value, not by shared mutable carrier; the regression test mutates both the source and an exposed descriptor. [cite: test/unit/domain/WarpFacade.test.ts#312-342@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]
  • Traversal continuation resumes from the opaque per-edge position rather than restarting or skipping bitmap-ordered neighbors. [cite: test/unit/domain/services/optic/CheckpointTailTraversalReader.test.ts#25-71@8fa569111ee3553da2c89bcb1cea8c07c1b30f70]

No compatibility promise is accidentally retained for deleted v18 entry points. No operation state is mislabeled as an outcome. No import-time composition side effect remains in the public root.

@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.

@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

Caution

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

⚠️ Outside diff range comments (4)
docs/topics/getting-started.md (1)

62-88: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Show the receipt-outcome check before logging .value.

Unlike the equivalent examples in README.md and docs/topics/api/README.md (both gate .value access on receipt.outcome === 'accepted'), this example logs severity.value/exists.value unconditionally. Given the immediately following prose about obstructed receipts, this teaches readers to skip the receipt-first pattern the rest of the doc set emphasizes.

✏️ Suggested fix
-console.log(severity.value, severity.receipt);
-console.log(exists.value, exists.receipt);
+if (severity.receipt.outcome === 'accepted') {
+  console.log(severity.value);
+}
+console.log(exists.value, exists.receipt);
🤖 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 `@docs/topics/getting-started.md` around lines 62 - 88, Update the “Read A
Bounded Value” example to check each reading’s receipt outcome before accessing
or logging its value, using the existing accepted-outcome pattern from the
related documentation. Preserve receipt logging and ensure obstructed readings
do not access or materialize `.value`.
src/domain/services/optic/NeighborhoodPageCursor.ts (1)

42-50: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Make pagination cursors opaque and tamper-resistant.

This directly exposes traversal coordinates and lets callers forge a valid after position, so resumed reads can skip or reorder results instead of resuming exactly. Use an opaque cursor codec/state handle supplied through a port, rather than serializing scope and global IDs into the public token.

As per PR objectives, traversal resumption must provide “exact opaque traversal resumption.”

🤖 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/domain/services/optic/NeighborhoodPageCursor.ts` around lines 42 - 50,
Replace the direct field serialization in the cursor construction flow of
NeighborhoodPageCursor with the opaque cursor codec/state-handle port. Encode
the complete traversal state through that port and expose only its opaque token
prefixed by CURSOR_PREFIX; do not include checkpointSha, nodeId, direction,
labels, or globalId in the public cursor. Ensure decoding resumes the exact
stored traversal state.
src/domain/api/openWarp.ts (1)

2-21: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Keep host-port installation outside the domain API.

openWarp() now initializes ambient codec/crypto host resolvers from src/domain. Move this bootstrap into an application/infrastructure composition root and inject the required runtime ports; core must not depend on ambient host capabilities.

🤖 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/domain/api/openWarp.ts` around lines 2 - 21, Remove
installDefaultRuntimeHostNodePorts from openWarp and eliminate the domain API’s
dependency on ambient host initialization. Move this bootstrap to the
application/infrastructure composition root, then ensure openWarp receives the
required runtime codec/crypto ports through its existing options or
dependency-injection path while preserving assertOpenWarpOptions and the normal
Warp creation flow.

Source: Coding guidelines

src/domain/api/TimelineView.ts (1)

19-26: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Validate the view’s runtime-backed fields.

The constructor accepts forged tick values and invalid name/writer identities. Validate tick instanceof Tick and the identity fields before storing them so a TimelineView cannot carry invalid domain state.

🤖 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/domain/api/TimelineView.ts` around lines 19 - 26, Update the TimelineView
constructor to validate all runtime-backed options before assignment: require
options.tick to be an instance of Tick and validate the name and writer
identities using the domain’s existing identity requirements. Preserve the
current readReading function validation and throw the established WarpError for
invalid options, ensuring no invalid values are stored in the instance.

Source: Coding guidelines

🤖 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/unit/domain/WarpFacade.test.ts`:
- Line 334: Remove the duplicate exposedValue declaration in the test scope,
retaining a single typed const declaration with the existing roles and evidence
shape so the test type-checks without changing its behavior.

---

Outside diff comments:
In `@docs/topics/getting-started.md`:
- Around line 62-88: Update the “Read A Bounded Value” example to check each
reading’s receipt outcome before accessing or logging its value, using the
existing accepted-outcome pattern from the related documentation. Preserve
receipt logging and ensure obstructed readings do not access or materialize
`.value`.

In `@src/domain/api/openWarp.ts`:
- Around line 2-21: Remove installDefaultRuntimeHostNodePorts from openWarp and
eliminate the domain API’s dependency on ambient host initialization. Move this
bootstrap to the application/infrastructure composition root, then ensure
openWarp receives the required runtime codec/crypto ports through its existing
options or dependency-injection path while preserving assertOpenWarpOptions and
the normal Warp creation flow.

In `@src/domain/api/TimelineView.ts`:
- Around line 19-26: Update the TimelineView constructor to validate all
runtime-backed options before assignment: require options.tick to be an instance
of Tick and validate the name and writer identities using the domain’s existing
identity requirements. Preserve the current readReading function validation and
throw the established WarpError for invalid options, ensuring no invalid values
are stored in the instance.

In `@src/domain/services/optic/NeighborhoodPageCursor.ts`:
- Around line 42-50: Replace the direct field serialization in the cursor
construction flow of NeighborhoodPageCursor with the opaque cursor
codec/state-handle port. Encode the complete traversal state through that port
and expose only its opaque token prefixed by CURSOR_PREFIX; do not include
checkpointSha, nodeId, direction, labels, or globalId in the public cursor.
Ensure decoding resumes the exact stored traversal state.
🪄 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: 953890b1-c6ac-4766-938a-f569aa438245

📥 Commits

Reviewing files that changed from the base of the PR and between a7fa7d1 and 8fa5691.

📒 Files selected for processing (28)
  • CHANGELOG.md
  • README.md
  • bin/warp-graph.ts
  • docs/migrations/v19/README.md
  • docs/topics/api/README.md
  • docs/topics/getting-started.md
  • docs/topics/reference.md
  • index.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/Intent.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/ReceiptOutcome.ts
  • src/domain/api/Timeline.ts
  • src/domain/api/TimelineView.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/openWarp.ts
  • src/domain/graph/LegacyPropertyValue.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/types/PropValue.ts
  • test/conformance/v18FirstUseOpticsHonesty.test.ts
  • test/conformance/v18TraversalOpticReadBasis.test.ts
  • test/type-check/v19-consumer.ts
  • test/unit/domain/ReceiptOutcome.test.ts
  • test/unit/domain/WarpFacade.test.ts
  • test/unit/domain/services/optic/CheckpointTailTraversalReader.test.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
💤 Files with no reviewable changes (1)
  • index.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: test-node (22)
  • GitHub Check: type-firewall-lint
  • GitHub Check: coverage-threshold
  • GitHub Check: preflight
🧰 Additional context used
📓 Path-based instructions (4)
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/domain/api/ReceiptOutcome.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/api/TimelineView.ts
  • src/domain/graph/LegacyPropertyValue.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/api/Timeline.ts
  • src/domain/api/openWarp.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/Intent.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/types/PropValue.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/api/ReceiptOutcome.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/api/TimelineView.ts
  • src/domain/graph/LegacyPropertyValue.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/api/Timeline.ts
  • src/domain/api/openWarp.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/Intent.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/types/PropValue.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/api/ReceiptOutcome.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • src/domain/api/TimelineView.ts
  • src/domain/graph/LegacyPropertyValue.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/api/Timeline.ts
  • src/domain/api/openWarp.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/Intent.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/types/PropValue.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/domain/api/ReceiptOutcome.ts
  • test/unit/domain/services/optic/CheckpointTailTraversalReader.test.ts
  • bin/warp-graph.ts
  • test/unit/domain/ReceiptOutcome.test.ts
  • test/conformance/v18FirstUseOpticsHonesty.test.ts
  • src/domain/services/optic/NeighborhoodPageCursor.ts
  • test/type-check/v19-consumer.ts
  • test/conformance/v18TraversalOpticReadBasis.test.ts
  • src/domain/api/TimelineView.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
  • src/domain/graph/LegacyPropertyValue.ts
  • src/domain/api/JoinReceipt.ts
  • src/domain/api/Timeline.ts
  • src/domain/api/openWarp.ts
  • src/domain/api/WriteReceipt.ts
  • src/domain/api/DraftTimelineRuntime.ts
  • src/domain/api/ReadingRuntime.ts
  • src/domain/api/Intent.ts
  • src/domain/api/ReadReceipt.ts
  • src/domain/types/PropValue.ts
  • test/unit/domain/WarpFacade.test.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
🪛 ESLint
test/conformance/v18TraversalOpticReadBasis.test.ts

[error] 120-120: Move this regular expression to module scope to avoid re-compilation on every call.

(e18e/prefer-static-regex)

🔇 Additional comments (35)
README.md (2)

266-272: Causal-cone finiteness claim still unqualified.

This aside still states well-foundedness alone makes $D(v)$ finite even when $H$ is unbounded — the same false mathematical justification flagged previously. Only typography changed here, not the substance.


55-105: LGTM!

docs/topics/getting-started.md (2)

139-140: join() still runs unconditionally after previewJoin.

Same issue as flagged previously: audit.join(draft) is called regardless of preview.receipt.outcome, so obstructed/conflicted previews still proceed to join here.


1-61: LGTM!

Also applies to: 89-137, 141-167

CHANGELOG.md (1)

28-29: LGTM!

Also applies to: 41-42, 52-58

docs/topics/api/README.md (1)

87-163: LGTM!

docs/topics/reference.md (3)

14-33: LGTM!


108-136: 📐 Maintainability & Code Quality

Confirm WarpWorldlineCoordinateFrontierEntry naming is intentional under advanced.

This type retains the "WarpWorldline" prefix even though the migration guide documents WarpWorldline as renamed to root Timeline. Since advanced is allowed to keep expert-facing internals, this may be fine, but worth confirming it isn't a stray leftover from the pre-rename naming scheme that should follow the same rename.


87-107: LGTM!

Also applies to: 138-196

docs/migrations/v19/README.md (2)

258-260: 🎯 Functional Correctness

Check the openWarpGraph() replacement note. It repeats the WarpCore guidance and may not describe the correct v19 migration path.


248-248: 🎯 Functional Correctness

Clarify the relationship between EdgePropertyIntentFields and EdgeIntentFields. The migration table says EdgePropertyIntentFields was removed, but docs/topics/reference.md also lists EdgeIntentFields as a root export. If these are different shapes, note that distinction; if this is the renamed successor, the row should not say “removed”.

bin/warp-graph.ts (1)

4-10: LGTM!

src/domain/api/Intent.ts (1)

2-2: LGTM!

Also applies to: 64-69, 84-94, 153-157

src/domain/api/WriteReceipt.ts (1)

4-4: LGTM!

Also applies to: 38-49

src/domain/api/DraftTimelineRuntime.ts (1)

29-41: LGTM!

Also applies to: 61-75, 182-197, 239-258

src/domain/graph/LegacyPropertyValue.ts (1)

2-15: LGTM!

src/domain/types/PropValue.ts (1)

19-27: LGTM!

Also applies to: 61-64, 85-127

src/domain/api/Timeline.ts (1)

112-117: Keep coordinate capture off the root Timeline surface.

coordinate() still exposes formal coordinate machinery from the first-use timeline API, contrary to the opaque-tick boundary.

test/conformance/v18TraversalOpticReadBasis.test.ts (2)

120-120: Move the cursor regex to module scope.

The inline regex still violates e18e/prefer-static-regex.


21-21: LGTM!

Also applies to: 39-44, 70-90, 180-196

test/conformance/v18FirstUseOpticsHonesty.test.ts (1)

33-35: LGTM!

Also applies to: 99-100, 165-187

test/type-check/v19-consumer.ts (1)

8-39: LGTM!

Also applies to: 50-95, 111-126

test/unit/scripts/v19-public-api-boundary.test.ts (3)

61-90: Namespace re-exports still bypass this boundary guard.

if (!ts.isNamedExports(statement.exportClause)) continue; still skips export * as ns from '...' (a NamespaceExport clause), so it is never recorded in starExports. This was flagged in a prior review round and remains unaddressed.


92-166: LGTM!


245-256: 🎯 Functional Correctness

defaultsModule may be too specific for the index.ts check. If importedModules() compares raw specifiers, index.ts could import the same file through a different relative path and still make this assertion pass. Match by resolved path or basename instead.

src/domain/api/ReadingRuntime.ts (5)

16-29: LGTM!


45-65: LGTM!


100-118: LGTM!


152-167: LGTM!


185-200: 🎯 Functional Correctness

Check whether tail_budget_exceeded needs its own repair hints. missing_bounded_basis and tail_budget_exceeded currently reuse REPAIR_BOUNDED_BASIS; split the guidance only if those failures call for different remediation.

src/domain/api/ReceiptOutcome.ts (1)

8-18: LGTM!

src/domain/api/JoinReceipt.ts (1)

4-27: LGTM!

Also applies to: 32-35, 61-101

src/domain/api/ReadReceipt.ts (1)

5-30: LGTM!

Also applies to: 47-71, 94-119

test/unit/domain/ReceiptOutcome.test.ts (1)

4-100: LGTM!

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

1-106: LGTM!

Comment thread test/unit/domain/WarpFacade.test.ts
@flyingrobots

Copy link
Copy Markdown
Member Author

Self-review at b725e47238613aeef18281512f7abc324a8d3a10

Verdict: no open findings.

I reviewed the complete diff against main for public-surface leakage, runtime identity confusion, malformed persistence handling, traversal support reuse, caller-owned mutation, receipt-state legality, documentation accuracy, and package publication shape.

Findings discovered and fixed before this final review:

  • Root Timeline no longer exposes coordinate machinery; formal capture is an explicit /advanced capability and rejects handles not opened by openWarp(). [cite: advanced.ts#9-11@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/captureCoordinate.ts#5-11@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/unit/domain/WarpFacade.test.ts#176-189@b725e47238613aeef18281512f7abc324a8d3a10]
  • A Tick is now bound to the exact runtime object that captured its coordinate, preventing same-name timelines from accepting foreign history handles. [cite: src/domain/api/TickRuntime.ts#6-33@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/unit/domain/WarpFacade.test.ts#450-455@b725e47238613aeef18281512f7abc324a8d3a10]
  • Existing checkpoint refs that resolve to an empty or non-checkpoint object fail as typed persistence corruption instead of being treated as absent. [cite: src/domain/services/controllers/CheckpointController.ts#381-405@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/unit/domain/services/controllers/CheckpointController.test.ts#474-500@b725e47238613aeef18281512f7abc324a8d3a10]
  • Traversal creates one request-local support context, loads one checkpoint basis and bounded tail scan, indexes only direction/label-relevant nodes, and still fails closed when relevant tail adjacency lacks witnesses. No cross-request or persistent cache was added. [cite: src/domain/services/optic/CheckpointTailWitnessLocator.ts#255-300@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/services/optic/CheckpointTailWitnessLocator.ts#339-364@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/conformance/v18TraversalOpticReadBasis.test.ts#96-152@b725e47238613aeef18281512f7abc324a8d3a10]
  • The export audit now classifies namespace re-exports as forbidden star exports, closing the remaining AST-boundary bypass. [cite: test/unit/scripts/v19-public-api-boundary.test.ts#61-95@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/unit/scripts/v19-public-api-boundary.test.ts#194-224@b725e47238613aeef18281512f7abc324a8d3a10]

Verification at this head:

  • IRONCLAD pre-push passed link, lint, type, policy, consumer, declaration-surface, Markdown, docs, CAS-boundary, and stable-test gates.
  • Stable suite: 575 files passed, 1 skipped; 7,336 tests passed, 2 skipped.
  • Coverage: 585 files passed, 1 skipped; 7,378 tests passed, 2 skipped; 92.64% lines.
  • Focused review regression set: 72 passed.
  • npm pack dry-run and JSR publish dry-run passed; publication surface reported 0 errors and 0 warnings.

Residual risk is the intentional v19 breaking removal itself. The migration map, runtime export assertions, compile-time consumer fixtures, and package dry runs cover the supported replacement contract.

@flyingrobots

Copy link
Copy Markdown
Member Author

Code Lawyer review at b725e47238613aeef18281512f7abc324a8d3a10

Disposition: clean; no blocking contract defect found.

Public-boundary construction

  • The package root has exactly three runtime exports: openWarp, intent, and reading; companion nouns remain type-only. [cite: index.ts#13-39@b725e47238613aeef18281512f7abc324a8d3a10]
  • The advanced value surface is explicitly limited to captureCoordinate, Coordinate, and Optic; the AST test rejects both ordinary star exports and namespace re-exports. [cite: advanced.ts#9-25@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/unit/scripts/v19-public-api-boundary.test.ts#194-224@b725e47238613aeef18281512f7abc324a8d3a10]
  • Coordinate capture is absent from root Timeline at runtime and compile time. [cite: test/unit/domain/WarpFacade.test.ts#176-189@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/type-check/v19-consumer.ts#46-60@b725e47238613aeef18281512f7abc324a8d3a10]

Receipt and ownership law

  • Every receipt uses the exact canonical five-value outcome set; operation remains a separate literal axis. [cite: src/domain/api/ReceiptOutcome.ts#1-18@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/WriteReceipt.ts#28-36@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/ReadReceipt.ts#49-57@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/JoinReceipt.ts#32-40@b725e47238613aeef18281512f7abc324a8d3a10]
  • Accepted and non-accepted settlement states are separated in both TypeScript unions and runtime validation, so untyped callers cannot construct contradictory receipts. [cite: src/domain/api/WriteReceipt.ts#14-26@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/WriteReceipt.ts#73-88@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/ReadReceipt.ts#17-29@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/ReadReceipt.ts#94-119@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/JoinReceipt.ts#17-27@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/JoinReceipt.ts#85-97@b725e47238613aeef18281512f7abc324a8d3a10]
  • Public intent descriptor reads re-normalize the stored descriptor, preserving value ownership instead of leaking caller-owned mutable carriers. [cite: src/domain/api/Intent.ts#60-94@b725e47238613aeef18281512f7abc324a8d3a10]

Identity, persistence, and bounded-read law

  • Advanced coordinates require a runtime-backed public handle, while ticks require exact runtime identity rather than name equivalence. [cite: src/domain/api/captureCoordinate.ts#5-11@b725e47238613aeef18281512f7abc324a8d3a10] [cite: src/domain/api/TickRuntime.ts#11-33@b725e47238613aeef18281512f7abc324a8d3a10]
  • A present but malformed checkpoint ref is corruption and cannot silently fall through migration validation. [cite: src/domain/services/controllers/CheckpointController.ts#381-405@b725e47238613aeef18281512f7abc324a8d3a10]
  • Traversal support is scoped to one invocation: context creation occurs inside each read, basis and bounded tail are loaded once, and the derived map is not stored on the locator. Relevant tail edges fail closed; unrelated edges do not contaminate the result. [cite: src/domain/services/optic/CheckpointTailWitnessLocator.ts#272-301@b725e47238613aeef18281512f7abc324a8d3a10] [cite: test/conformance/v18TraversalOpticReadBasis.test.ts#96-152@b725e47238613aeef18281512f7abc324a8d3a10]

No deleted v18 compatibility promise leaks through root. No operation state is mislabeled as an outcome. No malformed checkpoint is interpreted as absence. No persistent cache or raw-Git storage path was introduced by this review response.

@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.

@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

Caution

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

⚠️ Outside diff range comments (1)
docs/topics/querying.md (1)

23-30: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Define plumbing before using it in the example.

The standalone snippet passes plumbing to GitStorageAdapter but never imports or initializes it. Add the GitPlumbing setup, or explicitly reference the earlier setup example.

🤖 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 `@docs/topics/querying.md` around lines 23 - 30, Update the standalone example
around openWarp and GitStorageAdapter to define plumbing before it is passed to
GitStorageAdapter, using the GitPlumbing import and initialization shown in the
earlier setup example or explicitly referencing that setup instead.
🤖 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/optic/CheckpointTailFactReducer.ts`:
- Around line 46-64: Update includesNeighborhood to check
neighborhoodNodeIdsForOperation results directly while iterating
entry.patch.ops, returning true immediately when options.nodeId matches and
false after all operations are checked. Do not call neighborhoodNodeIds or build
and sort the full node-ID set for this membership-only path; preserve
normalization and the existing neighborhood scope options.

---

Outside diff comments:
In `@docs/topics/querying.md`:
- Around line 23-30: Update the standalone example around openWarp and
GitStorageAdapter to define plumbing before it is passed to GitStorageAdapter,
using the GitPlumbing import and initialization shown in the earlier setup
example or explicitly referencing that setup instead.
🪄 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: f1c85ceb-bff9-4331-ae3b-499768fb5561

📥 Commits

Reviewing files that changed from the base of the PR and between 8fa5691 and b725e47.

📒 Files selected for processing (26)
  • CHANGELOG.md
  • README.md
  • advanced.ts
  • docs/migrations/v19/README.md
  • docs/topics/api/README.md
  • docs/topics/getting-started.md
  • docs/topics/optic-reads.md
  • docs/topics/querying.md
  • docs/topics/reference.md
  • scripts/check-source-backed-reference.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/api/Timeline.ts
  • src/domain/api/TimelineRuntime.ts
  • src/domain/api/captureCoordinate.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/optic/CheckpointTailFactReducer.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.ts
  • test/conformance/v18TraversalOpticReadBasis.test.ts
  • test/conformance/v19BoundedNeighborhoodReading.test.ts
  • test/type-check/v19-consumer.ts
  • test/type-check/v19-subpaths.ts
  • test/unit/domain/WarpFacade.test.ts
  • test/unit/domain/WarpGraph.coverageGaps.test.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
💤 Files with no reviewable changes (2)
  • src/domain/api/TimelineRuntime.ts
  • src/domain/api/Timeline.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)
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/domain/api/captureCoordinate.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/optic/CheckpointTailFactReducer.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.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/api/captureCoordinate.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/optic/CheckpointTailFactReducer.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.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/api/captureCoordinate.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/services/controllers/CheckpointController.ts
  • src/domain/services/optic/CheckpointTailFactReducer.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.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/domain/api/captureCoordinate.ts
  • scripts/check-source-backed-reference.ts
  • test/unit/domain/services/optic/CheckpointShardFactReader.manifest.test.ts
  • test/type-check/v19-subpaths.ts
  • test/unit/domain/WarpGraph.coverageGaps.test.ts
  • src/domain/api/TickRuntime.ts
  • src/domain/services/controllers/CheckpointController.ts
  • test/unit/domain/services/controllers/CheckpointController.test.ts
  • src/domain/services/optic/CheckpointTailFactReducer.ts
  • advanced.ts
  • test/type-check/v19-consumer.ts
  • test/conformance/v19BoundedNeighborhoodReading.test.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
  • src/domain/services/optic/CheckpointTailWitnessLocator.ts
  • test/conformance/v18TraversalOpticReadBasis.test.ts
  • test/unit/domain/WarpFacade.test.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 (24)
src/domain/api/captureCoordinate.ts (1)

1-12: LGTM!

docs/topics/getting-started.md (1)

1-167: LGTM!

scripts/check-source-backed-reference.ts (1)

3-3: LGTM!

Also applies to: 135-136, 240-248, 267-271, 284-284

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

102-122: LGTM!

test/type-check/v19-subpaths.ts (1)

4-33: LGTM!

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

1053-1055: LGTM!

docs/topics/querying.md (1)

1-20: LGTM!

Also applies to: 44-121

test/conformance/v19BoundedNeighborhoodReading.test.ts (1)

177-190: LGTM!

src/domain/api/TickRuntime.ts (1)

6-34: LGTM!

CHANGELOG.md (1)

34-37: LGTM! Accurately reflects the tick-binding and coordinate-capture relocation changes.

Based on learnings, the Keep a Changelog siblings_only convention for repeated subheadings is respected here.

Source: Learnings

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

381-406: LGTM! Malformed checkpoint refs now correctly throw PersistenceError instead of being treated as absent, addressing the prior finding.

Also applies to: 603-610

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

473-501: LGTM! Good coverage of both new rejection paths.

test/type-check/v19-consumer.ts (1)

52-54: LGTM!

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

227-302: LGTM! This correctly resolves the prior finding — basis load and tail scan are now shared once per traversal via TraversalReadContext/tailByNode instead of being repeated per frontier node.

Also applies to: 339-387

docs/topics/api/README.md (1)

347-352: 🗄️ Data Integrity & Integration

Align the example with captureCoordinate’s signature. The call shown here only passes timeline; show the required argument(s) or switch to the documented coordinate capture API.

test/unit/scripts/v19-public-api-boundary.test.ts (1)

61-96: 📐 Maintainability & Code Quality

Both previously flagged issues are now resolved.

The namespace-export branch (ts.isNamespaceExport) and the spread-syntax fix for sorted() are both present, and new tests cover the namespace-export classification and the advanced.ts value-export set.

Also applies to: 186-188, 201-224

test/conformance/v18TraversalOpticReadBasis.test.ts (1)

13-13: 📐 Maintainability & Code Quality

Previously flagged regex-scope lint issue resolved.

The cursor pattern is now a module-scope constant (NEIGHBORHOOD_CURSOR_PATTERN) reused across assertions.

Also applies to: 96-154, 177-191

advanced.ts (1)

1-25: LGTM!

docs/migrations/v19/README.md (1)

37-47: LGTM!

Also applies to: 163-190, 229-268

docs/topics/optic-reads.md (1)

14-16: LGTM!

Also applies to: 25-25, 81-81

README.md (1)

266-272: LGTM!

docs/topics/reference.md (1)

110-136: LGTM!

Also applies to: 193-197

test/unit/domain/WarpFacade.test.ts (2)

6-6: LGTM!

Also applies to: 188-188, 438-438, 451-455


314-344: 🎯 Functional Correctness

Duplicate const exposedValue declaration
Keep only one const exposedValue in this test block; a second declaration here would fail type-checking.

Comment thread src/domain/services/optic/CheckpointTailFactReducer.ts
@flyingrobots

Copy link
Copy Markdown
Member Author

Final self-review at 03f725e77ab112edc235299f1382840aa1a41fca

Verdict: no open findings.

I reviewed the final one-commit delta from b725e472 and rechecked its interaction with both neighborhood and traversal reads. The membership-only path now short-circuits on the first matching operation, while traversal retains the deterministic full node-ID index it needs for request-scoped support. The two paths share normalization and direction/label semantics, so the optimization does not change read results or evidence selection. [cite: src/domain/services/optic/CheckpointTailFactReducer.ts#46-65@03f725e77ab112edc235299f1382840aa1a41fca]

Verification at this head:

  • focused neighborhood and traversal conformance: 15 passed
  • source and test typechecks: passed
  • aggregate lint, source-size, test-law, and CAS invariant: passed
  • IRONCLAD pre-push: every link/static/docs/surface/type gate passed
  • complete stable suite: 575 files passed, 1 skipped; 7,336 tests passed, 2 skipped

The full public-boundary, receipt-law, runtime-identity, persistence-corruption, and request-scoped traversal findings documented in the prior self-review remain unchanged at this descendant head.

@flyingrobots

Copy link
Copy Markdown
Member Author

Final Code Lawyer addendum at 03f725e77ab112edc235299f1382840aa1a41fca

Disposition: clean; no blocking contract defect found.

The final optimization preserves the distinction between two contracts:

  • includesNeighborhood() answers a boolean membership question and now has early-exit semantics.
  • neighborhoodNodeIds() produces the complete, sorted, deduplicated support set required to build one traversal-scoped index.

[cite: src/domain/services/optic/CheckpointTailFactReducer.ts#46-65@03f725e77ab112edc235299f1382840aa1a41fca]

This commit changes no public export, receipt state, persistence schema, wire format, cursor encoding, evidence shape, retention behavior, or cache lifetime. It introduces no storage path and no persistent state. The complete IRONCLAD gate passed after the change, including the raw-Git/CAS invariant and stable suite.

@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 059dbf4 into main Jul 13, 2026
17 checks passed
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.

Goalpost: v19 boring public API boundary

1 participant