Skip to content

Publish v19 charts and testing surfaces - #789

Merged
flyingrobots merged 2 commits into
mainfrom
v19-public-surface-completion
Jul 26, 2026
Merged

Publish v19 charts and testing surfaces#789
flyingrobots merged 2 commits into
mainfrom
v19-public-surface-completion

Conversation

@flyingrobots

Copy link
Copy Markdown
Member

Summary

  • Publish bounded /charts observers and the disposable real-Git /testing runtime harness.
  • Keep npm and JSR exports, docs, ownership policy, and consumer declarations in sync.

Issue

Refs #712

Test plan

  • Stable suite: 7,146 passed, 2 skipped.
  • Exact coverage: 7,326 passed, 2 skipped; 92.95% lines.
  • Pre-push, source/consumer typechecks, package boundaries, docs, lint, and package dry-run 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

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@flyingrobots, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 32 minutes

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

How can I continue?

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

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

How do review limits work?

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

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

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 1178ca92-30ff-478b-99ff-6581802b5b86

📥 Commits

Reviewing files that changed from the base of the PR and between 3d9886f and 05ab5e9.

📒 Files selected for processing (13)
  • charts.ts
  • docs/topics/reference.md
  • src/domain/api/GraphChartObservers.ts
  • src/domain/api/GraphNeighborhoodChart.ts
  • src/domain/api/GraphNeighborhoodEdge.ts
  • src/domain/api/ReadingValueRuntime.ts
  • src/infrastructure/adapters/RuntimeHarnessHostAdapter.ts
  • src/testing/RuntimeHarness.ts
  • test/type-check/v19-subpaths.ts
  • test/unit/domain/GraphChartObservers.test.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
  • test/unit/testing/RuntimeHarness.test.ts
  • testing.ts
📝 Walkthrough

Walkthrough

The PR adds a bounded graph neighborhood observer and an isolated real-Git Runtime testing harness, exposes both through new package subpaths, updates build and publication configuration, and extends API references, migration guidance, type checks, and boundary tests.

Changes

Graph chart observers

Layer / File(s) Summary
Bounded graph chart observers
src/domain/api/GraphChartObservers.ts, charts.ts, test/unit/domain/GraphChartObservers.test.ts, docs/topics/api/README.md, docs/migrations/v19/README.md
Defines typed neighborhood chart options and results, creates bounded reading observers, validates and freezes decoded chart data, and exposes the API through charts.ts.

Runtime testing harness

Layer / File(s) Summary
Disposable Runtime testing harness
src/testing/RuntimeHarness.ts, testing.ts, test/unit/testing/RuntimeHarness.test.ts, test/type-check/v19-subpaths.ts
Creates temporary initialized Git repositories for Runtime tests, returns idempotent cleanup handles, and exposes the harness types and constructor through testing.ts.

Published entrypoints and reference coverage

