Skip to content

chore(release): 0.9.0#303

Merged
bbopen merged 3 commits into
mainfrom
release/0.9.0
Jul 12, 2026
Merged

chore(release): 0.9.0#303
bbopen merged 3 commits into
mainfrom
release/0.9.0

Conversation

@bbopen

@bbopen bbopen commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Release PR for 0.9.0 (closes #270, completes #260).

Merging this to main triggers the npm publish workflow (release.yml). PyPI follows via the `tywrap-ir-v0.3.0` tag after merge.

Local verification: `check:all` green (1253 passed / 94 skipped), `npm pack --dry-run` clean.

- package.json 0.9.0 + regenerated src/version.ts; tywrap-ir 0.3.0
- CHANGELOG 0.9.0 entry (roadmap #260-#270)
- ROADMAP: v0.9.0 record, Now/Later refresh
- docs: version stamps 0.8.0 -> 0.9.0 in transport framing/capabilities
- llms-full.txt regenerated
- src/index.ts docblock: drop stale 'full type safety / zero runtime
  overhead' claims (audit finding, matches #261 scrub)
- npm tarball: stop shipping runtime/__pycache__ (audit finding)
@github-actions github-actions Bot added area:docs Area: documentation area:codegen labels Jul 12, 2026
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in: 49 minutes

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

How can I continue?

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

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

How do review limits work?

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

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

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 93da9630-9ca8-4333-b908-4e1f861875e7

📥 Commits

Reviewing files that changed from the base of the PR and between d74aed4 and f432c7c.

⛔ Files ignored due to path filters (1)
  • test/menagerie/__snapshots__/gen.test.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (4)
  • CHANGELOG.md
  • ROADMAP.md
  • src/core/generator.ts
  • test/generator.test.ts
📝 Walkthrough

Walkthrough

The release updates package and IR versions to 0.9.0 and 0.3.0, refreshes release and roadmap records, aligns transport documentation with 0.9.0 behavior, and excludes runtime cache files from published contents.

Changes

0.9.0 release alignment

Layer / File(s) Summary
Release records and roadmap
CHANGELOG.md, ROADMAP.md
Adds the 0.9.0 release entry and records typed value-RPC, IR, transport, and internal changes.
Transport documentation updates
docs/public/llms-full.txt, docs/transport-capabilities.md, docs/transport-framing.md
Updates transport capability, framing, streaming, and encoding version references to 0.9.0.
Package version and publication metadata
package.json, src/index.ts, src/version.ts, tywrap_ir/pyproject.toml, tywrap_ir/tywrap_ir/__init__.py
Bumps package versions, refreshes the package description, and excludes runtime/__pycache__ from published files.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related issues

  • #260 — Documents and releases the same v0.9.0 typed value-RPC, validation, IR, transport, and stateful API changes.

Possibly related PRs

  • bbopen/tywrap#134 — Also updates tywrap_ir package version metadata.
  • bbopen/tywrap#259 — Introduced the transport framing and chunking behavior referenced by the 0.9.0 transport updates.

Suggested labels: area:tooling, documentation

Poem

A rabbit bumps the version bright,
Notes new paths in morning light.
Frames are documented, caches flee,
IR numbers hop from tree to tree.
“0.9.0!” the burrow sings,
With tidy paws and changelog wings.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning Most release tasks are covered, but the linked issue's docs/public/llms.txt type-coverage wording update is not shown in the provided changes. Update docs/public/llms.txt to the final type-coverage wording and confirm it stays under 5 KB.
✅ Passed checks (4 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed The diff stays focused on release/versioning, changelog, roadmap, and docs updates with no unrelated feature work.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title clearly identifies this as the 0.9.0 release PR and matches the main change.
Description check ✅ Passed The description is directly related to the release changes and summarizes the version bumps, docs, and release workflow.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/0.9.0

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 added area:tooling Area: tooling and CLI documentation Improvements or additions to documentation labels Jul 12, 2026

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

🤖 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 `@CHANGELOG.md`:
- Line 10: Update the source type-mapping documentation to map Python bytes to
Uint8Array and set[T] to T[] instead of string and Set<T>, then regenerate
docs/public/llms-full.txt so the published artifact reflects those mappings.

In `@ROADMAP.md`:
- Around line 18-20: Rewrite the malformed type-mapping sentence in ROADMAP.md
to use precise changelog wording, clearly describing the relationship between
return type wrappers, declarations, and codecs. Preserve the surrounding
mappings for unknown, Uint8Array, and arrays unchanged.
🪄 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: 5a1e2cbe-920f-4707-b9a3-e4bd6abc808f

📥 Commits

Reviewing files that changed from the base of the PR and between f59c05f and d74aed4.

📒 Files selected for processing (10)
  • CHANGELOG.md
  • ROADMAP.md
  • docs/public/llms-full.txt
  • docs/transport-capabilities.md
  • docs/transport-framing.md
  • package.json
  • src/index.ts
  • src/version.ts
  • tywrap_ir/pyproject.toml
  • tywrap_ir/tywrap_ir/__init__.py
📜 Review details
⏰ Context from checks skipped due to timeout. (9)
  • GitHub Check: test (22, 3.11)
  • GitHub Check: test (20, 3.12)
  • GitHub Check: os (windows-latest)
  • GitHub Check: test (20, 3.11)
  • GitHub Check: test (20, 3.10)
  • GitHub Check: test (22, 3.12)
  • GitHub Check: test (22, 3.10)
  • GitHub Check: os (macos-latest)
  • GitHub Check: data-plane-perf
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Use TypeScript strict mode and avoid any; prefer unknown with type guards.

Files:

  • src/version.ts
  • src/index.ts
tywrap_ir/**/*.py

📄 CodeRabbit inference engine (CLAUDE.md)

Python code under tywrap_ir/ must follow PEP 8 and use type hints.

Follow PEP 8 and use type hints in Python code.

Files:

  • tywrap_ir/tywrap_ir/__init__.py
🧠 Learnings (3)
📚 Learning: 2026-01-20T01:34:07.064Z
Learnt from: bbopen
Repo: bbopen/tywrap PR: 136
File: src/runtime/node.ts:444-458
Timestamp: 2026-01-20T01:34:07.064Z
Learning: When reviewing promise-based polling patterns (e.g., recursive setTimeout in waitForAvailableWorker functions), ensure that any recursive timer is tracked and cleared on timeout or promise resolution to prevent timer leaks. Do not rely on no-op checks after settlement; verify clearTimeout is invoked in all paths and consider using an explicit cancellation (e.g., AbortController) or a guard to cancel pending timers when the promise settles.

Applied to files:

  • src/version.ts
  • src/index.ts
📚 Learning: 2026-01-20T18:37:05.670Z
Learnt from: bbopen
Repo: bbopen/tywrap PR: 152
File: src/runtime/process-io.ts:37-40
Timestamp: 2026-01-20T18:37:05.670Z
Learning: In the tywrap repo, ESLint is used for linting (not Biome). Do not flag regex literals that contain control characters (e.g., \u001b, \u0000-\u001F) as lint errors, since the current ESLint configuration allows them. When reviewing TypeScript files (e.g., src/**/*.ts), rely on ESLint results and avoid raising issues about these specific control-character regex literals unless there is a competing config change or a policy requiring explicit escaping.

Applied to files:

  • src/version.ts
  • src/index.ts
📚 Learning: 2026-01-20T16:00:49.829Z
Learnt from: bbopen
Repo: bbopen/tywrap PR: 152
File: docs/adr/002-bridge-protocol.md:203-211
Timestamp: 2026-01-20T16:00:49.829Z
Learning: In the BridgeProtocol implementation (tywrap), reject Map and Set explicitly before serialization (e.g., in safeStringify or the serialization entrypoint) with a clear error like "Bridge protocol does not support Map/Set values". Do not rely on post-hoc checks of non-string keys at the point of JSON.stringify, since Maps/Sets cannot round-trip. This should be enforced at the boundary where data is prepared for serialization to ensure deterministic errors and prevent invalid data from propagating.

Applied to files:

  • src/version.ts
  • src/index.ts
🪛 LanguageTool
CHANGELOG.md

[style] ~14-~14: To elevate your writing, try using more formal phrasing here.
Context: ...hrough'` is removed; non-finite numbers keep failing as before. - **Pool and transport defau...

(CONTINUE_TO_VB)

🔇 Additional comments (10)
CHANGELOG.md (1)

3-9: LGTM!

Also applies to: 11-28

ROADMAP.md (1)

11-17: LGTM!

Also applies to: 21-30, 116-130

docs/public/llms-full.txt (1)

2766-2766: LGTM!

Also applies to: 2820-2820, 2830-2830, 2909-2909

docs/transport-capabilities.md (1)

84-85: LGTM!

docs/transport-framing.md (1)

20-20: LGTM!

Also applies to: 30-30, 109-109

package.json (1)

3-3: LGTM!

Also applies to: 37-37

src/index.ts (1)

2-7: LGTM!

src/version.ts (1)

12-12: LGTM!

tywrap_ir/pyproject.toml (1)

7-7: LGTM!

tywrap_ir/tywrap_ir/__init__.py (1)

7-8: LGTM!

Comment thread CHANGELOG.md Outdated
### Breaking

- **The stateful instance API is gone ([#264](https://github.com/bbopen/tywrap/issues/264), [#265](https://github.com/bbopen/tywrap/issues/265), [#266](https://github.com/bbopen/tywrap/issues/266)).** A handle lived in one pool worker while calls routed to any worker, so instance methods returned wrong results under `maxProcesses > 1`. The server no longer accepts `instantiate`/`call_method`/`dispose_instance` (structured unknown-method error), the client and wire protocol are call-only (`call | meta`), and generated classes expose only static and classmethod members routed through ordinary calls. Classes that lose members carry a migration note pointing at value-returning module functions.
- **Generated types degrade honestly ([#267](https://github.com/bbopen/tywrap/issues/267)).** A return type tywrap cannot resolve to a local declaration or a codec-backed value is emitted as `unknown` instead of a bare, undeclared TypeScript name — and every degrade feeds the generation report, so `--fail-on-warn` builds fail on them by design. Two long-catalogued type lies are fixed with the same stroke: Python `bytes` maps to `Uint8Array` (what the decoder actually delivers), and `set[T]` maps to `T[]` (sets arrive as arrays; sending a `Set` was already a loud error).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Regenerate the published type-mapping documentation.

The 0.9.0 release notes state that bytes maps to Uint8Array and set[T] maps to T[], but docs/public/llms-full.txt still says string and Set<T> at Lines 2486 and 2499. Update the source mapping documentation and regenerate the artifact so the release contract is consistent.

🤖 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 `@CHANGELOG.md` at line 10, Update the source type-mapping documentation to map
Python bytes to Uint8Array and set[T] to T[] instead of string and Set<T>, then
regenerate docs/public/llms-full.txt so the published artifact reflects those
mappings.

Comment thread ROADMAP.md
Comment on lines +18 to +20
generated types stopped lying (#267): a return tywrap cannot back with a
declaration or a codec is `unknown`, `bytes` maps to `Uint8Array`, `set[T]` to
`T[]`. Decoded returns are validated against the declared type at runtime, with

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the malformed type-mapping sentence.

“a return tywrap cannot back with a declaration or a codec” is unclear and should be rewritten to match the precise wording in the changelog.

🤖 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 `@ROADMAP.md` around lines 18 - 20, Rewrite the malformed type-mapping sentence
in ROADMAP.md to use precise changelog wording, clearly describing the
relationship between return type wrappers, declarations, and codecs. Preserve
the surrounding mappings for unknown, Uint8Array, and arrays unchanged.

Generator/AsyncGenerator/Iterator/AsyncIterator returns can never carry a
value: the bridge rejects iterator objects loudly at serialization. The
emitted TS type is now unknown (recorded as a degrade, so --fail-on-warn
sees it) and the validator is a no-op, instead of an unreachable
Generator<...> type with an array validator. Iterable/Sequence returns
keep their element-typed mapping — a decoded list satisfies them.
@bbopen bbopen merged commit ef8de50 into main Jul 12, 2026
23 checks passed
@bbopen bbopen deleted the release/0.9.0 branch July 12, 2026 04:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:codegen area:docs Area: documentation area:tooling Area: tooling and CLI documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PR10: [breaking] release — version, CHANGELOG, ROADMAP, docs

1 participant