Ten years in mobile, now mostly Kotlin Multiplatform and AI tooling. Most posts appear on WeChat first and get archived here, with reproducible steps and primary sources wherever possible.

DeepSeek Harness Code Review: The Bottleneck Was Never Git
DeepSeek Harness 0.2.2-rc.2 added review by branch, commit and file type. I measured every stage on a 21,711-file repository: creating a worktree takes 1.5 seconds, producing a 28,458-line diff takes 75 milliseconds, and what actually does not fit is 300,000 tokens of context.

You Asked for Rounded Corners, Compose Multiplatform Desktop Drew a Spike
Stroke(join = Round) was drawn as Miter on Compose Multiplatform’s desktop, iOS and web targets while Android stayed fine. The root cause is a setter that never runs. I rendered both versions and diffed them pixel by pixel: 1,619 pixels apart.

Jake's Approach: Run Compose on the Server, Push Only HTML
Jake Wharton runs Compose on the server with Molecule, renders HTML with kotlinx.html, pushes it over SSE, and merges it with Idiomorph. I rebuilt it and found that whether your text input survives comes down to three defaults.

Liquid Glass, Running on Compose Desktop
Apple shipped Liquid Glass and Android still has no official answer. I dropped Kyant0/Backdrop into a Compose Multiplatform desktop project and it actually runs on macOS. The cross-platform adaptation is only 280 lines, because AGSL is a subset of SkSL.

dsh 0.2.2-rc.1: This Release Changed 0 Lines of Code
Unpack both tarballs and compare md5 file by file: 8 packages, 290 files, 8 differences, all of them in package.json. The version number went from alpha to rc, not a line of code moved, but every dependency got bumped, and plugins have to follow.

JetBrains' New IDE, and the Editor Is Read-Only
JetBrains shipped an AI IDE, and getting it running showed me that the feature list isn’t the interesting part: the source hardcodes readOnly: true, and when I typed into the editor the file hash didn’t move. This is an IDE that won’t let you change code.

I Had dsh Write Its Own Plugin. It Took Nine Minutes.
I asked dsh’s Creator mode for a plugin. It inspected the runtime, read source, wrote the package, requested install approval, and nine minutes later the tool was sitting in the plugin manager. A fresh session called it in ten seconds.

Android 16 Deleted Your Portrait Lock, and I Verified It Three Times on an Emulator
One codebase, two builds, targetSdk 35 and 36, a screen resized to tablet size, then a command to rotate. 35 stays locked with black bars, 36 flips and fills the window, and back on a phone-sized display the restriction returns.

The eMudhra Certificate Chain Broke, So I Audited Every JetBrains App on My Mac
Eight intermediate certificates with recoverable private keys, four root CAs to distrust. After following JetBrains’ own guidance I found the official workaround removes two of them, my machine had all four, and not one of my three JVMs was patched.

Google Turned Every App Into an MCP Server on Your Phone
On Android 16 every app can declare functions like an MCP server. I sent a message from outside my own app with zero screen touches, and dug out the internal|privileged permission gate.

Giving an AI Agent DevTools: It Can See Every Frame
The same screen: a 77 KB screenshot the model has to guess at, versus 4,184 bytes of text that states the structure. I ran both on an emulator, and hit the parts it still cannot do.

Split One Developer Request Into Three Messages and the Agent's Cost More Than Doubles
JetBrains analyzed 4,782 real IDE sessions: splitting one request into three messages more than doubles cost and barely moves the resolve rate.