Uh oh!
There was an error while loading. Please reload this page.
docs(changelog): v0.9.5 entry - #1088
Conversation
The v0.9.5 release PR (#1086) merged without a CHANGELOG entry because I mistakenly split it out. `CHANGELOG.md` is baked into the compiled binary at build time (`script/build.ts` embeds it as `OPENCODE_CHANGELOG`) and copied into every platform-specific npm package (`script/publish.ts`), so shipping v0.9.5 without this entry would give users an artifact whose embedded changelog stops at v0.9.4. Entry incorporates PM's release-notes feedback from the pre-release persona review: leads with the Windows grep fix (~16% of Windows users broken since v0.9.2, hard number from telemetry), collapses the welcome-panel two-round fix into a single bullet, includes the YOLO deny-rules-still-apply safety caveat, and files the three telemetry / instrumentation commits under Changed (observability) rather than Added (user-visible feature) so the release isn't overstated.
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.
Tip: disable this comment in your organization's Code Review settings.
full receipts (1 session)
orchestrator · |
📝 WalkthroughWalkthroughThe changelog adds the ChangesRelease surface validation
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 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 |
Code Review SummaryStatus: No Issues Found | Recommendation: Merge The previous suggestion (file-scoped Files Reviewed (2 files)
Previous Review Summaries (2 snapshots, latest commit c37889d)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit c37889d)Status: 1 Suggestion | Recommendation: Merge Overview
Issue Details (click to expand)SUGGESTION
Files Reviewed (2 files)
Previous review (commit 55a8b97)Status: No Issues Found | Recommendation: Merge Files Reviewed (1 file)
Reviewed by glm-5.2 · Input: 39.7K · Output: 6.9K · Cached: 486.6K Review guidance: REVIEW.md from base branch |
Per the release skill's Step 6, every release ships with an adversarial
test file under `test/skill/release-v{X}-adversarial.test.ts` — one per
release since v0.5.14. The v0.9.5 file was written but not committed;
adding it here so the release PR carries the intended coverage.
Categories per the skill (empty/null/undefined, boundary values, type
confusion, injection attacks, error propagation), applied to the v0.9.5
code surface:
- **Flag.truthyEnv:** 32KB env values, embedded null bytes, whitespace,
unknown keys — all must not enable and must not throw.
- **Telemetry.classifyProvider:** 10KB providerIDs, control characters,
JSON-stringified inputs, prototype keys (`__proto__` / `prototype` /
`hasOwnProperty` / `isPrototypeOf`), unusual modelID values — all
must fall through to "other" without leaking a raw id or extending
Object.
- **OnboardingTelemetry.claimEnvironmentScan:** empty / 10KB / path-shaped
/ SQL-shaped sessionIDs — idempotent and session-scoped; the composed
gate short-circuits correctly when the session was never marked.
- **redactPaths / countSampleContents:** empty input, 100KB input in <1s,
regex metacharacters in `extras`, user text already containing `<path>`,
fs symlink loops on `countSampleContents`.
- **buildCliContext / buildAuthorizeUrl:** base64url shape, `v=1` payload,
redirect / state encoding on hostile inputs (newlines, tabs, fragment
chars), fragment-goes-last invariant, graceful degradation when the
machine-id path is unreadable (payload valid, `machine_id` omitted).
22 tests, all pass locally. No `mock.module()`; real helpers, real fs
where needed, real `process.env` mutation with `beforeEach` /
`afterEach` snapshot-and-restore.There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 25: Update the telemetry documentation link in the changelog entry to
reference docs/docs/reference/telemetry.md instead of
docs/reference/telemetry.md, leaving the surrounding telemetry description
unchanged.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
Uh oh!
There was an error while loading. Please reload this page.
Previous commit landed the adversarial file with three raw null bytes embedded in string literals meant to test null-byte handling. Git classified the file as binary because of them, showing `Bin 0 -> 13936 bytes` and 0 insertions/deletions on the diff — reviewers on the PR couldn't see the file contents. Runtime behavior of the tests is unchanged; the JS string `"true\x00"` compiles to the same "true"+NUL sequence as a literal 0x00 byte in the source, without tripping git's binary detector. 22/22 tests still pass after the escape.
There was a problem hiding this comment.
All reported issues were addressed
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Uh oh!
There was an error while loading. Please reload this page.
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 `@packages/opencode/test/skill/release-v0.9.5-adversarial.test.ts`:
- Around line 217-225: Update the symlink setup in the test to skip only
recognized unsupported-symlink errors, rethrow all other failures, and change
the models assertion to require exactly zero while preserving the tables
assertion.
- Around line 175-180: Update the test “redactPaths handles a 100KB message in
reasonable time (< 1s)” to construct exactly 100,000 characters, removing the
performance.now timing measurement and elapsed-time assertion. Keep the test
focused on asserting the redaction output for the generated input.
🪄 Autofix
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: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 4cec0fb7-85a3-4d30-8840-827d0cc90ea9
📒 Files selected for processing (1)
packages/opencode/test/skill/release-v0.9.5-adversarial.test.ts
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Three inline findings, all valid, all small:
- **CHANGELOG.md:25** (coderabbit + cubic, both P3) — repo-relative
telemetry doc path was `docs/reference/telemetry.md`; the file
actually lives at `docs/docs/reference/telemetry.md` (content root is
`docs/` per `docs/mkdocs.yml`, published at `reference/telemetry/`
on the docs site). Fixed the path so a maintainer following the link
in the changelog finds the file.
- **adversarial.test.ts:180** (coderabbit) — the 100KB stress test used
`repeat(1000)` which is ~20KB, not 100KB as advertised, and asserted
a wall-clock `performance.now()` budget which is flaky under host
load / parallel test runners. Built exactly 100_000 characters via
`Math.ceil(100_000 / segment.length)` slicing, and dropped the
timing assertion — the test now proves only what it claims (redaction
shape survives large input).
- **adversarial.test.ts:225** (coderabbit) — the symlink-loop test had a
bare `catch { return }` that would swallow every setup failure into a
passing test, and `toBeGreaterThanOrEqual(0)` accepted incorrect
positive counts. Narrowed the catch to the one known unsupported-
symlink error class (`EPERM` on Windows without dev-mode), re-throw
everything else, and tightened the assertion to exact `.toBe(0)` —
a nonzero count would mean the helper is following the loop.
22/22 adversarial tests still pass after the changes.sahrizvi
commented
Aug 10, 2026
Bot-review — all three findings fixed ( |
| Source | Finding | Fix |
|---|---|---|
coderabbit + cubic @ CHANGELOG.md:25 | Telemetry doc path was docs/reference/telemetry.md — real path is docs/docs/reference/telemetry.md (content root is docs/ per docs/mkdocs.yml) | Path corrected |
coderabbit @ adversarial.test.ts:180 | repeat(1000) is ~20KB not 100KB as claimed; performance.now() assertion is flaky under host load | Built exactly 100,000 chars via Math.ceil(100_000 / segment.length) slicing; dropped the wall-clock assertion |
coderabbit @ adversarial.test.ts:225 | Bare catch { return } swallows every setup failure into a passing test; toBeGreaterThanOrEqual(0) is trivially true | Narrowed catch to EPERM (Windows without dev-mode), re-throw everything else; tightened assertion to exact .toBe(0) |
22/22 adversarial tests still pass locally. No must-fix findings from any bot; @kilo-code-bot returned "No Issues Found, Recommendation: Merge".
| const OPT_OUT_VAR = "ALTIMATE_TELEMETRY_DISABLED" | ||
| let optOutSnapshot: string | undefined | ||
| beforeEach(() => { |
There was a problem hiding this comment.
SUGGESTION: These hooks are file-scoped but only the Flag.truthyEnv describe block mutates ALTIMATE_TELEMETRY_DISABLED.
beforeEach/afterEach (lines 35-41) run for all 22 tests in the file, yet only the Flag.truthyEnv adversarial block (line 43) ever sets ALTIMATE_TELEMETRY_DISABLED — the other four describe blocks don't touch it, so the snapshot/restore is a no-op for them. Moving OPT_OUT_VAR, optOutSnapshot, and both hooks inside that describe block would scope the env management to where it's actually needed and make the intent clearer.
Reply with @kilocode-bot fix it to have Kilo Code address this issue.
There was a problem hiding this comment.
Applied in 3c0665d5 — moved OPT_OUT_VAR, optOutSnapshot, and both beforeEach / afterEach hooks inside the Flag.truthyEnv adversarial describe block. Scope now matches usage; 22/22 tests still pass locally. Thanks for the nit.
…eir describe block Kilo review on PR #1088: `beforeEach` / `afterEach` for the `ALTIMATE_TELEMETRY_DISABLED` env-var snapshot were declared at file scope, so they ran for all 22 tests even though only the four tests in `Flag.truthyEnv adversarial` ever set that variable. Moved the `const`, the `let`, and both hooks inside that describe block so scope matches usage. Behavior unchanged (still 22/22 pass); noise removed from unrelated tests' setup/teardown timeline.
Uh oh!
There was an error while loading. Please reload this page.
Issue for this PR
Fixes the CHANGELOG gap from PR #1086 (merged into main as
5f51d651cc).Type of change
What does this PR do?
Adds the v0.9.5 entry to
CHANGELOG.md. The v0.9.5 release PR (#1086) merged without this — I mistakenly split CHANGELOG out of the release PR.CHANGELOG.mdis baked into the compiled binary at build time (script/build.tsembeds it asOPENCODE_CHANGELOG) and copied into every platform-specific npm package (script/publish.ts), so shipping v0.9.5 without this entry would give users an artifact whose embedded changelog stops at v0.9.4.Entry incorporates PM's release-notes feedback from the pre-release persona review:
~16%of Windows users,99 of 617 machinesfigure from telemetry)Ctrl+Yyank-conflict heads-upHow did you verify your code works?
Docs-only diff; no code change. Ran
bun turbo typechecklocally (13/13 workspaces green) as a sanity check that the file parses cleanly for the build'sBun.file(...).text()read.Screenshots / recordings
Not applicable — CHANGELOG.md text.
Checklist
🤖 Generated with Claude Code
https://claude.ai/code/session_01Q8FGy89Qpr39k8nCSpCcK2
Summary by cubic
Adds the v0.9.5 entry to
CHANGELOG.mdso the compiled binary (OPENCODE_CHANGELOGviascript/build.ts) and npm packages (script/publish.ts) embed the correct release notes (Windows grep fix, mid-session YOLO toggle, welcome panel sizing, telemetry updates). Also adds and hardens the v0.9.5 adversarial test (escape\x00, true 100KB redaction check, strict symlink-loop assertion) and fixes the changelog telemetry docs link; runtime behavior is unchanged.ALTIMATE_TELEMETRY_DISABLEDenv snapshot hooks to theFlag.truthyEnvdescribe block in the adversarial test to reduce unnecessary setup; all tests still pass.Written for commit 3c0665d. Summary will update on new commits.
Summary by CodeRabbit
New Features
Bug Fixes
grepsupport.