chore(release): 0.9.0#303
Conversation
- 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)
|
Warning Review limit reached
Next review available in: 49 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThe 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. Changes0.9.0 release alignment
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related issues
Possibly related PRs
Suggested labels: Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (10)
CHANGELOG.mdROADMAP.mddocs/public/llms-full.txtdocs/transport-capabilities.mddocs/transport-framing.mdpackage.jsonsrc/index.tssrc/version.tstywrap_ir/pyproject.tomltywrap_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; preferunknownwith type guards.
Files:
src/version.tssrc/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.tssrc/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.tssrc/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.tssrc/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!
| ### 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). |
There was a problem hiding this comment.
🗄️ 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.
| 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 |
There was a problem hiding this comment.
📐 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.
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.