Layer / File(s) Summary
Published entrypoints and reference coverage
package.json, jsr.json, tsconfig.*.json, scripts/*, docs/topics/reference.md, test/unit/scripts/v19-public-api-boundary.test.ts
Adds the charts and testing subpaths to build inputs, package exports, publication policy, generated reference output, and explicit export-boundary checks.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Consumer
  participant GraphObservers
  participant Runtime
  Consumer->>GraphObservers: create graph.neighborhood observer
  GraphObservers->>Runtime: request bounded neighborhood reading
  Runtime-->>GraphObservers: return chart reading value
  GraphObservers-->>Consumer: return frozen GraphNeighborhoodChart
Loading

Possibly related PRs

  • git-stunts/git-warp#679: Updates the same source-backed reference generator used for the new charts and testing reference sections.
  • git-stunts/git-warp#733: Shares the v19 public API boundary and reference-generation machinery extended by these entrypoints.

Poem

A rabbit hops through charts so neat,
With bounded paths and cursors sweet.
A Git-lit burrow, fresh and bright,
Helps Runtime tests take flight.
New doors now open, exports gleam—
Thump-thump, a well-wired API dream!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately captures the main change: publishing new charts and testing surfaces.
Description check ✅ Passed The description follows the required template and includes a summary, issue reference, test plan, and ADR checks.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 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/api/GraphChartObservers.ts`:
- Around line 22-95: Replace the structural GraphNeighborhoodChart and
GraphNeighborhoodEdge types with exported frozen domain classes that validate
constructor inputs and support instanceof checks. Update decodeNeighborhoodChart
and decodeNeighborhoodEdge to construct these classes instead of freezing
literals and casting them, while preserving existing validation, nested edge
freezing, and public fields. Update affected tests to assert runtime class
identity and constructor validation.

In `@src/testing/RuntimeHarness.ts`:
- Around line 1-6: Update RuntimeHarness and its temporary-directory and Git
setup paths to receive host I/O through constructor-injected ports instead of
importing node:fs/promises, node:os, node:path, or openDefaultGitPlumbing
directly. Define or reuse the appropriate port and adapter wiring at the
composition boundary, while preserving the harness’s existing behavior;
alternatively, explicitly mark this testing surface as an approved adapter
exemption if it is intentionally allowed to own these capabilities.
- Around line 31-45: Update the close method in RuntimeHarness so the closed
state is committed only after both runtime.close() and temporary-directory
removal succeed. Preserve idempotent behavior for successful cleanup, but ensure
a rejection leaves the harness retryable rather than silently returning on
subsequent close calls.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: adf9e2c7-bd0d-4880-80e2-0db7c7ac6984

📥 Commits

Reviewing files that changed from the base of the PR and between 209eb86 and 3d9886f.

📒 Files selected for processing (17)
  • charts.ts
  • docs/migrations/v19/README.md
  • docs/topics/api/README.md
  • docs/topics/reference.md
  • jsr.json
  • package.json
  • scripts/check-source-backed-reference.ts
  • scripts/storage-ownership-policy.ts
  • src/domain/api/GraphChartObservers.ts
  • src/testing/RuntimeHarness.ts
  • test/type-check/v19-subpaths.ts
  • test/unit/domain/GraphChartObservers.test.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
  • test/unit/testing/RuntimeHarness.test.ts
  • testing.ts
  • tsconfig.publish.json
  • tsconfig.src.json
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
  • GitHub Check: test-deno
  • GitHub Check: v19 base/head performance
  • GitHub Check: coverage-threshold
  • GitHub Check: test-node (22)
  • GitHub Check: preflight
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

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

Files:

  • test/unit/domain/GraphChartObservers.test.ts
  • testing.ts
  • charts.ts
  • test/unit/scripts/v19-public-api-boundary.test.ts
  • test/unit/testing/RuntimeHarness.test.ts
  • scripts/storage-ownership-policy.ts
  • src/testing/RuntimeHarness.ts
  • src/domain/api/GraphChartObservers.ts
  • test/type-check/v19-subpaths.ts
  • scripts/check-source-backed-reference.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/testing/RuntimeHarness.ts
  • src/domain/api/GraphChartObservers.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/GraphChartObservers.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/GraphChartObservers.ts
🧠 Learnings (1)
📚 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
🔇 Additional comments (16)
test/unit/domain/GraphChartObservers.test.ts (1)

8-74: LGTM!

charts.ts (1)

9-15: LGTM!

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

527-539: LGTM!

testing.ts (1)

8-12: LGTM!

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

4-26: LGTM!

Also applies to: 41-49, 58-64

docs/topics/reference.md (1)

18-26: LGTM!

Also applies to: 144-186

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

227-264: LGTM!

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

5-6: LGTM!

Also applies to: 306-309, 345-346

src/testing/RuntimeHarness.ts (1)

8-16: LGTM!

Also applies to: 18-30, 47-50, 53-65

test/unit/testing/RuntimeHarness.test.ts (1)

1-3: LGTM!

Also applies to: 6-10, 12-29

jsr.json (1)

11-14: LGTM!

Also applies to: 15-22

package.json (1)

48-57: LGTM!

tsconfig.publish.json (1)

16-17: LGTM!

tsconfig.src.json (1)

8-9: LGTM!

scripts/storage-ownership-policy.ts (1)

7-8: LGTM!

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

232-232: LGTM!

Also applies to: 245-246, 269-273

Comment thread src/domain/api/GraphChartObservers.ts Outdated
Comment thread src/testing/RuntimeHarness.ts Outdated
Comment thread src/testing/RuntimeHarness.ts Outdated
@github-actions

Copy link
Copy Markdown

Release Preflight

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

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

@github-actions

Copy link
Copy Markdown

Release Preflight

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

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

@flyingrobots
flyingrobots merged commit 614b8b0 into main Jul 26, 2026
18 checks passed
@flyingrobots
flyingrobots deleted the v19-public-surface-completion branch July 26, 2026 19:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant