Finished Isn't Verified

Alpha converts an existing SDK into other languages. Its console shows what was generated and how each piece was checked, then walks the maintainer through anything it couldn't convert, so they can decide what is safe to ship.

Problem
A generator translates a Python SDK to TypeScript in seconds, but leaves behind the code it can't convert. The first console called that run "Succeeded", and its only fix path was a file overwritten on every regeneration.
Role
Founding Designer · framing, UX, UI and the front-end prototypes, end to end
Team
Team of 3
Timeline
Recent · 2026
Platform
Web console · local developer tool
Key Contribution
Impact rating · ship-or-implement decision · guided repair loop · honest check states
When the conversion gets stuck, help the developer without taking over.
The first Alpha console: a run titled Python petstore with a green Succeeded badge, and below it a Manual fixes entry for compute_signature, the function it couldn't convert
First Console · Nov 5
"Succeeded" above a function it couldn't convert.

Every conversion leaves something Alpha can't translate on its own. Here it is compute_signature, a custom webhook signer. That is when a developer needs help most, and when a tool is most tempted to take over.

Too Little Help

The first console said Succeeded, then pointed to a file stamped DO NOT EDIT that every regeneration overwrites.

Too Much Help

Call a model, patch the stub, turn the badge green. Fast, and the developer ships code they never reviewed.

When Alpha can't finish the job, how does it guide the fix without making the call for the developer?

The repair loop, running

The Petstore sample SDK, Python to TypeScript: one run, one gap, one fix that survives regeneration.

Recorded in the prototype · 1 min 26 sec · alphasdk.dev →

Each iteration answered the question the last one left open.
  1. Readiness report
    Is it ready?
  2. Actionable diagnostics
    Where is the gap?
  3. Ownership
    Where does the fix belong?
  4. Repair workspace
    How do I fix it?
  5. Failure recovery
    Did the fix work?
Alpha measures. The developer decides.

The obvious version fixes the gap for you: call a model, patch the stub, show green. I designed the opposite defaults:

Impact, not prioritya gap is rated by what it reaches: breaks operations, limits the public API, or internal only
Implement it, or ship without itthe choice is the maintainer's, recorded in the config, the README and the SDK's own error
A file you own, previewed firstthe fix lives in a module that survives regeneration, never in the generated stub
Checks that say what they provecompile, signature and behavior pass separately, and what wasn't tested says so
Rules by default, a model by choicethe same source always gives the same SDK, byte for byte; a model is a per-run opt-in, checked, then pinned
Issue card: Signature generation isn't implemented, tagged Limits the public API, with three facts — not called by any operation, public so users can call it, and if called it throws — beside Implement it, Ship without it and Translate with a model
Three facts, each with its code location: no operation calls it, your users can, and calling it throws.
Ship without computeSignature dialog: keep it with a clear error or remove it from the public API, a reason box, and the exact alpha.config.json lines Alpha will write, including who decided and the date
Before anything changes, the dialog shows exactly what Alpha writes, with who decided and when.
Review changes before applying: overlays/units/compute_signature.ts and alpha.config.json marked Survives regen, sdk-ts/codeunits.ts marked Regenerated, followed by the diff of the new file
Two files marked Survives regen, one marked Regenerated. Nothing changes until you apply.
Checks for this version: compilation, signature compatibility and three HMAC test vectors passed with matching digests; webhook delivery skipped because no scenario sends a signed webhook
Three HMAC vectors match the Python digests. Webhook delivery is skipped, and says why.
New run form: Translation set to Deterministic, the default, with Model-assisted offered as opt-in for this run only, pinned in alpha.lock.json
Model-assisted translation is opt-in for one run, and only for code the rules can't convert.

That adds steps to a tool whose promise is speed.

But a green check that isn't true costs more than a slower one that is.

The shortcut I rejected: let developers edit the generated stub. It is the fastest start, and the next regeneration silently deletes the fix.

Outcome

A working prototype, tested with developers on my team. See Alpha at alphasdk.dev.

5
iterations, from readiness report to guided repair
3
places a ship-without decision is recorded: config, README and the SDK's error
Live
Alpha at alphasdk.dev, open to any reviewer

Tested with team developers · no baseline study yet

What I'd measure next

Task success, wrong-file edits, misread passes and time on task, against a baseline without the workspace. Then a keyboard-only pass and a contrast check before making any accessibility claim.

Next Project
Sustainability Discovery — MyHub
→

© 2026 · Cristal Jiang